sql server 2005相對于sql server 2000來說,無論是性能還是功能都有一個相當大的提高,甚至可以用“革命”來形容這一次升級。sql server 2005使 sql server 躋身于企業(yè)級數(shù)據(jù)庫行列。在數(shù)據(jù)高可用性方面,sql server 2005為用戶提供了數(shù)據(jù)鏡像、復制、故障轉移群集、日志傳送功能。本文向讀者簡單介結sql server 2005鏡像功能。
一、鏡像簡介
數(shù)據(jù)庫鏡像是一個高可用性軟件解決方案,為客戶端提供小于10秒故障轉移。每個數(shù)據(jù)庫鏡像配置均包含一個主體服務器(包含主體數(shù)據(jù)庫)、一個鏡像服務器(包含鏡像數(shù)據(jù)庫)和一個見證服務器,其中見證服務器是可選的。主體服務器和鏡像服務器要求是獨立的服務器實例。主體服務器和鏡像服務器的角色是相對的,可以自動或者手動地將主體服務器設置為鏡像服務器,鏡像服務器設置為主體服務器。與主體服務器和鏡像服務器不同的是,見證服務器并不能用于數(shù)據(jù)庫。見證服務器監(jiān)視主體服務器和鏡像服務器,確保在給定的時間內這兩個故障轉移服務器中有且只有一個作為主體服務器,從而支持自動故障轉移。如果存在見證服務器,同步會話將以“高可用性模式”運行,如果主體服務器出現(xiàn)故障,可以實現(xiàn)故障自動轉移。如果見證服務器不存在,同步會話將以“高級別保護模式”運行,出現(xiàn)故障需要手動故障轉移,并且有可能丟失數(shù)據(jù)。

圖1:兩臺服務器鏡像

圖2:兩臺服務器鏡像,一臺見證服務器
數(shù)據(jù)庫準備結束,端點創(chuàng)建完成,用戶便可以啟用數(shù)據(jù)庫鏡像。鏡像啟動后,每個伙伴都將開始維護所在數(shù)據(jù)庫中有關其數(shù)據(jù)庫,以及另一個伙伴和見證服務器的狀態(tài)信息。這些狀態(tài)信息允許服務器實例維護稱為“數(shù)據(jù)庫鏡像會話”的當前關系。在數(shù)據(jù)庫鏡像會話過程中,服務器實例將通過彼此定期交換 ping 消息來互相監(jiān)視。
|||鏡像會話啟動后,鏡像服務器將識別鏡像數(shù)據(jù)庫上最新完成的事務的日志序列號 (lsn),并要求主體服務器提供所有后續(xù)事務的事務日志,主體服務器向像鏡像服務器發(fā)生一份當前活動的事務日志,鏡像服務器會立即將傳入日志鏡像到磁盤。主體服務器繼續(xù)讓客戶端連接使用主體數(shù)據(jù)庫,每次客戶端更新主體數(shù)據(jù)庫時,主體服務器都會在寫入到日志時,并將得到的事務日志發(fā)送給鏡像服務器,鏡像服務器會將其鏡像到磁盤。同時,鏡像服務器將從最早的事務日志開始,將事務應用到鏡像數(shù)據(jù)庫中,從而實現(xiàn)主體數(shù)據(jù)庫和鏡像數(shù)據(jù)庫同步。
二、配置實例
了解數(shù)據(jù)庫鏡像的基本知識之后,看一看怎樣去配置鏡像。(使用鏡像功能請確保安裝了sql server 2005 sp1)。
筆者為做鏡像實驗,在同一個服務器上同時裝三個實例: server01、server02、server03。其中,server01將作為主體服務器、server02作為鏡像服務器、 server03作為見證服務器。
在完成本實驗的第一步需要將主體服務器的dbmirror數(shù)據(jù)庫,完全備份出來,然后在server02上還原,在還原的時候注意使用norecovery,使用鏡像數(shù)據(jù)處于還原狀態(tài)。在備份之前請將dbmirror數(shù)據(jù)庫的日志模式設置為完整。
完成了上面的準備之后就可以設置鏡像。
第一步:創(chuàng)建端點。
在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上執(zhí)行下面的sql,創(chuàng)建見證服務器。
create endpoint dbmirroring
state=started
as tcp(listener_port=5033)
for database_mirroring(role=witness,encryption=supported)
go第二步:啟動鏡像
|||最大的網(wǎng)站源碼資源下載站,
在前面的規(guī)劃中server01將作為主體服務器、server02作為鏡像服務器,首先在主體服務器上執(zhí)行下面的sql:
alter database dbmirror
set partner='tcp://jeffery:5022'  --(注:筆記的機器名稱是jeffery)
go指定server01的通訊伙伴是server02(因為前面定義端點的時候server02的端口號為5022)。
在server02的上執(zhí)行下面的sql,指定通訊伙伴為server01。
alter database dbmirror
set partner='tcp://jeffery:5011'
go回到主體服務器,指定見證服務器。在server01上執(zhí)行下面的sql:
alter database dbmirror
set witness='tcp://jeffery:5033'
go完成以上步驟之后,鏡像配置完成。如圖3所示。

圖3
1
三、管理鏡像
1、 相關系統(tǒng)視圖
sys.database_mirroring:此視圖顯示服務器實例中每個鏡像數(shù)據(jù)庫的數(shù)據(jù)庫鏡像元數(shù)據(jù)。實例 sql server 中的每個數(shù)據(jù)庫在表中占一行。如果數(shù)據(jù)庫未聯(lián)機,或未啟用數(shù)據(jù)庫鏡像,則除 database_id 以外的所有列的值都將為 null。
sys.database_mirroring_endpoints:目錄視圖顯示有關服務器實例的數(shù)據(jù)庫鏡像端點的信息。
sys.dm_db_mirroring_connections:為每個數(shù)據(jù)庫鏡像網(wǎng)絡連接返回一行。
2、 手動主體、鏡像服務器之間的切換
在主體服務器中執(zhí)行下面的代碼就可以將鏡像服務器設為主體服務器,主體服務器設置為鏡像服務器。
use master
go
alter database dbmirror set partner failover
go  數(shù)據(jù)庫鏡像是一個很好的高可用性解決方案,筆者參加微軟的技術論壇時曾看到過微軟的技術人員演示鏡像的故障轉移,如主體服務器出現(xiàn)故障,在10秒內客戶端就重新連到數(shù)據(jù)庫服務器。限于篇幅和筆者的水平,對數(shù)據(jù)庫鏡像作了簡單的介紹,還有很多東西沒有提及到比如說客戶端怎樣連到服務器等等,希望本文成為讀者學習鏡像功能的開端。 
新聞熱點
疑難解答
圖片精選