我正在使用 SQL SERVER 2005 SP2。
我已经有很长一段时间的LOG SHIPPING工作和稳定的环境了。
昨天,DR服务器中LOG SHIPPING的恢复作业因锁定错误而失败(日志从最后一行开始向上):
05:02:38.34 *** Error: The log backup file 'C:\database\LogShipping\20100927021501.trn' was verified but could not be applied to secondary database ''
05:02:37.42 *** Error: Could not apply log backup file 'C:\database\LogShipping\20100927021501.trn' to secondary database ''.
05:02:37.42 *** Error: Exclusive access could not be obtained because the database is in use.
05:02:17.04 Restored log backup file. Secondary DB: ''<c/> File: 'C:\database\LogShipping\.trn'
05:00:01.01 Disconnecting users. Secondary DB: ''
05:00:00.64 Starting transaction log restore. Secondary ID: 'f89bba95-6fa8-4ee3-8883-3bb3b63f6127'<nl/>
05:00:00.64 Retrieving restore settings. Secondary ID: 'f89bba95-6fa8-4ee3-8883-3bb3b63f6127'<nl/>
05:00:00.65 Retrieved common restore settings. Primary Server: ''<c/> Primary Database: ''<c/>
Backup Destination Directory: 'C:\database\LogShipping'<c/> File Retention Period: 4320 minute(s)<nl/>
05:00:00.65 Retrieved database restore settings. Secondary Database: ''<c/> Restore Delay: 0<c/> Restore All: True<c/> Restore Mode: Standby<c/>
Disconnect Users: True<c/> Last Restored File: C:\database\LogShipping\20100927014500.trn<c/> Block Size: Not Specified<c/> Buffer Count: Not Specified<c/> Max Transfer Size: Not Specified
05:00:00.54 ----- START OF TRANSACTION LOG RESTORE -----
下一个恢复作业成功,没有任何问题,它恢复了所有日志,甚至是较旧的日志。
那么到底发生了什么?
我在日志传送配置中选中了复选框“恢复备份时断开数据库中的用户”。
您可以在上面的日志中看到有一个 DISCONNECTING USERS 阶段。
在我的 Google 搜索中,我只找到告诉我选中上述复选框的链接,或者创建一个终止会话并在恢复作业之前运行它的过程。
但是 - 在恢复作业之前用户断开连接。也许应用程序用户尝试在第一次日志恢复结束和第二次日志恢复之间的几分之一秒内连接数据库?
如果是这样,我该如何防止这种情况发生?
谢谢, 罗尼.
要解决此问题,请为 LS Restore SQL Agent 作业设置“重试作业”属性。 这并不完全是万无一失的。尽管如此,您还是可以降低用户在那一瞬间连接的可能性。重试三次就足够了。
我也遇到过这个问题。问题是,当日志传送 api 终止与数据库的打开连接时,它会运行
ALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATE
。从技术上讲,如果此后应用程序立即尝试登录,它将在日志传送之前获得单用户会话。
Ue 登录触发器 在执行特定用户或主机的恢复作业之前和之后启用和禁用,以防止在特定时间段内建立与数据库的连接。
上述错误是由于同时进行多个 T-log 备份而引发的(veritas NetBackup 工具以及通过 ls 备份作业进行日志备份)