Inside Microsoft.com資料庫鏡像快速入門

Saleem Hakani

如果您的資料庫離線了,您可能就會一籌莫展,對嗎?然而,如果您使用的是含 SP1 的 SQL Server 2005,資料庫鏡像功能可以避免這樣的災難。此嶄新的高可用性科技可讓您將資料庫持續保持在熱待命 (Hot Standby) 的狀態,以便在實際執行的資料庫

因任何原因而無法使用時進行備援。資料庫鏡像功能的運作方式,是將資料庫的交易記錄從主要伺服器轉移到次要伺服器,而此次要伺服器的作用就是以熱待命提供備援。有進行資料庫鏡像作業時,在變更實際資料頁之前,資料的變更會先記錄在交易記錄中,如同 SQL Server™ 的更新作業一樣。記錄檔的記錄首先會放置在主要資料庫的記錄緩衝記憶體中,然後再儲存到磁碟中予以保存。這些交易記錄會複製到鏡像伺服器的資料庫中,並重新執行。這會造成主要資料庫的變更被複製到鏡像資料庫上。請注意,只有主要資料庫可供用戶端連線存取。當主要資料庫收到用戶端的變更要求時,主要伺服器會將允許的變更傳送到鏡像伺服器;鏡像伺服器並不會自行做出這些決定。啟用資料庫鏡像之後,當主要資料庫失敗時,就可以使用鏡像資料庫。

資料庫鏡像的運作原理

支援 SQL Server 2005 的標準硬體,都可用於資料庫鏡像,這可確保資料在資料庫失敗時不會遺失。鏡像資料庫永遠都會以目前正在主要資料庫伺服器上處理的交易進行更新。[圖 1] 說明資料的流向。

如果您的主要伺服器不幸停止運作,您還是可以放心,因為鏡像伺服器上會有主要資料庫按照已認可交易時間點所儲存的完整副本。因此,鏡像伺服器永遠都是備妥可隨時接手主要伺服器的角色。

Figure 1 Data replication to the mirror

Figure 1** Data replication to the mirror **(按影像可放大)

在資料庫鏡像拓撲當中,如果您想要在主要伺服器和鏡像伺服器之間啟動自動容錯移轉,就需要稱為見證伺服器的第三部伺服器。見證伺服器可以是任何支援 SQL Server 2005 的電腦。

作業模式

您所使用的資料庫鏡像拓撲,取決於您所選擇的交易安全性和作業模式。資料庫鏡像所支援的作業模式包含高安全性 (無論有無自動容錯移轉) 和高效能。

高安全性 (有自動容錯移轉):此模式支援最高資料庫可用性,有同步資料移轉和自動容錯移轉至鏡像資料庫的功能。此作業模式最適合在主要伺服器與鏡像伺服器之間有快速且可靠的通訊,而且您只需要針對單一資料庫進行自動容錯移轉。使用此配置時,主要資料庫在認可交易之前會先等候鏡像伺服器的訊息,亦即確認鏡像伺服器已順利將交易的記錄儲存到磁碟上。

高安全性 (無自動容錯移轉):此模式支援最高資料庫可用性,有同步資料移轉至鏡像資料庫的功能,但是沒有自動容錯移轉至鏡像資料庫的功能。在此模式中,如果鏡像伺服器執行個體變得無法使用,主要伺服器執行個體就會持續運作,但是無法鏡像資料。如果主要伺服器停止運作,資料庫鏡像就會暫停,但是您可以手動強制服務進行容錯移轉。

高效能:在此作業模式當中,資料的轉移是非同步的。主要伺服器並不會如同上述兩種模式一樣,等候鏡像伺服器的確認。鏡像伺服器會竭盡所能跟上主要伺服器的腳步,但是並不保證主要伺服器上的所有最新交易,都能夠隨時儲存到鏡像伺服器的交易記錄中。如果主要伺服器停止運作,資料庫鏡像就會暫停,但是您可以手動強制服務進行容錯移轉。

奠定基礎

只要您使用最佳作法來建立穩固的基礎,資料庫鏡像設定其實是很簡單的程序:

伺服器版本 確認主要伺服器和鏡像伺服器所執行的是相同版本的 SQL Server 2005,您可以使用 Standard 版或 Enterprise 版。

