Sql-Server

當使用者對數據庫執行讀取操作時,備用日誌傳送失敗

  • November 4, 2018

我有一個使用日誌傳送的備用配置的 SQLSERVER 2008 實例。

生產伺服器每 30 分鐘執行一次 LSBACKUP 作業,將其發送到備用伺服器,然備份用伺服器將 LSRESTORE 發送的日誌。

我遇到的問題是,如果任何使用者會話正在訪問數據庫,則 LSRESTORE 作業將失敗,即使它們沒有包含任何寫入操作的活動事務。

數據庫處於(Standby / Read-Only)模式,因此沒有可能掛起的寫入操作,只需在 SSMS 中開發數據庫表將阻止 LSRESTORE 作業並顯示以下錯誤日誌:

2017-02-14 09:29:22.87  *** Error: Exclusive access could not be obtained because the database is in use.
RESTORE LOG is terminating abnormally.(.Net SqlClient Data Provider) ***

我發現的唯一解決方案是當發生這種情況時,我可以將數據庫設置為 single_user 並返回到 multi_user 以清除錯誤。我還可以在還原前的一步中將 SQL 命令放入 SQLAGENT 作業中,但它看起來更像是一個 hack 而不是修復!

ALTER DATABASE [db_name_goes_here] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [db_name_goes_here] SET MULTI_USER

是否可以以任何方式保護我的備用人員免受此問題的影響?

當您使用輔助數據庫進行查詢處理時,您必須檢查

恢復事務日誌備份時,數據庫使用者斷開連接。

引用自:https://dba.stackexchange.com/questions/164288