SQL Server 2005相對于SQL Server 2000來說,無論是性能還是功能都有一個相當大的提高,甚至可以用“革命”來形容這一次升級。SQL Server 2005使 SQL Server 躋身于企業級數據庫行列。在數據高可用性方面,SQL Server 2005為用戶提供了數據鏡像、復制、故障轉移群集、日志傳送功能。本文向讀者簡單介結SQL Server 2005鏡像功能。
一、鏡像簡介
數據庫鏡像是一個高可用性軟件解決方案,為客戶端提供小于10秒故障轉移。每個數據庫鏡像配置均包含一個主體服務器(包含主體數據庫)、一個鏡像服務器(包含鏡像數據庫)和一個見證服務器,其中見證服務器是可選的。主體服務器和鏡像服務器要求是獨立的服務器實例。主體服務器和鏡像服務器的角色是相對的,可以自動或者手動地將主體服務器設置為鏡像服務器,鏡像服務器設置為主體服務器。與主體服務器和鏡像服務器不同的是,見證服務器并不能用于數據庫。見證服務器監視主體服務器和鏡像服務器,確保在給定的時間內這兩個故障轉移服務器中有且只有一個作為主體服務器,從而支持自動故障轉移。如果存在見證服務器,同步會話將以“高可用性模式”運行,如果主體服務器出現故障,可以實現故障自動轉移。如果見證服務器不存在,同步會話將以“高級別保護模式”運行,出現故障需要手動故障轉移,并且有可能丟失數據。
圖1:兩臺服務器鏡像
數據庫準備結束,端點創建完成,用戶便可以啟用數據庫鏡像。鏡像啟動后,每個伙伴都將開始維護所在數據庫中有關其數據庫,以及另一個伙伴和見證服務器的狀態信息。這些狀態信息允許服務器實例維護稱為“數據庫鏡像會話”的當前關系。在數據庫鏡像會話過程中,服務器實例將通過彼此定期交換 PING 消息來互相監視。
鏡像會話啟動后,鏡像服務器將識別鏡像數據庫上最新完成的事務的日志序列號 (LSN),并要求主體服務器提供所有后續事務的事務日志,主體服務器向像鏡像服務器發生一份當前活動的事務日志,鏡像服務器會立即將傳入日志鏡像到磁盤。主體服務器繼續讓客戶端連接使用主體數據庫,每次客戶端更新主體數據庫時,主體服務器都會在寫入到日志時,并將得到的事務日志發送給鏡像服務器,鏡像服務器會將其鏡像到磁盤。同時,鏡像服務器將從最早的事務日志開始,將事務應用到鏡像數據庫中,從而實現主體數據庫和鏡像數據庫同步。
二、配置實例
了解數據庫鏡像的基本知識之后,看一看怎樣去配置鏡像。(使用鏡像功能請確保安裝了SQL Server 2005 SP1)。
筆者為做鏡像實驗,在同一個服務器上同時裝三個實例: SERVER01、SERVER02、SERVER03。其中,SERVER01將作為主體服務器、SERVER02作為鏡像服務器、 SERVER03作為見證服務器。
在完成本實驗的第一步需要將主體服務器的DBMirror數據庫,完全備份出來,然后在SERVER02上還原,在還原的時候注意使用NORECOVERY,使用鏡像數據處于還原狀態。在備份之前請將DBMirror數據庫的日志模式設置為完整。
完成了上面的準備之后就可以設置鏡像。
第一步:創建端點。
在SERVER01上運行下面的SQL:
CREATE ENDPOINT DbMirroring
STATE=STARTED
AS TCP(LISTENER_PORT=5011)
FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED)
go
![]()
在SERVER02上運行下面的SQL:
CREATE ENDPOINT DbMirroring
STATE=STARTED
AS TCP(LISTENER_PORT=5022)
FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED)
go
![]()
在SERVER03上執行下面的SQL,創建見證服務器。
CREATE ENDPOINT DbMirroring
STATE=STARTED
AS TCP(LISTENER_PORT=5033)
FOR DATABASE_MIRRORING(ROLE=WITNESS,ENCRYPTION=SUPPORTED)
go
![]()
第二步:啟動鏡像
在前面的規劃中SERVER01將作為主體服務器、SERVER02作為鏡像服務器,首先在主體服務器上執行下面的SQL:
ALTER DATABASE DBMirror
SET PARTNER='TCP://jeffery:5022' --(注:筆記的機器名稱是jeffery)
go
指定SERVER01的通訊伙伴是SERVER02(因為前面定義端點的時候SERVER02的端口號為5022)。
在SERVER02的上執行下面的SQL,指定通訊伙伴為SERVER01。
ALTER DATABASE DBMirror
SET PARTNER='TCP://jeffery:5011'
go
回到主體服務器,指定見證服務器。在SERVER01上執行下面的SQL:
ALTER DATABASE DBMirror
SET WITNESS='TCP://jeffery:5033'
go
完成以上步驟之后,鏡像配置完成。如圖3所示。
三、管理鏡像
1、 相關系統視圖
sys.database_mirroring:此視圖顯示服務器實例中每個鏡像數據庫的數據庫鏡像元數據。實例 SQL Server 中的每個數據庫在表中占一行。如果數據庫未聯機,或未啟用數據庫鏡像,則除 database_id 以外的所有列的值都將為 NULL。
sys.database_mirroring_endpoints:目錄視圖顯示有關服務器實例的數據庫鏡像端點的信息。
sys.dm_db_mirroring_connections:為每個數據庫鏡像網絡連接返回一行。
2、 手動主體、鏡像服務器之間的切換
在主體服務器中執行下面的代碼就可以將鏡像服務器設為主體服務器,主體服務器設置為鏡像服務器。
USE MASTER
Go
![]()
ALTER DATABASE DBMirror SET PARTNER FAILOVER
Go
數據庫鏡像是一個很好的高可用性解決方案,筆者參加微軟的技術論壇時曾看到過微軟的技術人員演示鏡像的故障轉移,如主體服務器出現故障,在10秒內客戶端就重新連到數據庫服務器。限于篇幅和筆者的水平,對數據庫鏡像作了簡單的介紹,還有很多東西沒有提及到比如說客戶端怎樣連到服務器等等,希望本文成為讀者學習鏡像功能的開端。
原文轉自:http://www.anti-gravitydesign.com