基本概念
可以使用日志傳送將事務日志不間斷地從一個數據庫(主數據庫)發送到另一個數據庫(輔助數據庫)。不間斷地備份主數據庫中的事務日志,然后將它們復制並還原到輔助數據庫,這將使輔助數據庫與主數據庫基本保持同步。目標服務器充當備份服務器,並可以將查詢處理從主服務器重新分配到一個或多個只讀的輔助服務器。日志傳送可與使用完整或大容量日志恢復模式的數據庫一起使用。
日志傳送由三項操作組成:
-
在主服務器實例中備份事務日志。
-
將事務日志文件復制到輔助服務器實例。
-
在輔助服務器實例中還原日志備份。
日志可傳送到多個輔助服務器實例。在這些情況下,將針對每個輔助服務器實例重復執行操作 2 和操作 3。
日志傳送配置不會自動從主服務器故障轉移到輔助服務器。如果主數據庫變為不可用,可手動使任意輔助數據庫聯機。
您可以為了實現報表目的而使用輔助數據庫。
配置過程
1、首先需要在輔助數據庫創建用於備份的共享目錄logbackup,主要用於存放從主數據備份來的日志文件,放在輔助數據庫服務器方便讀取備份日志文件,如下圖

2、添加目錄信任(這部很重要,因為共享目錄以后在主數據服務器雖然可以讀寫共享目錄,但是后來在通過SqlServer傳輸日志的時候總是因為權限的問題失敗)
首先,是啟用SqlServer的xp_cmdshell功能,可以通過命令啟用,通過Management Studio執行以下腳本:
1 sp_configure 'show advanced options',1 2 reconfigure 3 go 4 sp_configure 'xp_cmdshell',1 5 reconfigure 6 go
但是腳本執行僅本次起作用,下次重啟數據庫會失效,所以可以通過界面設置來永久啟用xp_cmdshell:
右擊"SqlServer數據庫"--方面--點擊常規--選擇外圍應用配置器--然后將cmdshell的屬性改為True,如下圖


操作完以上步驟以后,開始通過Management Studio執行目錄信任命令:
exec master..xp_cmdshell 'net use \\172.16.3.79\logbackup Envisi0n@#1 /user:172.16.3.79\ENADMIN';
\\172.16.3.79\logbackup--是共享目錄
172.16.3.79\ENADMIN--輔助數據庫服務器共享目錄的用戶
Envisi0n@#1--用戶的密碼
3、在輔助數據庫服務添加防火牆程序和端口例外(SqlServer Studio和端口1433):
轉到 防火牆--點擊高級配置--新建規則--分步添加程序和端口的例外,這里很簡單就不做說明,程序選擇的目錄(C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\sqlservr.exe)。
4、開始執行日志傳輸配置:
首先,打開主數據庫的屬性界面,選擇“事務日志傳輸”,點擊選擇啟用日志傳輸功能的復選框。

然后彈出主數據庫日志備份相關的配置,備份文件夾的網路路徑選擇之前創建的共享目錄,備份作業可以自行根據實際情況編輯選擇。

然后,則是添加輔助數據,輔助數據庫可以添加多個,在“初始化輔助數據庫”界面,我們選擇在主數據庫生成完全備份,還原到輔助數據庫中(輔助數據不存在,則創建它)。
在還原選項中需要選擇文件夾存放數據庫文件和日志文件,這些目錄都是輔助數據庫服務器上的目錄。

在“復制文件”界面進行配置復制的一些任務,這里的任務主要是負責將主數據庫的日志備份文件復制到輔助數據庫服務的共享目錄下,如下圖

在“還原事務日志”界面配置還原備份日志的相關配置和任務計划,其中還原備份時數據庫有2種狀態,無恢復模式和備用模式,主要區別是無恢復模式不允許用戶連接數據庫查詢,而備用模式允許用戶查詢數據(但是在數據庫還原期間是不允許查詢的)。一般選擇備用模式,並且選擇“在還原備份時斷開數據庫中的用戶連接”。

使輔助數據庫處於備用模式時,有兩種配置方式:
還原事務日志備份時,可以選擇使數據庫用戶斷開連接。如果選中此選項,則日志傳送還原作業每次嘗試將事務日志還原到輔助數據庫時,用戶都將與數據庫斷開連接。斷開連接將按為還原作業設置的計划發生。
可以選擇不與用戶斷開連接。在這種情況下,如果用戶連接到輔助數據庫,則還原作業無法將事務日志備份還原到輔助數據庫。事務日志備份將一直累積到沒有用戶連接到該數據庫為止。
5、最后點擊”確定”按鈕,會將主數據庫備份並且還原到輔助數據庫服務器,此步驟可能會執行一段較長時間,只要不報錯就OK,最后可以查看輔助數據庫服務器多出一個處於“備用/只讀”的數據庫,如下圖:

6、注意,因為所有日志的備份、復制和還原都是計划任務,所以在主數據和輔助數據庫服務器都要啟用SQL Server代理。