見證伺服器可用性 如果您計劃使用高安全性伺服器加上自動容錯移轉功能,請確定見證伺服器是可用的,而且已經安裝了 SQL Server 2005 (無論是任何版本)。見證伺服器可以在任何支援 SQL Server 2005 的可靠電腦系統上執行。

鏡像影像 請確定鏡像伺服器執行個體與主要伺服器執行個體有完全相同的作業、登入、SQL Server Integration Service (SSIS) 套件、磁碟分割、檔案位置及伺服器組態。將鏡像伺服器設定成與主要伺服器完全相同,才能夠讓鏡像伺服器的運作和主要伺服器相同。

完整復原 請注意,所有加入資料庫鏡像的資料庫,都必須設定為「完整」復原模式。

Master 和 TempDB 確認在鏡像拓撲中的所有伺服器執行個體,都使用相同的 Master 和 TempDB 定序和字碼頁。使用不同的定序和字碼頁可能會造成設定資料庫鏡像時發生問題。

備份 如果要進行鏡像的資料庫很龐大,您必須先為資料庫執行完整備份,然後使用 [NORECOVERY] 選項,在鏡像伺服器執行個體上還原。

預先規劃 決定所有伺服器名稱、通訊埠編號、安全性帳戶及資料庫位置,並且記錄這些資料。請參閱 [資料庫鏡像最佳作法] 資訊看板來檢視核對清單。

一但您已確切處理了基礎工作,就可以開始動手在環境中設定資料庫鏡像。

資料庫鏡像最佳作法

  1. 使用擁有相同 CPU、記憶體、儲存裝置及網路容量的夥伴伺服器。
  2. 確定雙方伺服器都安裝了相同的 SQL Server 和 OS 版本、Service Pack 及更新程式。
  3. 將 SQL Server 安裝在主要伺服器執行個體和鏡像伺服器執行個體上的相同目錄和磁碟機結構中。
  4. 如果效能成為問題,請考慮使用專屬網路介面卡來分攤負載量。
  5. 如同伺服器夥伴,請確定主要伺服器執行個體和鏡像伺服器執行個體在 CPU、記憶體、儲存裝置和網路容量方面都完全相同。確認兩部伺服器都有相同的目錄結構、磁碟分割配置及 SQL Server 組態,才可以免除在執行容錯移轉至鏡像夥伴伺服器期間,或是執行容錯移轉至鏡像夥伴伺服器之後,還需要進行這些設定的變更。
  6. 確定所有的應用程式都可以連接和執行所有必要的動作,而且主要伺服器執行個體上的所有使用中 SQL Server 登入 (以及它們的權限) 也都存在於鏡像伺服器執行個體上。您可以使用 [傳送登入工作] 工作,讓 SQL Server 2005 Integration Services 來完成此工作。
  7. 從主要伺服器複製 SQL Server 代理程式作業、警示、SSIS 封裝、支援資料庫、連結的伺服器定義、備份裝置、維護計劃、資料庫郵件設定檔...等等到鏡像伺服器。
  8. 建立標準程序,讓您無論何時在主要伺服器上做出任何變更 (如硬體變更、軟體變更、SQL Server 設定變更或是任何資料庫物件變更) 時,系統會自動進行重複或是複寫,以傳送變更到鏡像伺服器執行個體上。
  9. 在正式使用之前,先執行多重容錯移轉測試。

設定作業

讓我們使用具備自動容錯移轉的高安全性作業模式,來設定資料庫鏡像功能 (如同前述,這表示需要見證伺服器執行個體)。在此範例中,我將使用 [圖 2] 的伺服器和資料庫名稱,這也指定了每個伺服器的角色。

請記住,由於設定可能會影響從主要伺服器複製擱置中的交易記錄到鏡像伺服器時的效能,所以您或許應該選擇在離峰時段執行資料庫初始設定。

鏡像功能的設定包含三個步驟:在參與鏡像作業的伺服器上建立端點、針對主要資料庫執行備份和還原,以及在所有參與的伺服器上啟動鏡像工作階段。

在建立資料庫鏡像工作階段之前,您必須先為所有參與資料庫鏡像作業的伺服器建立通訊機制。若要這麼做,請同時在 ServerA 和 ServerB 上執行下列陳述式,在所有伺服器上建立端點:

