資料庫鏡像工作階段

資料庫鏡像發生在資料庫鏡像工作階段的內容裡。本主題假設您已熟悉資料庫鏡像中的主體、鏡像及見證等角色、作業模式以及角色切換。如需詳細資訊,請參閱<資料庫鏡像概觀>。

當鏡像資料庫就緒,伺服器執行個體也完成配置後,資料庫擁有者就可以啟動資料庫鏡像了。一旦鏡像啟動,每一個夥伴就會開始在其資料庫中,維護該資料庫以及其他夥伴與見證 (如果有的話) 的相關狀態資訊。這項狀態資訊可讓伺服器執行個體維護關聯性,即所謂的「資料庫鏡像工作階段」。在資料庫鏡像工作階段內,伺服器執行個體會彼此監視。直到資料庫擁有者停止工作階段之前,都會持續維護狀態資訊。如需詳細資訊,請參閱<鏡像狀態>和<監視資料庫鏡像>。

啟動資料庫鏡像工作階段時,鏡像伺服器會識別鏡像資料庫上最新套用之交易記錄的記錄序號 (LSN),並要求主體伺服器為所有後續的交易提供交易記錄 (如果有的話)。為了回應,主體伺服器會將自從上次記錄還原至鏡像資料庫或傳送至鏡像伺服器以來累積的所有使用中記錄檔記錄傳送至鏡像伺服器。在主體資料庫之記錄磁碟中累積的未傳送記錄就稱為「傳送佇列」。

鏡像伺服器會立刻將內送記錄寫入磁碟,在套用到鏡像伺服器之前,此筆記錄將一直保留在磁碟中。在鏡像磁碟上等候的記錄稱為「重做佇列」。在重做佇列中等候的未還原記錄量是容錯移轉至鏡像資料庫所需時間的指標。如需詳細資訊,請參閱<預估角色切換期間的服務中斷時間>。

主體伺服器會讓用戶端及用戶端連接繼續使用主體資料庫。啟動鏡像之後,每次用戶端在更新主體資料庫時,都會將交易寫入主體資料庫的記錄時,主體伺服器也會將該筆記錄傳送到鏡像伺服器。接著,鏡像伺服器會立即將該筆記錄寫入磁碟機,以做為重做佇列中的最後一筆記錄。

鏡像伺服器將會儘快於背景以一次一筆記錄的方式,在鏡像資料庫上「重做」記錄 (由最舊的一筆記錄開始)。重做記錄包括由最舊的記錄開始,依序將佇列記錄套用至鏡像資料庫。每一筆記錄都只會重做一次。隨著鏡像資料庫重做記錄,鏡像資料庫將持續向前復原。當主體伺服器截斷或壓縮主體資料庫的記錄時,鏡像伺服器也會在記錄資料流中的同一點壓縮記錄。

重做通常可讓鏡像資料庫迅速趕上主體資料庫。鏡像資料庫是否可完全趕上主體資料庫,則需視工作階段的作業模式而定。在同步的高安全性模式下,主體伺服器會等候確認新的交易,直到交易都寫入鏡像伺服器的記錄磁碟為止。當累積的記錄檔記錄都已傳送至鏡像伺服器後,鏡像資料庫就會與主體資料庫進行同步處理。

在工作階段期間,如果主體伺服器無法立即傳送每筆記錄檔記錄,未傳送記錄檔記錄就會累積在傳送佇列中。在同步的高安全性模式下,進行同步處理後,只有當鏡像暫停或暫止時,新的未傳送記錄才會累積。不過,在非同步的高效能模式下,只要鏡像伺服器在鏡像期間落後以及鏡像暫停或暫止時,未傳送記錄就會累積。未傳送的記錄量是主體伺服器故障時可能遺失資料的指標。

[!附註]

如果重做失敗,鏡像伺服器會使資料庫進入 SUSPENDED 狀態,暫停工作階段。資料庫擁有者必須解決失敗的原因,然後才能繼續工作階段。

並行工作階段

指定的伺服器執行個體可以參與具有相同或不同伺服器執行個體的多個並行資料庫鏡像工作階段 (每個鏡像資料庫一次)。通常,伺服器執行個體在所有資料庫鏡像工作階段中會專門當做夥伴或見證服務。不過,由於每個工作階段獨立於其他工作階段,所以伺服器執行個體可以在某些工作階段中當做夥伴,而在其他工作階段中當做見證。例如,請考慮下列在三個伺服器執行個體 (SSInstance_1、SSInstance_2 及 SSInstance_3) 中的四個工作階段。每個伺服器執行個體會在某些工作階段中當做夥伴服務,而在其他工作階段中當做見證服務:

