Sql-Server
如何確定數據庫是否是鏡像設置中的主體?
我有兩個數據庫伺服器
Server1
,並且Server2
配置了鏡像。單個數據庫MirrorDB
, 被鏡像。Server1
named上還有另一個數據庫,OtherDB
它只存在於Server1
而不是鏡像。OtherDB
有一個名為的儲存過程SP_Z
,它引用一個表MirrorDB
來計算一些值。儲存過程 in的
Server1
主體何時可以完美執行,但是何時故障轉移到in失敗,因為它無法打開。MirrorDB``SP_Z``OtherDB``MirrorDB``Server2``SP_Z``OtherDB``MirrorDB
我該如何解決這個問題?
起初,我希望您的錯誤位於檢索
SP_Z
過程的位置。對不起,我很匆忙。此連結解釋瞭如何查詢數據庫的數據庫鏡像狀態。因此,您執行以下操作:
DECLARE @MirroringRole int; SET @MirroringRole = (SELECT mirroring_role FROM sys.database_mirroring WHERE DB_NAME(database_id) = N'DB_X'); -- your database name here IF @MirroringRole = 2 -- Mirror -- connect to the failover partner server, using your database ELSE IF @MirroringRole = 1 -- Principal -- connect to this server END IF
通常,當連接到鏡像數據庫時,您不會直接連接到主體實例,您將使用由本機客戶端或 odbc 驅動程序建立的連接,如下面連結中指定的那樣,它將了解故障轉移夥伴並重試連接如果它無法訪問主體:
看起來你是直接連接的(我認為是通過連結伺服器???)你可能需要將一些 try catch 邏輯合併到你的過程中?
編輯:
我對此進行了更多研究,如果您使用連結伺服器連接到鏡像數據庫,您可以按照以下文章中的說明設置連結伺服器,使其支持數據庫鏡像: