Transact-SQL 設定和資料庫鏡像作業模式

這個主題將從 ALTER DATABASE 設定和鏡像資料庫與見證狀態的觀點,討論資料庫鏡像工作階段的作業。這個主題適用於主要或專以 Transact-SQL (非 Microsoft SQL Server Management Studio) 管理資料庫鏡像的使用者。如果您不熟悉作業模式,請參閱<資料庫鏡像工作階段>。

[!附註]

作為使用 Transact-SQL 的替代方法,您可以使用 [資料庫屬性] 對話方塊的 [鏡像] 頁面,在 [物件總管] 中控制工作階段的作業模式。如需詳細資訊,請參閱<如何:設定資料庫鏡像工作階段 (SQL Server Management Studio)>。

交易安全性和見證狀態影響作業模式的方式

工作階段的作業模式是由交易安全性設定和見證狀態的組合所決定。資料庫擁有者可隨時變更交易安全性層級,且可加入或移除見證。

交易安全性

交易安全性是鏡像特有的資料庫屬性,用來決定資料庫鏡像工作階段是以同步或非同步方式作業。有兩個安全性層級:FULL 和 OFF。

  • SAFETY FULL

    完整交易安全性會使工作階段在高效能模式中以同步方式運作。如果見證存在的話,工作階段就會支援自動容錯移轉。

    當您使用 ALTER DATABASE 陳述式建立工作階段時,工作階段一開始會將 SAFETY 屬性設定為 FULL;這表示工作階段會以高安全性模式開始。在工作階段開始後,您就可以加入見證。

    如需詳細資訊,請參閱<同步資料庫鏡像 (高安全性模式)>。

  • SAFETY OFF

    關閉交易安全性會使工作階段在高效能模式中以非同步方式運作。如果將 SAFETY 屬性設定為 OFF,則 WITNESS 屬性也應該設定為 OFF (預設值)。如需有關見證在高效能模式中之影響的相關資訊,請參閱這個主題後面的「見證的狀態」。如需有關在關閉交易安全性的情況下執行的詳細資訊,請參閱<非同步資料庫鏡像 (高效能模式)>。

資料庫的交易安全性設定會記錄在每個夥伴之mirroring_safety_levelmirroring_safety_level_desc 資料行的 sys.database_mirroring 目錄檢視中。如需詳細資訊,請參閱<sys.database_mirroring (Transact-SQL)>。

資料庫擁有者可以隨時變更交易安全性層級。

見證的狀態

如果已設定見證,則需要仲裁,因此見證狀態隨時都很重要。

如果存在,則見證的狀態會是下列兩種狀態之一:

  • 見證連接到夥伴時,與該夥伴相關的見證會處於 CONNECTED 狀態,且具有該夥伴的仲裁。在此情況下,即使其中一個夥伴無法使用,也可使用資料庫。

  • 見證存在但未連接到夥伴時,與該夥伴相關的見證會處於 UNKOWN 或 DISCONNECTED 狀態。在此情況下,見證會缺少該夥伴的仲裁,而如果夥伴未彼此連接,資料庫會變成無法使用。

如需有關仲裁的資訊,請參閱<仲裁:見證如何影響資料庫可用性>。

伺服器執行個體上每個見證的狀態,都會記錄在 mirroring_witness_statemirroring_witness_state_desc 資料行的 sys.database_mirroring 目錄檢視中。如需詳細資訊,請參閱<sys.database_mirroring (Transact-SQL)>。

下表概述根據交易安全性設定和見證狀態而定的工作階段作業模式。

作業模式

交易安全性

見證狀態

高效能模式

OFF

NULL (無見證)2

沒有自動容錯移轉的高安全性模式

FULL

NULL (無見證)

具有自動容錯移轉的高安全性模式1

FULL

CONNECTED

1 如果見證中斷連接,我們建議您設定 WITNESS OFF,直到見證伺服器執行個體可用為止。

2 如果在高效能模式中有見證,該見證不會參與工作階段。不過,若要讓資料庫可供使用,必須至少有兩個伺服器執行個體保持連接。因此,建議您讓 WITNESS 屬性在高效能模式工作階段中保持設定為 OFF。如需詳細資訊,請參閱<仲裁:見證如何影響資料庫可用性>。

檢視安全性設定和見證狀態

若要檢視資料庫的安全性設定和見證狀態,請使用 sys.database_mirroring 目錄檢視。相關的資料行如下:

因數

資料行

描述

交易安全性

mirroring_safety_levelmirroring_safety_level_desc

在鏡像資料庫上更新的交易安全性設定,其中一個為:

UNKNOWN

OFF

FULL

NULL= 資料庫不在線上。

見證存在嗎?

mirroring_witness_name

資料庫鏡像見證的伺服器名稱或 NULL,表示沒有見證。

見證狀態

mirroring_witness_statemirroring_witness_state_desc

給定夥伴之資料庫中的見證狀態:

UNKNOWN

CONNECTED

DISCONNECTED

NULL = 沒有見證或資料庫不在線上。

例如,在主體或鏡像伺服器上輸入:

SELECT mirroring_safety_level_desc, mirroring_witness_name, mirroring_witness_state_desc FROM sys.database_mirroring

如需有關這個目錄檢視的詳細資訊,請參閱<sys.database_mirroring (Transact-SQL)>。

影響失去主體伺服器時之行為的因數

下表概述失去主體伺服器時,交易安全性設定、資料庫狀態和見證狀態對於鏡像工作階段行為的聯合影響。

交易安全性

鏡像資料庫的鏡像狀態

見證狀態

遺失主體時的行為

FULL

SYNCHRONIZED

CONNECTED

自動容錯移轉發生。

FULL

SYNCHRONIZED

DISCONNECTED

停止鏡像伺服器;無法進行容錯移轉且無法使用資料庫。

OFF

SUSPENDED 或 DISCONNECTED

NULL (無見證)

鏡像伺服器可強制服務 (可能會遺失資料)。

FULL

SYNCHRONIZING 或 SUSPENDED

NULL (無見證)

鏡像伺服器可強制服務 (可能會遺失資料)。