引言:在SQL Server早期版本中,便出現了日志傳送(即Log Shipping)技術。日志傳送擁有獨特的功能,在SQL Server災難恢復技術中扮演著重要的角色。其工作機制主要是通過事務日志備份和還原任務,來保持多臺SQL Server主機之間的數據同步。
在日志傳送機制中,主服務器可以同時對應多臺輔助服務器,即可以存在多個主數據庫的副本。
例如,當存在三臺輔助服務器的情況下,前兩臺服務器上的輔助數據庫設置為無恢復模式,提供冗余的災備功能,即使其中一臺服務器出現故障,另外一臺也可以提供災難恢復功能。第三臺服務器上的輔助數據庫可以設置為備用模式,將諸如報表讀查詢請求之類的操作交由其處理。
此外,還可以為日志傳送機制配置監視服務器,主要用來記錄備份/還原作業的歷史和狀態信息,可以在作業失敗時生成警報。
日志傳送機制的運作并不復雜,首先日志傳送組件在主服務器上對主數據庫進行日志備份.
然后將日志備份文件復制到所有的輔助服務器上,輔助服務器對備份日志進行還原,這樣的一系列過程不斷進行重復,實現主服務器和輔助服務器上數據的同步。
當然,需要在主服務器,輔助服務器和監視服務器上創建相應的Job作業(例如備份作業,復制作業,還原作業,監視作業等),并通過每臺服務器上的SQL Server代理服務來觸發這些作業,實現上述備份,復制和還原動作。
在主服務器上存在一個共享目錄,日志備份作業將備份日志存放到該目錄中。通過復制作業,將備份日志文件復制到輔助服務器上的本地目錄中,同時創建相應的記錄信息,利用還原作業,將日志備份文件還原到輔助數據庫中。
如果在預設的時間內,無法完成以上備份,復制和還原作業,就會在監視服務器上觸發監視作業,創建狀態和歷史記錄以及警報信息。
當主數據出現異常,可以將應用切換到輔助服務器上。在一般情況下,當發生故障時,主數據庫和輔助數據庫是不同步的,如果主數據庫還可以訪問,就需要手工對其進行日志備份(即備份主數據庫的尾日志),這樣就獲得了最后一次備份作業觸發后所有的數據更新。
然后將主服務器上的共享目錄中的所有未被復制的備份文件,連同尾日志備份,全部復制到所有的輔助服務器上。
在輔助服務器上,將所有未還原的事物日志備份按照順序還原到輔助數據庫中,完成數據同步工作。可以通過查看還原作業的歷史信息,來清晰的了解究竟需要還原哪些日志備份。
接下來對輔助數據庫執行恢復操作,使數據庫處于一致的狀態。執行“Restore Database”等T-SQL語句,使其上線并處于聯機狀態。這樣,就完成了故障轉移操作。
日志傳送其實只是同步數據庫的內容,并不會同步Logging登錄信息,這些信息保存在Master數據庫中,之后必須通過手動操作,將登錄賬號從原始的服務器實例遷移到輔助服務器上,使其變成新的主服務器實例。
在該主服務器實例上要保證登錄名和密碼以及登錄名對應的SID與和原始數據庫一致,修改應用程序的連接字符串,使之重定向到新的主服務器上。
日志傳送是利用SQL Server Agent來執行備份還原作業,從而達到主副數據庫同步的目的。
因為作業是每隔一段時間才被SQL Server Agent觸發,所以主副數據庫的同步并非實時進行,其最大數據損失量僅僅是由備份作業運行的時間間隔決定的。
因此,盡可能的減小備份作業的間隔時間,可以將數據損失盡可能的減低。注意,SQL Server允許的最小間隔時間為10秒。當然,過小的備份間隔也會給主服務器造成額外的負擔。
當然,日志傳送操作起來有些繁瑣,并不適用于高可用環境,只能作為廉價的災備方案使用。為主數據庫提供一個或者多個副本作為保證。例如,可以在群集環境中使用日志傳送功能,來提高其應對故障的能力。
注意,對于啟用了日志傳送任務的數據庫來說,不能在維護計劃中創建事務日志備份,但是可以創建完整的數據庫備份和差異備份,而無需擔心和日志傳送產生沖突。因為任何的手動的日志備份,都會破壞日志傳送的工作。如果找不到手工備份的日志文件,就會導致日志傳送鏈條的中斷,只能重建整個日志傳送鏈條。
這里舉例來說明日志傳送功能的實現方法。例如,SQLnode1為 主 服 務器,SQLnode2為輔助服務器。在SQLnode1中針對名為“chanpin”的數據庫進行日志傳送配置操作,將該數據庫設置為完全恢復模式,方法是在Microsoft SQL Server Management Studio窗口中打開該數據庫屬性窗口,在左側點擊“選項”項,在右側的“恢復模式”列表中選擇“完整”項。
并 執 行“BACKUP DATABASE [chanpin]TO DISK = N′D:akchanpin.bak′ WITH NOFORMAT,NOINIT,NAME = N′CHANPIN-完 整 數 據 庫 備 份′,SKIP, NOREWIND,NOUNLOAD, STATS= 10′”,“Go”之類的語句,對其執行一次全備份。事先需要在SQLnode1服務器上建議一個共享文件夾,路徑為“D:ak”,用來存儲日志備份文件。必須讓SQL Server Service賬戶擁有對該目錄的完全控制權限,讓輔助服務器上的SQL Server Agent代理賬戶有權讀取該文件夾內容。
在“CHANPIN”數 據庫的右鍵菜單上點擊“任務”-“傳送事物日志”項,在彈出窗口(如圖1)中選擇“將此數據庫啟用為日志傳送配置中的主數據庫”項,點擊“備份設置”按鈕,在事務日志備份設置窗口中的“備份文件夾的網絡路徑”欄中輸入共享路徑。
例 如“\sqlnode1ak”。也可以在其下編輯欄中輸入其本地路徑。又例如“D:ak”,這要求備份文件夾存儲在主服務器上。可以根據需要,調整備份文件保留時間和報警時間。
在默認情況下,備份文件經過72小時會被自動刪除,如果在一個小時的間隔內沒有觸發備份作業,將會觸發報警動作。為了控制備份文件的體積,可以在“設置備份壓縮”列表中選擇“壓縮備份”項,在“作業名稱”欄中可以更改其名稱,點擊“計劃”按鈕,在計劃屬性窗口(如圖2)中的“執行間隔”欄中可以設置備份的頻率。默認為每隔15分鐘執行一次備份。

