Sql-Server
鏡像上的作業正在針對主節點執行
我在目前的主要和鏡像故障轉移 SQL Server 設置之間有一組鏡像作業。過去,鏡像伺服器上的作業在啟用時會失敗,因為它們無法打開本地數據庫,因為它處於恢復狀態。但是,我現在看到作業成功並正在轉發到目前的主數據庫。
我已經看到 .Net 使用的 SQL Server 驅動程序的這種行為,因此如果發生故障轉移,它將允許自動重新連接。我以前在 SQL 作業中沒有看到過這種行為,而且我似乎找不到任何關於它的文件。
我發現另外兩個提到此行為(一,二)的解決方法,但是我很難找到有關此功能的文件,因此我知道這是我所做的配置更改還是啟用了我安裝的更新。
此功能是否記錄在 Microsoft 的任何參考資料中?
這些作業是 T-SQL 步驟,它們正在讀取和(成功)寫入。有些是內聯 T-SQL,有些是在目標數據庫中呼叫 SP。我使用的是標準鏡像而不是可用性組。
過去似乎有很多人遇到過這個問題,他們都實施了一種或另一種解決方法來擺脫它。未在 Microsoft 網站上記錄或由任何已知的 SME(主題專家)提供。
首先,我會說數據庫鏡像已被棄用,並且在不久的將來微軟不會支持,因此您應該計劃更改它並用另一種方法替換。
此功能將在 Microsoft SQL Server 的未來版本中刪除。避免在新的開發工作中使用此功能,併計劃修改目前使用此功能的應用程序。請改用 Always On 可用性組。
如上所述,我認為很少有有趣的解決方法可以用來避免這個問題:
- 禁用作為數據庫鏡像一部分的數據庫的 SQL Server 代理作業。這可以使用最後給出的程式碼來完成:
- 使用數據庫名稱作為在輔助數據庫上執行的作業的第一步,因為數據庫將處於恢復或待機狀態。作業會失敗。
- 如果所有作業都與數據庫鏡像的數據庫部分相關,則停止 SQL Server 代理。
- 從中獲取鏡像角色的價值
msdb.sys.database_mirroring
並將其包含在您的工作步驟中。在此處閱讀更多操作方法。要禁用作業步驟,如果有很多作業,您可以使用以下腳本:
DECLARE @sql nvarchar(max) ;WITH cte AS ( SELECT j.job_id, j.[name] FROM msdb.dbo.sysjobs j WHERE j.[name] like 'Job_Name%' ) SELECT @sql = ( SELECT 'EXEC msdb.dbo.sp_update_job @job_id = '''+CAST(job_id as nvarchar(max))+''', @enabled = 0;'+CHAR(10) FROM cte FOR XML PATH('') ) EXEC sp_executesql @sql
希望這可以幫助。