13.2.5 通過T-SQL指令來部署日志傳送
SQL Server還提供以T-SQL指令方式來部署日志傳送。在上一個章節中當完成步驟(6)或者(8)後,可儲存生成的指令腳本。這個腳本指令結果和在Management Studio中操作的結果是等價的,此指令腳本也可以使用在使用者在災難恢複方案中更快速的重新部署日志傳送。
<a href="http://s3.51cto.com/wyfs02/M02/57/FA/wKioL1SlP1HRoXQsAAFpThadBWI811.jpg" target="_blank"></a>
得到的指令腳本(帶監視伺服器):
-- 在主伺服器上執行下列語句,以便為資料庫 [SQLSVR1].[DB01]
-- 配置日志傳送。
-- 需要在主伺服器上 [msdb] 資料庫的上下文中運作該腳本。
-------------------------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<code>-- 添加日志傳送配置</code>
<code>-- ****** 開始: 要在主伺服器 [SQLSVR1] 上運作的腳本 ******</code>
<code>DECLARE</code> <code>@LS_BackupJobId </code><code>AS</code> <code>uniqueidentifier</code>
<code>DECLARE</code> <code>@LS_PrimaryId </code><code>AS</code> <code>uniqueidentifier</code>
<code>DECLARE</code> <code>@SP_Add_RetCode </code><code>As</code> <code>int</code>
<code>EXEC</code> <code>@SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database</code>
<code>@</code><code>database</code> <code>= N</code><code>'DB01'</code>
<code>,@backup_directory = N</code><code>'\\192.168.1.20\backuplog'</code>
<code>,@backup_share = N</code><code>'\\192.168.1.20\backuplog'</code>
<code>,@backup_job_name = N</code><code>'LSBackup_DB01'</code>
<code>,@backup_retention_period = 4320</code>
<code>,@backup_compression = 2</code>
<code>,@monitor_server = N</code><code>'SQLSVR3'</code>
<code>,@monitor_server_security_mode = 1</code>
<code>,@backup_threshold = 60</code>
<code>,@threshold_alert_enabled = 1</code>
<code>,@history_retention_period = 5760</code>
<code>,@backup_job_id = @LS_BackupJobId </code><code>OUTPUT</code>
<code>,@primary_id = @LS_PrimaryId </code><code>OUTPUT</code>
<code>,@overwrite = 1</code>
<code>IF (@@ERROR = 0 </code><code>AND</code> <code>@SP_Add_RetCode = 0)</code>
<code>BEGIN</code>
<code>DECLARE</code> <code>@LS_BackUpScheduleUID </code><code>As</code> <code>uniqueidentifier</code>
<code>DECLARE</code> <code>@LS_BackUpScheduleID </code><code>AS</code> <code>int</code>
<code>EXEC</code> <code>msdb.dbo.sp_add_schedule</code>
<code>@schedule_name =N</code><code>'LSBackupSchedule_SQLSVR11'</code>
<code>,@enabled = 1</code>
<code>,@freq_type = 4</code>
<code>,@freq_interval = 1</code>
<code>,@freq_subday_type = 4</code>
<code>,@freq_subday_interval = 15</code>
<code>,@freq_recurrence_factor = 0</code>
<code>,@active_start_date = 20140708</code>
<code>,@active_end_date = 99991231</code>
<code>,@active_start_time = 0</code>
<code>,@active_end_time = 235900</code>
<code>,@schedule_uid = @LS_BackUpScheduleUID </code><code>OUTPUT</code>
<code>,@schedule_id = @LS_BackUpScheduleID </code><code>OUTPUT</code>
<code>EXEC</code> <code>msdb.dbo.sp_attach_schedule</code>
<code>@job_id = @LS_BackupJobId</code>
<code>,@schedule_id = @LS_BackUpScheduleID</code>
<code>EXEC</code> <code>msdb.dbo.sp_update_job</code>
<code>END</code>
<code>EXEC</code> <code>master.dbo.sp_add_log_shipping_primary_secondary</code>
<code>@primary_database = N</code><code>'DB01'</code>
<code>,@secondary_server = N</code><code>'SQLSVR2'</code>
<code>,@secondary_database = N</code><code>'DB01'</code>
<code>-- ****** 結束: 要在主伺服器 [SQLSVR1] 上運作的腳本 ******</code>
-- 在輔助伺服器上執行下列語句,以便為資料庫 [SQLSVR2].[DB01]
-- 需要在輔助伺服器上 [msdb] 資料庫的上下文中運作該腳本。
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<code>-- ****** 開始: 要在輔助伺服器 [SQLSVR2] 上運作的腳本 ******</code>
<code>DECLARE</code> <code>@LS_Secondary__CopyJobId </code><code>AS</code> <code>uniqueidentifier</code>
<code>DECLARE</code> <code>@LS_Secondary__RestoreJobId </code><code>AS</code> <code>uniqueidentifier</code>
<code>DECLARE</code> <code>@LS_Secondary__SecondaryId </code><code>AS</code> <code>uniqueidentifier</code>
<code>DECLARE</code> <code>@LS_Add_RetCode </code><code>As</code> <code>int</code>
<code>EXEC</code> <code>@LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary</code>
<code>@primary_server = N</code><code>'SQLSVR1'</code>
<code>,@primary_database = N</code><code>'DB01'</code>
<code>,@backup_source_directory = N</code><code>'\\192.168.1.20\backuplog'</code>
<code>,@backup_destination_directory = N</code><code>'d:\copylog'</code>
<code>,@copy_job_name = N</code><code>'LSCopy_SQLSVR1_DB01'</code>
<code>,@restore_job_name = N</code><code>'LSRestore_SQLSVR1_DB01'</code>
<code>,@file_retention_period = 4320</code>
<code>,@copy_job_id = @LS_Secondary__CopyJobId </code><code>OUTPUT</code>
<code>,@restore_job_id = @LS_Secondary__RestoreJobId </code><code>OUTPUT</code>
<code>,@secondary_id = @LS_Secondary__SecondaryId </code><code>OUTPUT</code>
<code>IF (@@ERROR = 0 </code><code>AND</code> <code>@LS_Add_RetCode = 0)</code>
<code>DECLARE</code> <code>@LS_SecondaryCopyJobScheduleUID </code><code>As</code> <code>uniqueidentifier</code>
<code>DECLARE</code> <code>@LS_SecondaryCopyJobScheduleID </code><code>AS</code> <code>int</code>
<code>@schedule_name =N</code><code>'DefaultCopyJobSchedule'</code>
<code>,@schedule_uid = @LS_SecondaryCopyJobScheduleUID </code><code>OUTPUT</code>
<code>,@schedule_id = @LS_SecondaryCopyJobScheduleID </code><code>OUTPUT</code>
<code>@job_id = @LS_Secondary__CopyJobId</code>
<code>,@schedule_id = @LS_SecondaryCopyJobScheduleID</code>
<code>DECLARE</code> <code>@LS_SecondaryRestoreJobScheduleUID </code><code>As</code> <code>uniqueidentifier</code>
<code>DECLARE</code> <code>@LS_SecondaryRestoreJobScheduleID </code><code>AS</code> <code>int</code>
<code>@schedule_name =N</code><code>'DefaultRestoreJobSchedule'</code>
<code>,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID </code><code>OUTPUT</code>
<code>,@schedule_id = @LS_SecondaryRestoreJobScheduleID </code><code>OUTPUT</code>
<code>@job_id = @LS_Secondary__RestoreJobId</code>
<code>,@schedule_id = @LS_SecondaryRestoreJobScheduleID</code>
<code>DECLARE</code> <code>@LS_Add_RetCode2 </code><code>As</code> <code>int</code>
<code>EXEC</code> <code>@LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database</code>
<code>@secondary_database = N</code><code>'DB01'</code>
<code>,@primary_server = N</code><code>'SQLSVR1'</code>
<code>,@restore_delay = 0</code>
<code>,@restore_mode = 0</code>
<code>,@disconnect_users = 0</code>
<code>,@restore_threshold = 45</code>
<code>,@ignoreremotemonitor = 1</code>
<code>IF (@@error = 0 </code><code>AND</code> <code>@LS_Add_RetCode = 0)</code>
<code>-- ****** 結束: 要在輔助伺服器 [SQLSVR2] 上運作的腳本 ******</code>
-- ****** 開始: 要在螢幕 [SQLSVR3] 上運作的腳本 ******
<code>EXEC</code> <code>msdb.dbo.sp_processlogshippingmonitorsecondary</code>
<code>@mode = 1</code>
<code>,@secondary_id = N</code><code>''</code>
<code>,@threshold_alert = 14420</code>
<code>-- ****** 結束: 要在螢幕 [SQLSVR3] 上運作的腳本 ******</code>
這個指令腳本中包含的預定義的存儲過程用來設定日志傳送的各個部分;
master.dbo.sp_add_log_shipping_primary_database 為主資料庫設定日志傳送配置,并設定日志傳送備份作業。
msdb.dbo.sp_add_schedule 為日志傳送設定時間表,或者為複制作業設定時間表,或者為還原作業設定時間表。
msdb.dbo.sp_attach_schedule 把日志傳送作業連結到時間表,或者把複制作業連結到時間表,或者把還原作業連結到時間表。
msdb.dbo.sp_update_job 啟用事務日志的備份作業、複制作業或者還原作業
master.dbo.sp_add_log_shipping_primary_secondary在主資料庫上為指定的輔助資料庫設定相關資訊。
master.dbo.sp_add_log_shipping_secondary_primary 在輔助資料庫上為指定的主資料庫設定相關資訊、添加本地和遠端的監控連結以及建立複制和還原作業。
master.dbo.sp_add_log_shipping_secondary_database 為日志傳送設定輔助資料庫。
msdb.dbo.sp_processlogshippingmonitorsecondary 在監視伺服器上啟用對主資料庫和輔助資料庫監視警報。
本文轉自 bannerpei 51CTO部落格,原文連結:http://blog.51cto.com/281816327/1598315,如需轉載請自行聯系原作者