圖1 傳輸日志配置界面

圖2 設置計劃屬性參數
點擊確定按鈕保存配置,在上級窗口中的“輔助數據庫”欄中點擊“添加”按鈕,在輔助數據庫設置窗口中點擊“連接”按鈕,在連接到服務器窗口中的“服務器名稱”列表中選擇“SQLnode2”。
選擇合適的身份驗證方式,點擊“連接”按鈕,來添加輔助服務器實例,日志傳送機制可以不依賴于AD域環境,只要服務器之間可以正常通訊即可。
在“輔助數據庫”欄中輸入“CHANPIN”。因為事先已經執行了主數據庫的完整備份操作,所以在“初始化輔助數據庫”面板中選擇“是,將主數據庫的現有備份還原到輔助數據庫中”項,在“備份文件”欄中輸入備份文件路徑,例如“\sqlnode1akchanpin.bak”。在“復制文件”面板中的“復制文件的目標文件夾”欄中輸入合適的網絡路徑。
例如“d:ak”,注意該文件夾位于SQLnode2服務器上。您可以根據需要,設置復制作業的名稱以及刪除復制文件的周期(默認為72小時)。這樣,當觸發復制作業后,就可以將SQLnode1上的共享目錄中的備份文件復制到該文件夾中。
點擊“計劃”按鈕,在彈出窗口中的“執行間隔”欄中可以更改復制作業的時間間隔,默認為15分鐘。在“還原事物日志”面板中選擇“備份模式”和“在還原備份時斷開數據庫中的用戶連接”項,可以保證還原動作順利進行。
點擊“計劃”按鈕,可以修改還原作業的執行間隔。其余設置保持默認,點擊確定按鈕,保存配置信息,這樣,就創建了備份,復制和還原作業。在數據庫屬性窗口中選擇“使用監視服務器實例”項,可以配置監視服務器。在保存日志傳送設置窗口中點擊按鈕“報告”→“查看報告”項,顯示配置成功的信息。在SQLnode2上打開Microsoft SQL Server Management Studio窗口,在數據庫節點上執行刷新操作,可以看到“chanpin(備用/只讀)”的數據庫名稱,說明日志傳送已經配置完畢。
在SQLnode1和SQLnode2上 選 擇“SQL Server代理”項,在其右鍵菜單上點擊“啟動”項,啟動SQLServer代理服務。在 SQLnode1上 點 擊“SQl Server代理”→“作業”項,可以看到創建的備份作業項目。在SQLnode2上點擊“SQl Server代 理”→“作業”項,可以看到創建的復制和還原作業項目。這樣,當達到預設的時間間隔后,SQLnode1上的代理服務就會觸發備份作業,在上述共享目錄中可以看到生成的日志備份文件。
在SQLnode2上同樣可以在預設的時間內執行復制和還原作業,在對應的目錄中可以看到復制過來的日志備份文件。在SQLnode2上的“數據庫實例名稱”節點的右鍵菜單上點擊“報表”→“標準報表”→“事物日志傳送狀態”項,可以查看相關的報表,來了解日志傳送的具體信息。