數據庫雙機熱備(代碼實現)


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; --事務不安全,異步模式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM