Sql-Server

如何確定數據庫是否是鏡像設置中的主體?

  • July 7, 2017

我有兩個數據庫伺服器Server1,並且Server2配置了鏡像。單個數據庫MirrorDB, 被鏡像。Server1named上還有另一個數據庫,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 邏輯合併到你的過程中?

編輯:

我對此進行了更多研究,如果您使用連結伺服器連接到鏡像數據庫,您可以按照以下文章中的說明設置連結伺服器,使其支持數據庫鏡像:

支持數據庫鏡像故障轉移的 SQL Server 連結伺服器

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