天天看點

使用T-SQL配置日志傳送

日志傳送(log shipping)主要基于sql server代理,使用定時作業來完成,另外在配置日志傳送之前必須要建立共享檔案夾,用于輔助伺服器通路。這裡我們假設有資料庫logtrans1需要進行日志傳送,共享檔案夾為“c:\data”,在t-sql中配置日志傳送主要有以下幾步操作:

(1)備份主資料庫并在輔助伺服器上還原主資料庫的完整備份,初始化輔助資料庫。具體操作如代碼:

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

backup database logtrans1 --在主資料庫上備份 

使用T-SQL配置日志傳送

to disk='c:\logt.bak' 

使用T-SQL配置日志傳送

--以下是将資料庫還原到輔助資料庫上 

使用T-SQL配置日志傳送

restore database logtrans2 

使用T-SQL配置日志傳送

from disk='c:\logt.bak' 

使用T-SQL配置日志傳送

with norecovery, 

使用T-SQL配置日志傳送

move 'logtrans' to 'c:\logtrans2.mdf', 

使用T-SQL配置日志傳送

move 'logtrans_log' to 'c:\logtrans2.ldf' 

使用T-SQL配置日志傳送

(2)在主伺服器上,執行sp_add_log_shipping_primary_database以添加主資料庫。存儲過程将傳回備份作業id和主id,具體sql腳本如代碼:

使用T-SQL配置日志傳送

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 

使用T-SQL配置日志傳送

(3)在主伺服器上,執行sp_add_jobschedule以添加使用備份作業的計劃。為了能夠盡快看到日志傳送的效果,這裡将日志備份的頻率設定為2分鐘一次。但是在實際生産環境中,一般是用不到這麼高的執行頻率的。添加計劃的腳本如代碼:

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

declare @schedule_id int 

使用T-SQL配置日志傳送

exec msdb.dbo.sp_add_jobschedule @job_name =n'lsbackup_logtrans1', 

使用T-SQL配置日志傳送

@name=n'backupdbevery2min', 

使用T-SQL配置日志傳送

@enabled=1, 

使用T-SQL配置日志傳送

@freq_type=4, 

使用T-SQL配置日志傳送

@freq_interval=1, 

使用T-SQL配置日志傳送

@freq_subday_type=4, 

使用T-SQL配置日志傳送

@freq_subday_interval=2, 

使用T-SQL配置日志傳送

@freq_relative_interval=0, 

使用T-SQL配置日志傳送

@freq_recurrence_factor=1, 

使用T-SQL配置日志傳送

@active_start_date=20080622, 

使用T-SQL配置日志傳送

@active_end_date=99991231, 

使用T-SQL配置日志傳送

@active_start_time=0, 

使用T-SQL配置日志傳送

@active_end_time=235959, 

使用T-SQL配置日志傳送

@schedule_id = @schedule_id output 

使用T-SQL配置日志傳送

select @schedule_id 

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

【注意:sp_add_jobschedule存儲過程是在msdb資料庫中,在其他資料庫中是沒有該存儲過程的。】

(4)在監視伺服器上,執行sp_add_log_shipping_alert_job以添加警報作業。此存儲過程用于檢查是否已在此伺服器上建立了警報作業。如果警報作業不存在,此存儲過程将建立警報作業并将其作業id添加到log_shipping_monitor_alert表中。預設情況下,将啟用警報作業并按計劃每兩分鐘運作一次。添加警報作業如代碼:

使用T-SQL配置日志傳送

use master 

使用T-SQL配置日志傳送

go 

使用T-SQL配置日志傳送

exec sp_add_log_shipping_alert_job; 

(5)在主伺服器上,啟用備份作業。啟用作業使用sp_update_job存儲過程,隻需要輸入作業名并設定狀态為1即可。具體sql腳本如代碼:

使用T-SQL配置日志傳送

exec msdb.dbo.sp_update_job 

使用T-SQL配置日志傳送

@job_name='lsbackup_logtrans1', 

使用T-SQL配置日志傳送

@enabled=1 

(6)在輔助伺服器上,執行sp_add_log_shipping_secondary_primary,提供主伺服器和資料庫的詳細資訊。此存儲過程傳回輔助id以及複制和還原作業id,具體sql腳本如代碼:

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

