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_level 和 mirroring_safety_level_desc 資料行的 sys.database_mirroring 目錄檢視中。如需詳細資訊,請參閱<sys.database_mirroring (Transact-SQL)>。
資料庫擁有者可以隨時變更交易安全性層級。
見證的狀態
如果已設定見證,則需要仲裁,因此見證狀態隨時都很重要。
如果存在,則見證的狀態會是下列兩種狀態之一:
見證連接到夥伴時,與該夥伴相關的見證會處於 CONNECTED 狀態,且具有該夥伴的仲裁。在此情況下,即使其中一個夥伴無法使用,也可使用資料庫。
見證存在但未連接到夥伴時,與該夥伴相關的見證會處於 UNKOWN 或 DISCONNECTED 狀態。在此情況下,見證會缺少該夥伴的仲裁,而如果夥伴未彼此連接,資料庫會變成無法使用。
如需有關仲裁的資訊,請參閱<仲裁:見證如何影響資料庫可用性>。
伺服器執行個體上每個見證的狀態,都會記錄在 mirroring_witness_state 和 mirroring_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_level 或 mirroring_safety_level_desc |
在鏡像資料庫上更新的交易安全性設定,其中一個為: UNKNOWN OFF FULL NULL= 資料庫不在線上。 |
見證存在嗎? |
mirroring_witness_name |
資料庫鏡像見證的伺服器名稱或 NULL,表示沒有見證。 |
見證狀態 |
mirroring_witness_state 或 mirroring_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 (無見證) |
鏡像伺服器可強制服務 (可能會遺失資料)。 |