Create Endpoint Mirroring_Endpoint
State= Started as TCP (Listener_Port=5001)
For Database_Mirroring (Role=Partner);

請將 ServerC (它將會是見證伺服器) 的 (Role=Partner) 變更為 (Role=Witness),然後執行陳述式。這將控制每個執行個體接聽的 TCP 通訊埠。

在下一個步驟當中,您應該執行完整的資料庫備份,接著進行主要伺服器 DBM_Demo 資料庫記錄檔的備份,然後使用 [NORECOVERY] 選項,在鏡像伺服器上還原此資料庫 (使用 NORECOVERY 可以確保鏡像資料庫將會是在還原狀態中,讓交易記錄可以套用)。

以下是從 ServerA (主要伺服器執行個體) 進行 DBM_Demo 資料庫完整備份的 T-SQL 陳述式:

Backup Database DBM_Demo to DISK='E:\MSSQL\Bak\DBM_Demo_FULL.bak';

在您執行完整資料庫備份之後,如果資料庫有任何的變更,就可能需要執行資料庫記錄的備份;否則應該不需要。

如有必要,您可以使用下列 T-SQL 陳述式,從 ServerA 上執行 DBM_Demo 資料庫記錄的備份:

Backup Log DBM_Demo to Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak';

一但您已執行過所有的備份工作,請將備份檔案移到 ServerB 或到一個共用位置,讓您可以在 ServerB 上還原這些備份檔案。完成這些步驟之後,您也應該還原自上一次 ServerA 執行完整資料庫備份之後,所備份的任何交易記錄。

您可以使用下列 T-SQL 陳述式,在 ServerB 上以 [NORECOVERY] 選項來還原完整備份和記錄的備份:

--Restore full database backup on the mirror --server instance
Restore Database DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_FULL.bak' with NORECOVERY;

最後,請使用下列 T-SQL 陳述式,以 [NORECOVERY] 選項在鏡像伺服器上還原記錄的備份:

Restore Log DBM_Demo from Disk='E:\MSSQL\Bak\DBM_Demo_Log.bak' with NORECOVERY;

完成所有備份的還原之後,您就可以執行最終步驟 -- 在所有參與的伺服器上啟動您的資料庫鏡像工作階段。

資料庫鏡像工作階段的設定,需要每個伺服器執行個體都有伺服器網路位址。此位址必須藉由提供系統位址和該執行個體所接聽的通訊埠編號,來識別該執行個體。伺服器網路位址語法應如下所示:

TCP://<System-address>:<port>

其中 <System-address>:是完整的網域名稱或是 IP 位址,您可以從本機電腦的命令提示字元中執行 IPCONFIG,來獲取此資訊。

<Port> 則是在您建立端點時就已經建立了。

在 ServerB 上啟動資料庫鏡像工作階段的方法如下所示:

Alter Database DBM_Demo
Set Partner= 'TCP://ServerA.com:5001';

然後在 ServerA 上執行下列 T-SQL,即可啟動工作階段:

Alter Database DBM_Demo
Set Partner='TCP://ServerB.com:5001';

接下來,請啟用 ServerC (見證伺服器) 上的鏡像工作階段,如下所示:

Alter Database DBM_Demo
Set Witness='TCP://ServerC.com:5001';

現在您的工作環境已經可以開始執行資料庫鏡像了。任何在 DBM_Demo 資料庫上所新增或是修改的資料庫物件,都會傳送到 ServerB 的備份上。然而,如果 ServerA 的資料庫變得無法使用,就可能會造成容錯移轉,使鏡像資料庫的角色變成主要資料庫的角色。

完成資料庫鏡像功能的設定且開始執行之後,如果您的實際資料庫停止運作,就會有一個熱待命的資料庫可以隨時接手。

Saleem Hakani 是 Microsoft 的資深資料庫工程師,他在資料庫系統方面有超過 14 年的經驗。他成立且主導 Microsoft SQL 社群,而且負責發表遍及 Windows Live 組織的 SQL Server 標準化與自動化。Saleem 擁有 MCTS、MCDBA 及 MCSA 等證照。他的電子郵件為 Saleem@sqlcommunity.net

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.