declare @ls_secondary__copyjobid uniqueidentifier 

使用T-SQL配置日志傳送

declare @ls_secondary__restorejobid uniqueidentifier 

使用T-SQL配置日志傳送

declare @ls_secondary__secondaryid uniqueidentifier 

使用T-SQL配置日志傳送

exec master.dbo.sp_add_log_shipping_secondary_primary 

使用T-SQL配置日志傳送

@primary_server = n'10.101.10.66' 

使用T-SQL配置日志傳送

,@primary_database = n'logtrans1' 

使用T-SQL配置日志傳送

,@backup_source_directory = n'\\10.101.10.66\data' 

使用T-SQL配置日志傳送

,@backup_destination_directory = n'd:\log' 

使用T-SQL配置日志傳送

,@copy_job_name = n'lscopy_logtrans1' 

使用T-SQL配置日志傳送

,@restore_job_name = n'lsrestore_logtrans2' 

使用T-SQL配置日志傳送

,@file_retention_period = 1440 

使用T-SQL配置日志傳送

,@copy_job_id = @ls_secondary__copyjobid output 

使用T-SQL配置日志傳送

,@restore_job_id = @ls_secondary__restorejobid output 

使用T-SQL配置日志傳送

,@secondary_id = @ls_secondary__secondaryid output 

使用T-SQL配置日志傳送

(7)在輔助伺服器上,執行sp_add_jobschedule以設定複制和還原作業的計劃。這裡一般将複制和還原作業計劃的頻率設定來和日志備份的作業頻率相同,是以此處将這兩個作業的頻率設定為每2分鐘執行一次,具體sql腳本如代碼:

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

--設定複制作業計劃 

使用T-SQL配置日志傳送

exec msdb.dbo.sp_add_jobschedule 

使用T-SQL配置日志傳送

@job_name=n'lscopy_logtrans1', 

使用T-SQL配置日志傳送

@name=n'copyevery2min', 

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

--設定還原作業的計劃 

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

@name=n'restoreevery2min', 

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

(8)在輔助伺服器上,執行sp_add_log_shipping_secondary_database以添加輔助資料庫,具體操作腳本如代碼:

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

exec master.dbo.sp_add_log_shipping_secondary_database 

使用T-SQL配置日志傳送

@secondary_database = n'logtrans2' 

使用T-SQL配置日志傳送

,@primary_server = n'10.101.10.66' 

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

,@restore_delay = 0 

使用T-SQL配置日志傳送

,@restore_mode = 1 

使用T-SQL配置日志傳送

,@disconnect_users = 0 

使用T-SQL配置日志傳送

,@restore_threshold = 45 

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

(9)在主伺服器上,執行sp_add_log_shipping_primary_secondary向主伺服器添加有關新輔助資料庫的必需資訊,具體sql腳本如代碼:

使用T-SQL配置日志傳送

exec master.dbo.sp_add_log_shipping_primary_secondary 

使用T-SQL配置日志傳送

@primary_database = n'logtrans1' 

使用T-SQL配置日志傳送

, @secondary_server = n'10.101.10.67' --輔助資料庫的ip 

使用T-SQL配置日志傳送

, @secondary_database = n'logtrans2' 

使用T-SQL配置日志傳送

(10)在輔助伺服器上,啟用複制和還原作業。啟用作業仍然使用sp_update_job存儲過程,具體操作如代碼:

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

@job_name='lscopy_logtrans1', 

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

@job_name='lsrestore_logtrans2', 

使用T-SQL配置日志傳送
使用T-SQL配置日志傳送

通過以上10部操作就完成了對日志傳送的配置。現在每隔2分鐘,系統将會把主伺服器中的日志備份到共享檔案夾中,輔助伺服器通路共享檔案夾将日志備份複制到本地硬碟上,然後由還原作業将複制到本地的日志還原到資料庫,進而完成了日志的傳送。使用者可以在共享檔案夾和輔助伺服器的本地複制檔案夾中看到備份的日志檔案。

【說明:在ssms中可以通過右擊對應的作業,在彈出的右鍵菜單中選擇“檢視曆史記錄”選項來檢視該作業是否正常運作。如果所有日志傳送正常運作,則說明日志傳送正常。】