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

sql server 2008提供3種高可用性方案: 分發/訂閱方式;傳送事務日誌方式;鏡像方式.sql

前者的主機(A服務器),和備機(B服務器)上的數據庫可同時訪問(固然B上的數據庫會有一部分數據延遲),後二者的B服務器上數據庫處於「正在還原」狀態,不可讀寫(即不能分任務負載)。數據庫

       分發/訂閱方式: 粒度爲表/存儲過程/函數/視圖...的級別。異步將A服務器上的對象變化/或事務/或快照,傳到分發服務器,再傳到N個訂閱服務器。windows

       事務傳送日誌方式:粒度爲數據庫級別。A服務器上備份數據庫,放到B上去還原,而後A再按期備份事務日誌(放共享目錄下),B按期去(A服務器上的共享目錄)拷貝備份的事務日誌,再按期還原上去。 (能夠有多個備份服務器, B1,B2,B3....)。缺點:主/備需手動切換,且切換過一次以後,全部配置要從新配一次。安全

       鏡像方式:粒度爲數據庫級別。A服務器上備份數據庫和事務日誌,放到B上去還原;而後A上每一個事務,都同步/異步提交到B上去執行。(一個主機對應一個備機)。可自動切換或手動切換,配置一次便可。 服務器

1、本文檔主要說明在設置sql server的鏡像功能時,在主機,備機須要進行的操做步驟異步

2、須要環境:函數

一、 操做系統:window server 2008 r2測試

二、 數據庫:sql server2008 r2開發者版操作系統

3、安裝設置步驟:(假設數據庫名稱爲Testbackup).net

一、安裝windows2008 r2

二、主備機均修改計算機DNS後綴 (該步驟也可跳過了)

在」個人電腦」---「屬性」---「計算機名」tab---「更改」按鈕---「其餘」按鈕---輸入後綴,例如tomisoft.net等等,須要注意2點:一是主備機的dns後綴徹底同樣,二是不要和實際的域名不管外網或內網衝突;修改後重啓計算機;重啓後,注意修改windows\system32\drivers\etc\hosts文件,加入對方徹底計算機名和IP對應關係。

三、   安裝sql server2008 r2,採用混合驗證模式

四、建立數據庫,配置主機

 創建一個須要作數據庫鏡像的主數據庫

若要對此數據庫進行數據庫鏡像,必須將它更改成使用完整恢復模式

在主機數據庫執行腳本以下:

    USE master;

    ALTER DATABASE  Testbackup

    SET RECOVERY FULL;

五、 主機備份數據庫

將主機數據庫進行徹底備份,能夠經過圖形界面完成,

六、 備機還原數據庫:

首先在數據庫中創建與目標數據庫同名的空庫,而後將主機經過全庫備份完成的數據庫備份文件拷貝到本機,能夠經過腳本或者圖形操做的方式進行還原,若是經過腳本,執行以下語句:

RESTORE DATABASE TestBackup FROM DISK='D:\TB.BAK' WITH NORECOVERY

若是經過圖形界面進行,注意還原數據的時候須要使用選上「with non recover」。

若是執行成功數據庫將會變成這個樣子:

七、 主機進行事務日誌備份

經過圖形界面在主機對數據庫進行事務日誌備份

八、 備機還原事務日誌備份:

將主機備份的事務日誌文件拷貝到本機,而後在鏡像服務器上經過圖形界面還原數據庫日誌,還原事務日誌時需在選項中選擇「restore with norecovery

9 - 12步驟也可跳過了, 在SQL Server management studio裏配置的時候,可使用sql server帳號密碼作爲驗證方式。(圖形界面配置方法:右鍵單擊「主機上需鏡像的數據庫」,選擇「屬性」菜單,再選擇「鏡像」頁籤)

九、建立證書:(主備份別執行)

 實現互通可使用域或證書來實現,考慮實現的簡單,如下選取證書的方式實現。注意:實現「主備數據庫實例互通」的操做只須要作一次,例如爲了將兩個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';

 

十、建立鏈接的端點:(主備機分別執行) 

主機: 

    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 );

 

十一、備份證書以備創建互聯:(主備機分別執行) 

主機:

    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';

此處注意相關目錄要存在

 

十二、互換證書,將對方證書拷貝到本地,即主機的拷貝到備機,備機的拷貝到主機 

主機執行:

    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];

 

1三、 主機創建鏡像:

在A主機的目標數據庫屬性中,選擇鏡像,單擊‘配置安全性…’進行配置的時候,主機和鏡像機機器名須要設置爲,形如:tomisoft201.tomisoft.tomi 不然鏡像關係將執行不成功 (不必定非要這種方式,也能夠直接用: ip地址+端口, 或者 主機名+端口, 後者須要配hosts文件。 這樣的話,設置服務帳戶的時候,會報錯,但不影響.)

備機等待主機執行數據庫鏡像完成後,鏡像數據庫會變成以下模式,若是沒有,能夠經過刷新便可:

 

(四)鏡像故障的切換

一、 主機當機後的處理:

若是主機當機後(數據庫顯示:【主體,已斷開】,備機數據庫會變成以下模式:

,此時在備機執行以下腳本,將鏡像庫變爲主體可用庫,便可進行讀寫:

alter database Testbackup set partner force_service_allow_data_loss

注:測試中發現主體數據庫的sql服務必須啓動,不然備份數據庫執行完上述語句後仍然處於‘正在恢復‘狀態,依然不可用。切換後的正確狀態如圖,表示備機已經成爲當前的主體,而以前的主體已經掛起。

二、 主機恢復後的處理:

若是主機恢復,執行以下腳本便可將主機從新設置爲主機,當前鏡像仍然恢復鏡像模式:

首先主機要執行腳本:

USE master;

ALTER DATABASE TestBackup SET PARTNER SAFETY FULL; --事務安全,同步模式

備機執行腳本:

USE master;

ALTER DATABASE Testbackup SET PARTNER RESUME

注:成功執行後結果如圖

成功後再執行:

ALTER DATABASE Testbackup SET PARTNER FAILOVER

注:執行後備機數據庫如圖,至此原來的主體數據庫完全恢復主體角色。

三、 其餘說明:

若是主機沒法恢復,但願以當前鏡像機爲主機,須要從新創建鏡像

正常狀況下,若是但願進行主備切換,即將主機人爲停掉,將鏡像做爲主機,則能夠在主機執行腳本進行主備互換:

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

相關文章
相關標籤/搜索