我正在使用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 -----
下一个还原作业成功,没有任何问题,它还原所有日志,甚至是旧日志。
那是怎么回事?
我在LOG SHIPPING配置中选中了 “在恢复备份时断开数据库中的用户” 复选框。
您可以在上面的日志中看到有一个DISCONNECTING USERS阶段。
在我的Google搜索中,我只找到链接,告诉我检查上面的复选框,或创建一个程序来杀死会话并在还原作业之前运行它。
但是 - 在还原作业之前有用户断开连接。也许一个应用程序用户试图在第一次日志恢复结束和第二次日志恢复之间的几分之一秒内连接数据库?
如果是这样,我该如何防止这种情况发生?
谢谢, 罗尼。
答案 0 :(得分:2)
要解决此问题,请为LS Restore SQL Agent作业设置“重试作业”属性。 这不完全是万无一失的。不过,您可以降低用户在一秒钟内连接的可能性。三次重试应该足够了。
答案 1 :(得分:1)
我也遇到了这个问题。问题是,当日志传送api终止与数据库的打开连接时,它会运行ALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATE
。从技术上讲,如果在此之后立即从应用程序尝试登录,它将在日志传送之前获得单个用户会话。
答案 2 :(得分:0)
Ue登录触发器在为特定用户或主机执行恢复作业之前和之后启用和禁用,以防止在特定时间段内建立与DB的连接。