伺服器執行個體

資料庫 A 的工作階段

資料庫 B 的工作階段

資料庫 C 的工作階段

資料庫 D 的工作階段

SSInstance_1

見證

夥伴

夥伴

夥伴

SSInstance_2

夥伴

見證

夥伴

夥伴

SSInstance_3

夥伴

夥伴

見證

見證

下圖說明兩個伺服器執行個體以夥伴伺服器的角色,共同參與兩個鏡像工作階段。其中一個工作階段用於名為 Db_1 的資料庫,另一個工作階段則用於名為 Db_2 的資料庫。

兩個並行工作階段中的兩個伺服器執行個體

資料庫彼此之間無關。例如,一個伺服器執行個體最初可能同時是兩個資料庫的鏡像伺服器。如果其中一個資料庫發生容錯移轉,該伺服器執行個體會變成容錯移轉資料庫的主體伺服器,但同時維持另一個資料庫的鏡像伺服器身分。

另舉一例,假設有一個伺服器執行個體做為兩個以上資料庫的主體伺服器,並在具有自動容錯移轉的高安全性模式下執行;如果這個伺服器執行個體故障了,則所有資料庫都會自動容錯移轉到其各自的鏡像資料庫。

將伺服器執行個體設定為同時以夥伴與見證來運作時,請確定資料庫鏡像端點支援這兩個角色 (如需詳細資訊,請參閱<資料庫鏡像端點>)。另外,也請確定系統具有足夠資源,以減少資源爭用問題。

[!附註]

由於鏡像資料庫彼此獨立,因此資料庫不能當做群組來容錯移轉。

為資料庫鏡像工作階段建立的執行緒

伺服器執行個體針對資料庫鏡像工作階段建立的執行緒種類,部分取決於此伺服器執行個體扮演的鏡像角色而定。給定的工作階段具有以下的部分或所有執行緒:

  • 用於資料庫鏡像通訊的一個全域執行緒。這個執行緒是由 Service Broker 啟動。

  • 如果伺服器執行個體扮演鏡像夥伴的角色 (不論是主體伺服器還是鏡像伺服器):

    • 每個鏡像資料庫一個執行緒,用於事件處理。

    • 每個鏡像資料庫一個執行緒,適用於原本會封鎖事件執行緒的非同步工作 (如記錄傳送或記錄寫入)。

  • 每當執行個體扮演鏡像伺服器的角色時:

    • 一個重做管理員執行緒 (它會提交重做的記錄) 會執行頁面預先讀取、重新取得鎖定等等。

    • 在 SQL Server Standard 中,每一個鏡像資料庫一個重做執行緒;或是在 SQL Server Enterprise 的每四個 CPU,每一個鏡像資料庫一個重做執行緒。這些執行緒會執行實際的記錄重做。

  • 如果執行個體扮演的角色為見證:

    • 一個全域執行緒,用來針對執行個體扮演見證角色的所有鏡像工作階段處理見證訊息。

資料庫鏡像工作階段的必要條件

資料庫擁有者或系統管理員必須先建立鏡像資料庫、設定端點與登入,而在某些情況下,還必須建立並設定憑證,之後才可以開始鏡像工作階段。如需詳細資訊,請參閱<設定資料庫鏡像>。

建立鏡像資料庫時,最少需要建立主體資料庫的完整備份,以及一個後續記錄備份,並使用 WITH NORECOVERY 將這兩者同時還原到鏡像伺服器執行個體。此外,如果在必要的記錄備份之後建立任何額外的記錄備份,您也必須手動套用每一份額外的記錄備份 (一律使用 WITH NORECOVERY),然後才能啟動鏡像。套用最新的記錄備份之後,您就可以啟動鏡像。如需詳細資訊,請參閱<準備鏡像資料庫以進行鏡像>。

暫停工作階段對主體交易記錄的影響

資料庫擁有者可以隨時暫停工作階段。暫停會保留工作階段狀態,同時移除鏡像。工作階段暫停時,主體伺服器不會將任何新的記錄傳送到鏡像伺服器。這些記錄全都保持使用中狀態,並累積到主體資料庫的交易記錄中。只要資料庫鏡像工作階段保持暫停狀態,交易記錄便無法截斷。因此,如果資料庫鏡像工作階段暫停太久,就會填滿記錄。

如需詳細資訊,請參閱<暫停與繼續資料庫鏡像>。

用戶端連接

資料庫鏡像工作階段的用戶端連接支援是由 Microsoft .NET Data Provider for SQL Server 提供。如需詳細資訊,請參閱<將用戶端連接至鏡像資料庫>。