參考文獻:
http://msdn.microsoft.com/en-us/library/ms187103.aspx
概述
SQL Server 使用記錄傳送,您可以自動將“主伺服器”執行個體上“主要資料庫”內的交易記錄備份發送到單獨“次要伺服器”執行個體上的一個或多個“次要資料庫”。 交易記錄備份分別應用於每個次要資料庫。 可選的第三個伺服器執行個體(稱為“監視伺服器”)記錄備份與還原操作的記錄及狀態,還可以在無法按計劃執行這些操作時引發警報。
優點
- 為單個主要資料庫以及一個或多個次要資料庫(每個資料庫都位於單獨的 SQL Server 執行個體上)提供災難恢複解決方案。
- 支援對次要資料庫的受限的唯讀存取權限(在還原作業之間的間隔期間)。
- 允許使用者將延遲時間定義為:從主伺服器備份主要資料庫日誌到次要伺服器必須還原(應用)記錄備份之間的時間。 例如,如果主要資料庫上的資料被意外更改,則較長的延遲會很有用。 如果很快發現意外更改,則通過延遲,您可以在次要資料庫反映此更改之前從其中檢索仍未更改的資料。
術語和定義
- 主伺服器 (primary server):位於生產伺服器上的 SQL Server 執行個體。
- 主要資料庫 (primary database):希望備份到其他伺服器的主伺服器上的資料庫。 通過 SQL Server Management Studio 進行的所有記錄傳送設定管理都是在主要資料庫中執行的。
- 次要伺服器 (secondary server):想要在其中保留主要資料庫的熱備用副本的 SQL Server 執行個體。
- 次要資料庫 (secondary database):主要資料庫的熱備用副本。次要資料庫可以處於 RECOVERING 狀態或 STANDBY 狀態,這將使資料庫可用於受限的唯讀訪問。
- 監視伺服器 (monitor server):追蹤記錄檔傳送的所有詳細資料的 SQL Server 的可選執行個體,包括:主要資料庫中交易記錄最近一次備份的時間。次要伺服器最近一次複製和還原備份檔案的時間。有關任何備份失敗警報的資訊。
記錄傳送步驟
記錄傳送由三項操作組成:
在主伺服器執行個體中備份交易記錄。
將交易記錄檔複製到次要伺服器執行個體。
在次要伺服器執行個體中還原記錄備份。
日誌可傳送到多個次要伺服器執行個體。 在這些情況下,將針對每個次要伺服器執行個體重複執行操作 2 和操作 3。
記錄傳送設定不會自動從主伺服器容錯移轉到次要伺服器。 如果主要資料庫變為不可用,可手動使任意次要資料庫聯機。
您可以為了實現報表目的而使用次要資料庫。
此外,可以針對記錄傳送設定來配置警報。
典型記錄傳送設定
顯示了具有主伺服器執行個體、三個次要伺服器執行個體和一個監視伺服器執行個體的記錄傳送設定。 此圖闡釋了備份作業、複製作業以及還原作業所執行步驟,如下所示:
主伺服器執行個體執行備份作業以在主要資料庫上備份交易記錄。 然後,該伺服器執行個體將記錄備份放入主記錄備份檔案(此檔案將被發送到備份檔案夾中)。 在此圖中,備份檔案夾位於共用目錄(“備份共用”)下。
全部三個次要伺服器執行個體都執行其各自的複製作業,以將主記錄備份檔案複製到它本地的目標檔案夾中。
每個次要伺服器執行個體都執行其還原作業,以將記錄備份從本地目標檔案夾還原到本地次要資料庫中。
主伺服器執行個體和次要伺服器執行個體將它們自己的記錄和狀態發送到監視伺服器執行個體。
Log Shipping配置
Primary Server:SANZ-W7\.,以local system啟動預設資料庫執行個體
Primary Database:InsideTSQL2008
Secondary Server:WUW-W7\.,以域賬戶wuwang啟動預設資料庫執行個體,因為如果用Local System這個帳號的話,是不能訪問網路資源的。
Secondary Database:InsideTSQL2008
配置步驟:
步驟1:
在主伺服器SANZ-W7上建立一個共用目錄,給Everyone有讀的許可權。比如我建立的共用目錄路徑是:C:\Temp\LogShipping,共用路徑是:\\SANZ-W7\LogShipping。
步驟2:
對主要資料庫InsideTSQL2008做一個全備份(可以不做全備份,在配置log shipping的時候再做全備份,下面會提到),然後把備份檔案InsideTSQL2008.bak放在C:\Temp\LogShipping目錄下。在次要伺服器上建立目錄C:\Temp\LogShipping。
步驟3:
設定LogShipping的配置屬性,我們右鍵InsideTSQL2008->Tasks->Ship Transaction Logs,會出現如所示介面:
點擊Backup Settings進行如下配置:
在此處建立了一個Job叫做LSBackup_InsideTSQL2008,用來自動備份交易記錄。
步驟4:
然後添加Secondary伺服器WUW-W7,如所示:
Seconday server instance我們選擇WUW-W7,Secondary database預設就是跟primary database同名的InsideTSQL2008。如所示,我們在Initialize Secondary Database中看到有兩個選項,一個是建立資料庫全備份,然後將這個全備份回複到secondary database中,另外一個是指定已有全備份的路徑。
在Copy File標籤中添加Secondary Server儲存檔案的路徑,我們這裡使用同名的路徑。還有secondary server也要啟動sql agent。
配置完畢以後點擊OK,最後會有一個配置成功介面:
Log Shipping驗證:
我們在服務伺服器WUW-W7下查看InsideTSQL2008資訊,如所示:
我們可以發現InsideTSQL2008處於Resotoring狀態,這是因為恢複到服務資料庫的都是使用nonrecovery模式的。
在完全正確配置Log Shipping以後,我們可以在primary server的C:\Temp\LogShipping目錄下看到如下這些記錄備份檔案
在Secondary server的C:\Temp\LogShipping目錄下看到
唯一的區別就是primary server有full database backup,而Secondary server中沒有。不論是primary server上的LSBackup_TESTDB1,還是secondary server上的LSCopy_SANZ-W7_TESTDB1和LSRestore_SANZ-W7_TESTDB1,我將他們都設定成每一分鐘執行一次,這樣方便查看實驗結果。
"Could not retrieve backup settings for primary ID"錯誤的解決方案
參考文獻:http://blogs.msdn.com/b/sqlsakthi/archive/2012/06/14/error-quot-could-not-retrieve-backup-settings-for-primary-quot-in-log-shipping-backup-job.aspx
在SSMS中查看LSBackup_InsideTSQL2008這個Job的工作情況,發現這個Job報錯,錯誤如下:
*** Error: Could not retrieve backup settings for primary ID 'f32baa93-0341-48b5-a5a0-2acde90283fa'.(Microsoft.SqlServer.Management.LogShipping)***<nl/>2012-09-09 19:30:15.85*** Error: Failed to connect to server WIN-E5EJQ0EN4O2.(Microsoft.SqlServer.ConnectionInfo)***<nl/>2012-09-09 19:30:15.85*** Error: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider<c/> error: 40 - Could not open a connection to SQL Server)(.Net SqlClient Data Provider)***<nl/>2012-09-09 19:30:15.85----- END OF TRANSACTION LOG BACKUP -----
從上述錯誤記錄檔中我們發現有一條是說無法串連 server WIN-E5EJQ0EN4O2。但是我的primary server是SANZ-W7啊,怎麼成了WIN-E5EJQ0EN4O2?這是當初安裝系統的時候,立馬就安裝了sql server,然後又將主機名稱從WIN-E5EJQ0EN4O2改成了SANZ-W7。但是在sys.servers中沒有更新,我們可以通過如下TSQL語句查看:
select @@SERVERNAME
其查詢結果就是WIN-E5EJQ0EN4O2。我們只需要更新資料庫中sys.servers資訊就可以了。我們執行如下TSQL語句更新server資訊
--刪除舊的主機名稱EXEC sp_dropserver 'WIN-E5EJQ0EN4O2'GO--添加當前主機名稱EXEC sp_addserver 'SANZ-W7', 'local'GO
在執行完上述TSQL語句以後一定要記得重啟sql server,否則使用select @@SERVERNAME查詢當前server名稱還是WIN-E5EJQ0EN4O2。