sql server 2008提供3種高可用性方案: 分發/訂閱方式;傳送事務日志方式;鏡像方式.
前者的主機(A服務器),和備機(B服務器)上的數據庫可同時訪問(當然B上的數據庫會有一部分數據延遲),后兩者的B服務器上數據庫處於“正在還原”狀態,不可讀寫(即不能分任務負載)。
分發/訂閱方式: 粒度為表/存儲過程/函數/視圖...的級別。異步將A服務器上的對象變化/或事務/或快照,傳到分發服務器,再傳到N個訂閱服務器。
事務傳送日志方式:粒度為數據庫級別。A服務器上備份數據庫,放到B上去還原,然后A再定期備份事務日志(放共享目錄下),B定期去(A服務器上的共享目錄)拷貝備份的事務日志,再定期還原上去。 (可以有多個備份服務器, B1,B2,B3....)。缺點:主/備需手動切換,且切換過一次之后,所有配置要重新配一次。
鏡像方式:粒度為數據庫級別。A服務器上備份數據庫和事務日志,放到B上去還原;然后A上每個事務,都同步/異步提交到B上去執行。(一個主機對應一個備機)。可自動切換或手動切換,配置一次即可。
一、本文檔主要說明在設置sql server的鏡像功能時,在主機,備機需要進行的操作步驟
二、需要環境:
1、 操作系統:window server 2008 r2
2、 數據庫:sql server2008 r2開發者版
三、安裝設置步驟:(假設數據庫名稱為Testbackup)
1、安裝windows2008 r2
2、主備機均修改計算機DNS后綴 (該步驟也可跳過了)
在”我的電腦”---“屬性”---“計算機名”tab---“更改”按鈕---“其他”按鈕---輸入后綴,例如tomisoft.net等等,需要注意2點:一是主備機的dns后綴完全一樣,二是不要和實際的域名無論外網或內網沖突;修改后重啟計算機;重啟后,注意修改windows\system32\drivers\etc\hosts文件,加入對方完全計算機名和IP對應關系。
3、 安裝sql server2008 r2,采用混合驗證模式
4、創建數據庫,配置主機
建立一個需要做數據庫鏡像的主數據庫
若要對此數據庫進行數據庫鏡像,必須將它更改為使用完整恢復模式
在主機數據庫執行腳本如下:
USE master;
ALTER DATABASE Testbackup
SET RECOVERY FULL;
5、 主機備份數據庫
將主機數據庫進行完全備份,可以通過圖形界面完成,
6、 備機還原數據庫:
首先在數據庫中建立與目標數據庫同名的空庫,然后將主機通過全庫備份完成的數據庫備份文件拷貝到本機,可以通過腳本或者圖形操作的方式進行還原,如果通過腳本,執行如下語句:
RESTORE DATABASE TestBackup FROM DISK='D:\TB.BAK' WITH NORECOVERY
如果通過圖形界面進行,注意還原數據的時候需要使用選上“with non recover”。
如果執行成功數據庫將會變成這個樣子:
7、 主機進行事務日志備份
通過圖形界面在主機對數據庫進行事務日志備份
8、 備機還原事務日志備份:
將主機備份的事務日志文件拷貝到本機,然后在鏡像服務器上通過圖形界面還原數據庫日志,還原事務日志時需在選項中選擇“restore with norecovery
9 - 12步驟也可跳過了, 在SQL Server management studio里配置的時候,可以使用sql server賬號密碼做為驗證方式。(圖形界面配置方法:右鍵單擊“主機上需鏡像的數據庫”,選擇“屬性”菜單,再選擇“鏡像”頁簽)
9、創建證書:(主備份別執行)
實現互通可以使用域或證書來實現,考慮實現的簡單,以下選取證書的方式實現。注意:實現“主備數據庫實例互通”的操作只需要做一次,例如為了將兩個SQL Server 2008的實例中的個數據庫建成鏡像關系,則只需要做一次以下操作就可以了;或者這樣理解:每一對主備實例(不是數據庫)做一次互通。
打開”SQL Server management studio”, 新建查詢,執行腳本:
主機:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'tomisoft';
CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' ,
START_DATE = '01/01/2009';
備機:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'tomisoft';
CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate',
START_DATE = '01/01/2009';
10、創建連接的端點:(主備機分別執行)
主機:
CREATE ENDPOINT dbmirrep
STATE = STARTED
AS
TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )
FOR
DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_A_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
備機:
CREATE ENDPOINT dbmirrep
STATE = STARTED
AS
TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )
FOR
DATABASE_MIRRORING
( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
11、備份證書以備建立互聯:(主備機分別執行)
主機:
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:\database \HOST_A_cert.cer'
備機:
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\database\HOST_B_cert.cer';
此處注意相關目錄要存在
12、互換證書,將對方證書拷貝到本地,即主機的拷貝到備機,備機的拷貝到主機
主機執行:
CREATE LOGIN HOST_B_login WITH PASSWORD = 'tomisoft';
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:\SQLBackup\HOST_B_cert.cer';
GRANT CONNECT ON ENDPOINT:: dbmirrep TO [HOST_B_login];
備機執行:
CREATE LOGIN HOST_A_login WITH PASSWORD = 'tomisoft';
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\database\HOST_A_cert.cer';
GRANT CONNECT ON ENDPOINT::dbmirrep TO [HOST_A_login];
13、 主機建立鏡像:
在A主機的目標數據庫屬性中,選擇鏡像,單擊‘配置安全性…’進行配置的時候,主機和鏡像機機器名需要設置為,形如:tomisoft201.tomisoft.tomi 否則鏡像關系將執行不成功 (不一定非要這種方式,也可以直接用: ip地址+端口, 或者 主機名+端口, 后者需要配hosts文件。 這樣的話,設置服務賬戶的時候,會報錯,但不影響.)
備機等待主機執行數據庫鏡像完成后,鏡像數據庫會變成如下模式,如果沒有,可以通過刷新即可:
(四)鏡像故障的切換
1、 主機當機后的處理:
如果主機當機后(數據庫顯示:【主體,已斷開】,備機數據庫會變成如下模式:
,此時在備機執行如下腳本,將鏡像庫變為主體可用庫,即可進行讀寫:
alter database Testbackup set partner force_service_allow_data_loss
注:測試中發現主體數據庫的sql服務必須啟動,否則備份數據庫執行完上述語句后仍然處於‘正在恢復‘狀態,依然不可用。切換后的正確狀態如圖,表示備機已經成為當前的主體,而之前的主體已經掛起。
2、 主機恢復后的處理:
如果主機恢復,執行如下腳本即可將主機重新設置為主機,當前鏡像仍然恢復鏡像模式:
首先主機要執行腳本:
USE master;
ALTER DATABASE TestBackup SET PARTNER SAFETY FULL; --事務安全,同步模式
備機執行腳本:
USE master;
ALTER DATABASE Testbackup SET PARTNER RESUME
注:成功執行后結果如圖
成功后再執行:
ALTER DATABASE Testbackup SET PARTNER FAILOVER
注:執行后備機數據庫如圖,至此原來的主體數據庫徹底恢復主體角色。
3、 其他說明:
如果主機無法恢復,希望以當前鏡像機為主機,需要重新建立鏡像
正常情況下,如果希望進行主備切換,即將主機人為停掉,將鏡像作為主機,則可以在主機執行腳本進行主備互換:
USE master;
ALTER DATABASE <DatabaseName> SET PARTNER FAILOVER
主機當機后恢復的情況,默認情況下,事務安全級別的設置為 FULL,即同步運行模式,而且SQL Server 2005 標准版只支持同步模式。
在主機中執行:
USE master;
ALTER DATABASE <DatabaseName> SET PARTNER SAFETY FULL --事務安全,同步模式, (測試過程中發現,備份機執行切換主備腳本的時候,如果主機不先執行此腳本,備機會執行失敗)
下面的異步模式一般不推薦使用:
ALTER DATABASE <DatabaseName> SET PARTNER SAFETY OFF; --事務不安全,異步模式