SQL Server 使用日誌傳送

參考文獻:sql

http://msdn.microsoft.com/en-us/library/ms187103.aspx數據庫

概述

SQL Server 使用日誌傳送,您能夠自動將「主服務器」實例上「主數據庫」內的事務日誌備份發送到單獨「輔助服務器」實例上的一個或多個「輔助數據庫」。 事務日誌備份分別應用於每一個輔助數據庫。 可選的第三個服務器實例(稱爲「監視服務器」)記錄備份和還原操做的歷史記錄及狀態,還能夠在沒法按計劃執行這些操做時引起警報。服務器

  1. 主服務器 (primary server):位於生產服務器上的 SQL Server 實例。
  2. 主數據庫 (primary database):但願備份到其餘服務器的主服務器上的數據庫。 經過 SQL Server Management Studio 進行的全部日誌傳送配置管理都是在主數據庫中執行的。
  3. 輔助服務器 (secondary server):想要在其中保留主數據庫的熱備用副本的 SQL Server 實例。
  4. 輔助數據庫 (secondary database):主數據庫的熱備用副本。輔助數據庫能夠處於 RECOVERING 狀態或 STANDBY 狀態,這將使數據庫可用於受限的只讀訪問。
  5. 監視服務器 (monitor server):跟蹤日誌傳送的全部詳細信息的 SQL Server 的可選實例,包括:主數據庫中事務日誌最近一次備份的時間。輔助服務器最近一次複製和還原備份文件的時間。有關任何備份失敗警報的信息。

日誌傳送步驟

日誌傳送由三項操做組成:網絡

  1. 在主服務器實例中備份事務日誌。ide

  2. 將事務日誌文件複製到輔助服務器實例。spa

  3. 在輔助服務器實例中還原日誌備份。3d

日誌可傳送到多個輔助服務器實例。 在這些狀況下,將針對每一個輔助服務器實例重複執行操做 2 和操做 3。日誌

日誌傳送配置不會自動從主服務器故障轉移到輔助服務器。 若是主數據庫變爲不可用,可手動使任意輔助數據庫聯機。code

您能夠爲了實現報表目的而使用輔助數據庫。server

此外,能夠針對日誌傳送配置來配置警報。

典型日誌傳送配置

下圖顯示了具備主服務器實例、三個輔助服務器實例和一個監視服務器實例的日誌傳送配置。 此圖闡釋了備份做業、複製做業以及還原做業所執行步驟,以下所示:

  1. 主服務器實例執行備份做業以在主數據庫上備份事務日誌。 而後,該服務器實例將日誌備份放入主日誌備份文件(此文件將被髮送到備份文件夾中)。 在此圖中,備份文件夾位於共享目錄(「備份共享」)下。

  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

 

做者: xwdreamer
歡迎任何形式的轉載,但請務必註明出處。
相關文章
相關標籤/搜索