SQL Server Alwayson建立代理作業注意事項

pursuer.chen發表於2017-08-02

介紹

Always On 可用性組活動輔助功能包括支援在輔助副本上執行備份操作。 備份操作可能會給 I/O 和 CPU 帶來很大的壓力(使用備份壓縮)。 將備份負荷轉移到已同步或正在同步的輔助副本後,您可以使用承載第一層工作負荷的主副本的伺服器例項上的資源,您可以建立主資料庫的任何型別的備份。 也可以建立輔助資料庫的日誌備份和僅複製完整備份。

 

一、概念

1.輔助副本上支援的備份型別

  • BACKUP DATABASE :在輔助副僅支援資料庫、檔案或檔案組的僅複製完整備份。 請注意,僅複製備份不影響日誌鏈,也不清除差異點陣圖。
  • 輔助副本不支援差異備份。
  • BACKUP LOG 僅支援常規日誌備份(輔助副本上的日誌備份不支援 COPY_ONLY 選項)。
  • 若要備份輔助資料庫,輔助副本必須能夠與主副本進行通訊,並且狀態必須為 SYNCHRONIZED 或 SYNCHRONIZING。

2.配置執行備份作業的位置

在輔助副本上執行備份以減輕主生產伺服器的備份工作負荷非常有好處。 但是,對輔助副本執行備份會顯著增加用於確定應在何處執行備份作業的過程的複雜性。 要解決這個問題,請按如下所示配置備份作業執行的位置:

  • 配置可用性組以便指定要對其執行備份的可用性副本。
  • 為承載作為執行備份候選的可用性副本的每個伺服器例項上的每個可用性資料庫都建立編寫了指令碼的備份作業。

3.備份首選項

優先輔助副本
指定備份應在輔助副本上發生,但在主副本是唯一聯機的副本時除外。 在該情況下,備份應在主副本上發生。 這是預設選項。

僅輔助副本
指定備份應該永遠不會在主副本上執行。 如果主副本是唯一的聯機副本,則備份應不會發生。

主副本
指定備份應該始終在主副本上發生。 如果您需要在對輔助副本執行備份時存在不支援的備份功能,例如建立差異備份,此選項將很有用。

任意副本
指定您希望在選擇要執行備份的副本時備份作業將忽略可用性副本的角色。請注意,備份作業可能評估其他因素,例如每個可用性副本的備份優先順序及其操作狀態和已連線狀態。

注意:如果您計劃使用日誌傳送為可用性組準備任何輔助資料庫,請將自動備份首選項設定為Primary,直到準備好所有輔助資料庫並將其加入可用性組。沒有強制的自動備份首選項設定。 對此首選項的解釋取決於您為給定可用性組中的資料庫撰寫備份作業指令碼的邏輯(如果有)。 自動備份首選項設定對即席備份沒有影響。 

二、判斷語句

若要為某一給定可用性組考慮使用自動備份首選項,則對於承載備份優先順序大於零 (>0) 的可用性副本的每個伺服器例項,您需要為該可用性組中的資料庫的備份作業編寫指令碼。若要確定當前副本是否為首選備份副本,請在備份指令碼中使用 sys.fn_hadr_backup_is_preferred_replica 函式。如果當前例項上的資料庫位於首選副本上,則返回 1否則返回 0。 通過對查詢此函式的每個可用性副本執行判斷指令碼,可以確定哪個副本應執行給定的備份作業。

If sys.fn_hadr_backup_is_preferred_replica(@dbname)=1
BEGIN
BACKUP DATABASE @DBNAME TO DISK=<disk> 
END 
ELSE 
PRINT('當前副本不是備份首選副本')

在所有可能執行的備份的副本上面建立相同的備份語句,在發生故障轉移時,無需修改任何指令碼或作業

三、建立代理作業 

 

注意:

1.這裡的資料庫要選擇“master”,如果當前的alwayson配置了只讀路由而你這裡選擇的是可用性資料庫的話那麼在輔助副本上面建立的作業會執行失敗,因為只讀路由連線輔助副本可用性資料庫需要readonly連線屬性。建立非備份的其它作業也是一樣。

2.當前我的備份指令碼放在master資料庫中,如果是執行其它資料庫下的指令碼也是一樣,這裡需要將資料庫名帶上。

3. 如果if判斷這裡指定的是一個非可用性組的資料庫返回的結果同樣是1,因為對於例項來說非可用性的資料庫也是備份的首先副本。

4.如果begin end中執行的是儲存過程,不能在執行儲存過程語句之前做可能涉及修改的其它相關操作比如:

       1.選擇資料庫(use database);

       2.定義變數(declare @id);

       3.set賦值

       4.其它的相關操作。

判斷是否是主副本命令

If sys.fn_hadr_is_primary_replica (@dbname) =1  
BEGIN  
    PRINT('1')
END 
ELSE
    PRINT('當前副本不是主副本')

備註:判斷是否是主副本命令和判斷是否是備份主副本命令不一樣,如果指定的資料庫是非可用性組資料庫判斷是否是主副本返回的結果是NULL,而判斷是否是備份主副本返回的是1。

總結

1.在可用性組的主資料庫或輔助資料庫上不允許 RESTORE 語句。

2.備份首選項只是給出一個備份的判斷選項,無論你手動在哪個副本上備份都可以,唯一的限制就是輔助副本的完整備份只支援“複製”備份。由於輔助副本只支援僅複製備份,所以輔助副本無法進行差異備份。要進行差異備份那麼首先備份副本應該選擇主副本。

3.無論是在主副本上備份日誌還是在輔助副本上備份日誌最終都會截斷所有副本上的日誌鏈。

 

 

 

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。

《歡迎交流討論》

 

相關文章