淺談AlwaysOn備份

  • 4192
  • 0
  • 2015-03-12

淺談AlwaysOn備份

 

 

日前聽到一位朋友說他在AlwaysOn的次要副本做備份時會發生錯誤,但在主要副本卻不會。

由於我之前做AlwaysOnLab時也沒針對備份做研究,所以趁機研究一下AlwaysOn的備份,

粗略的分享給大家。

 

 

Step1.也趁這個機會複習一下AG的建立步驟。首先開啟精靈,針對AG來做個命名。本Lab命名為MyAg

clip_image002

 

Step2.如下圖SQL會列出符合必要條件的Database,本Lab中勾選dbAdmin這一個Database

clip_image004

 

 

  

Step3.如下圖所示SQL1是主要複本,SQL3是次要複本。

clip_image006

 

 

Step4.本次Lab的重點就是下面這一張圖,備份喜好設定,由於UI都有說明,在此就不贅訴。

我們先選預設值 慣用次要

clip_image008

 

 

Step5.下圖是設定AlwaysOnListenerDNS命名為MyAgIP192.168.1.111

clip_image010

 

 

 

Step6.我們先在主要副本SQL1上執行如下圖中的QUERY,該Function可以用來判斷這一個Database

的複本是否為慣用的備份複本。如果是則回傳1,反之就回傳0。由於我們剛剛是選擇『慣用次要』

,因此在主要複本執行QUERY會得到0

clip_image012

 

 

 

Step7.相同的語法在次要複本執行就可以看見是回傳1,表示它是慣用的備份複本。

clip_image014

 

 

 

Step8.我們先手寫一個備份的TSQL並在主要複本上執行。可以在下圖中看見備份成功。

clip_image016

 

 

 

Step9.相同的語法在次要複本上執行時,完整備份卻發生錯誤,但是交易紀錄備份卻是成功。

可以在錯誤訊息中看見提示,表示次要複本不支援完整備份。

clip_image018

 

 

 

小結 : 我們在AG的備份喜好設定選擇『慣用次要』,自然而然會認為應該是次要複本要成功,

主要複本不能備份啊。怎麼反而次要複本備份失敗了呢? 這時就該查看一下文件。

次要複本支援的備份如下 :

1.      Backup Database只支援Copy Only

2.      不支援差異備份。

3.      不支援備份Log時使用Copy Only參數。

4.      若要備份次要資料庫,次要複本必須能夠與主要複本通訊,而且必須處於 SYNCHRONIZED SYNCHRONIZING 狀態。

參考資料來源http://msdn.microsoft.com/zh-tw/library/hh245119.aspx

 

 

 

 

Step10.既然文件說明次要複本在Backup Database時只能用Copy Only來備份。我們就來試試看,

如下圖所示果然成功在次要複本完成備份動作。

clip_image020

 

 

 

 

Step11.為什麼主要複本跟次要複本都能讓我們完成備份呢?那我們剛剛設定的『慣用次要』這一

個選項到底是用在哪裡呢?我們回頭看一下剛剛UI上的解說(如下圖)。仔細一看會發現說明中指的都

自動備份,而我們剛剛都是用TSQL手動備份,會是這一個原因嗎?

clip_image022

 

 

 

 

Step12.為了證明是不是剛剛我們研判的問題,因次我們來建立一個維護計畫讓SQL自動備份,

看看『慣用次要』的功能是否能運作呢?

clip_image024

 

 

 

Step13.當我們在次要複本要設定完整備份的備份計畫時,會看見UI會提示這樣的設定會讓作業

執行失敗,但如果我們將只複製備份(Copy Only)的功能勾選後。該警告訊息就會消失。

clip_image026

 

 

 

Step14.當我們在次要複本要設定交易紀錄備份的備份計畫時,UI並不會出現警告訊息(如下圖)

clip_image028

 

 

 

 

Step15.我們同時在主要跟次要複本部署如下圖的自動備份交易紀錄維護計畫,每分鐘執行一次。

clip_image030

 

 

 

 

Step16.接下來我們檢視一下兩台SQL的作業紀錄,可以發現每分鐘的交易紀錄都正常執行,且顯示執行成功。

clip_image032

 

 

 

 

Step17.接下來我們到主要複本的備份目的資料夾看一下是否有備份檔案產出。

如下圖所示SQL1的資料夾中並無備份檔,即使它的作業成功。

clip_image034

 

 

 

 

Step18.接下來我們到次要複本的備份目的資料夾看一下是否有備份檔案產出。如下圖所

SQL3的資料夾中有交易紀錄的備份檔案產出。

clip_image036

 

 

 

Step19.此時我們再到AG的屬性中將備份由慣用次要改為主要』,看看會有甚麼變化

clip_image038

 

 

 

 

Step20.下圖的語法動作就是Step19的步驟,將備份由慣用次要改為主要』。

我們可以在下圖中看見異動選項的時間是在晚上1044

clip_image040

 

 

 

Step21.異動完設定後,我們再回到主要複本的備份資料夾中看看。如下圖所示,

晚上1045時,主要複本產出了交易紀錄的備份檔了。

clip_image042

 

 

總結 :

                完整備份跟差異備份只能在主要複本上運行,次要複本如要完整備份則需要加Copy Only參數,

但不支援差異備份。主要複本跟次要複本都可以執行交易紀錄備份。而我們在AG備份喜好設定

就是針對交易紀錄自動備份的設定。

 

                在交易紀錄備份作業時,SQL會判斷目前的Database是否為慣用的備份複本。如果是就執行備份,

        不是就會略過。至於完整備份及差異備份則我們可以用TSQLJOB來做,先判斷目前是否為主要複本,

        如果是的話再執行備份即可,下圖的語法可提供我們足夠的訊息來判斷目前Database是否為AG的主要複本。

clip_image044 

我是ROCK

rockchang@mails.fju.edu.tw