日志傳送(log shipping)主要基于sql server代理,使用定時作業來完成,另外在配置日志傳送之前必須要建立共享檔案夾,用于輔助伺服器通路。這裡我們假設有資料庫logtrans1需要進行日志傳送,共享檔案夾為“c:\data”,在t-sql中配置日志傳送主要有以下幾步操作:
(1)備份主資料庫并在輔助伺服器上還原主資料庫的完整備份,初始化輔助資料庫。具體操作如代碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
backup database logtrans1 --在主資料庫上備份
to disk='c:\logt.bak'
--以下是将資料庫還原到輔助資料庫上
restore database logtrans2
from disk='c:\logt.bak'
with norecovery,
move 'logtrans' to 'c:\logtrans2.mdf',
move 'logtrans_log' to 'c:\logtrans2.ldf'
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
(2)在主伺服器上,執行sp_add_log_shipping_primary_database以添加主資料庫。存儲過程将傳回備份作業id和主id,具體sql腳本如代碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
declare @ls_backupjobid as uniqueidentifier
declare @ls_primaryid as uniqueidentifier
exec master.dbo.sp_add_log_shipping_primary_database
@database = n'logtrans1'
,@backup_directory = n'd:\data'
,@backup_share = n'\\10.101.10.66\data'
,@backup_job_name = n'lsbackup_logtrans1'
,@backup_retention_period = 1440
,@monitor_server = n'localhost'
,@monitor_server_security_mode = 1
,@backup_threshold = 60
,@threshold_alert_enabled = 0
,@history_retention_period = 1440
,@backup_job_id = @ls_backupjobid output
,@primary_id = @ls_primaryid output
,@overwrite = 1
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
(3)在主伺服器上,執行sp_add_jobschedule以添加使用備份作業的計劃。為了能夠盡快看到日志傳送的效果,這裡将日志備份的頻率設定為2分鐘一次。但是在實際生産環境中,一般是用不到這麼高的執行頻率的。添加計劃的腳本如代碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
declare @schedule_id int
exec msdb.dbo.sp_add_jobschedule @job_name =n'lsbackup_logtrans1',
@name=n'backupdbevery2min',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=2,
@freq_relative_interval=0,
@freq_recurrence_factor=1,
@active_start_date=20080622,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959,
@schedule_id = @schedule_id output
select @schedule_id
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
【注意:sp_add_jobschedule存儲過程是在msdb資料庫中,在其他資料庫中是沒有該存儲過程的。】
(4)在監視伺服器上,執行sp_add_log_shipping_alert_job以添加警報作業。此存儲過程用于檢查是否已在此伺服器上建立了警報作業。如果警報作業不存在,此存儲過程将建立警報作業并将其作業id添加到log_shipping_monitor_alert表中。預設情況下,将啟用警報作業并按計劃每兩分鐘運作一次。添加警報作業如代碼:
use master
go
exec sp_add_log_shipping_alert_job;
(5)在主伺服器上,啟用備份作業。啟用作業使用sp_update_job存儲過程,隻需要輸入作業名并設定狀态為1即可。具體sql腳本如代碼:
exec msdb.dbo.sp_update_job
@job_name='lsbackup_logtrans1',
@enabled=1
(6)在輔助伺服器上,執行sp_add_log_shipping_secondary_primary,提供主伺服器和資料庫的詳細資訊。此存儲過程傳回輔助id以及複制和還原作業id,具體sql腳本如代碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
declare @ls_secondary__copyjobid uniqueidentifier
declare @ls_secondary__restorejobid uniqueidentifier
declare @ls_secondary__secondaryid uniqueidentifier
exec master.dbo.sp_add_log_shipping_secondary_primary
@primary_server = n'10.101.10.66'
,@primary_database = n'logtrans1'
,@backup_source_directory = n'\\10.101.10.66\data'
,@backup_destination_directory = n'd:\log'
,@copy_job_name = n'lscopy_logtrans1'
,@restore_job_name = n'lsrestore_logtrans2'
,@file_retention_period = 1440
,@copy_job_id = @ls_secondary__copyjobid output
,@restore_job_id = @ls_secondary__restorejobid output
,@secondary_id = @ls_secondary__secondaryid output
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
(7)在輔助伺服器上,執行sp_add_jobschedule以設定複制和還原作業的計劃。這裡一般将複制和還原作業計劃的頻率設定來和日志備份的作業頻率相同,是以此處将這兩個作業的頻率設定為每2分鐘執行一次,具體sql腳本如代碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
--設定複制作業計劃
exec msdb.dbo.sp_add_jobschedule
@job_name=n'lscopy_logtrans1',
@name=n'copyevery2min',
--設定還原作業的計劃
@name=n'restoreevery2min',
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
(8)在輔助伺服器上,執行sp_add_log_shipping_secondary_database以添加輔助資料庫,具體操作腳本如代碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
exec master.dbo.sp_add_log_shipping_secondary_database
@secondary_database = n'logtrans2'
,@primary_server = n'10.101.10.66'
,@restore_delay = 0
,@restore_mode = 1
,@disconnect_users = 0
,@restore_threshold = 45
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
(9)在主伺服器上,執行sp_add_log_shipping_primary_secondary向主伺服器添加有關新輔助資料庫的必需資訊,具體sql腳本如代碼:
exec master.dbo.sp_add_log_shipping_primary_secondary
@primary_database = n'logtrans1'
, @secondary_server = n'10.101.10.67' --輔助資料庫的ip
, @secondary_database = n'logtrans2'
(10)在輔助伺服器上,啟用複制和還原作業。啟用作業仍然使用sp_update_job存儲過程,具體操作如代碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
@job_name='lscopy_logtrans1',
@job_name='lsrestore_logtrans2',
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
通過以上10部操作就完成了對日志傳送的配置。現在每隔2分鐘,系統将會把主伺服器中的日志備份到共享檔案夾中,輔助伺服器通路共享檔案夾将日志備份複制到本地硬碟上,然後由還原作業将複制到本地的日志還原到資料庫,進而完成了日志的傳送。使用者可以在共享檔案夾和輔助伺服器的本地複制檔案夾中看到備份的日志檔案。
【說明:在ssms中可以通過右擊對應的作業,在彈出的右鍵菜單中選擇“檢視曆史記錄”選項來檢視該作業是否正常運作。如果所有日志傳送正常運作,則說明日志傳送正常。】