Sql-Server
當使用者對數據庫執行讀取操作時,備用日誌傳送失敗
我有一個使用日誌傳送的備用配置的 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
是否可以以任何方式保護我的備用人員免受此問題的影響?
當您使用輔助數據庫進行查詢處理時,您必須檢查
恢復事務日誌備份時,數據庫使用者斷開連接。