日志传送(
log shipping
)主要基于
SQL Server
代理,使用定时作业来完成,另外在配置日志传送之前必须要创建共享文件夹,用于辅助服务器访问。这里我们假设有数据库
logTrans1
需要进行日志传送,共享文件夹为“
C:\data
”,在
T-SQL
中配置日志传送主要有以下几步操作:
(
1
)备份主数据库并在辅助服务器上还原主数据库的完整备份,初始化辅助数据库。具体操作如代码
:
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
(
2
)在主服务器上,执行
sp_add_log_shipping_primary_database
以添加主数据库。存储过程将返回备份作业
ID
和主
ID
,具体
SQL
脚本如代码
:
DECLARE @LS_BackupJobId AS uniqueidentifier
DECLARE @LS_PrimaryId AS uniqueidentifier
EXEC master.dbo.sp_add_log_shipping_primary_database
@database = NlogTrans1
,@backup_directory = ND:\data
,@backup_share = N\\10.101.10.66\data
,@backup_job_name = NLSBackup_logTrans1
,@backup_retention_period = 1440
,@monitor_server = Nlocalhost
,@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
(
3
)在主服务器上,执行
sp_add_jobschedule
以添加使用备份作业的计划。为了能够尽快看到日志传送的效果,这里将日志备份的频率设置为
2
分钟一次。但是在实际生产环境中,一般是用不到这么高的执行频率的。添加计划的脚本如代码
:
DECLARE @schedule_id int
EXEC msdb.dbo.sp_add_jobschedule @job_name =NLSBackup_logTrans1,
@name=NBackupDBEvery2Min,
@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
【注意:
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
脚本如代码
:
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 = N10.101.10.66
,@primary_database = NlogTrans1
,@backup_source_directory = N\\10.101.10.66\data
,@backup_destination_directory = ND:\log
,@copy_job_name = NLSCopy_logTrans1
,@restore_job_name = NLSRestore_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
(
7
)在辅助服务器上,执行
sp_add_jobschedule
以设置复制和还原作业的计划。这里一般将复制和还原作业计划的频率设置来和日志备份的作业频率相同,所以此处将这两个作业的频率设置为每
2
分钟执行一次,具体
SQL
脚本如代码
:
DECLARE @schedule_id int
--
设置复制作业计划
EXEC msdb.dbo.sp_add_jobschedule
@job_name=NLSCopy_logTrans1,
@name=NCopyEvery2Min,
@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
--
设置还原作业的计划
EXEC msdb.dbo.sp_add_jobschedule
@job_name=NLSCopy_logTrans1,
@name=NRestoreEvery2Min,
@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
(
8
)在辅助服务器上,执行
sp_add_log_shipping_secondary_database
以添加辅助数据库,具体操作脚本如代码
:
EXEC master.dbo.sp_add_log_shipping_secondary_database
@secondary_database = NlogTrans2
,@primary_server = N10.101.10.66
,@primary_database = NlogTrans1
,@restore_delay = 0
,@restore_mode = 1
,@disconnect_users = 0
,@restore_threshold = 45
,@threshold_alert_enabled = 0
,@history_retention_period = 1440
(
9
)在主服务器上,执行
sp_add_log_shipping_primary_secondary
向主服务器添加有关新辅助数据库的必需信息,具体
SQL
脚本如代码
:
EXEC master.dbo.sp_add_log_shipping_primary_secondary
@primary_database = NlogTrans1
, @secondary_server = N10.101.10.67 --
辅助数据库的
IP
, @secondary_database = NlogTrans2
(
10
)在辅助服务器上,启用复制和还原作业。启用作业仍然使用
sp_update_job
存储过程,具体操作如代码
:
EXEC msdb.dbo.sp_update_job
@job_name=LSCopy_logTrans1,
@enabled=1
EXEC msdb.dbo.sp_update_job
@job_name=LSRestore_logTrans2,
@enabled=1
通过以上
10步
操作就完成了对日志传送的配置。现在每隔
2
分钟,系统将会把主服务器中的日志备份到共享文件夹中,辅助服务器访问共享文件夹将日志备份复制到本地硬盘上,然后由还原作业将复制到本地的日志还原到数据库,从而完成了日志的传送。用户可以在共享文件夹和辅助服务器的本地复制文件夹中看到备份的日志文件。
【说明:在
SSMS
中可以通过右击对应的作业,在弹出的右键菜单中选择“查看历史记录”选项来查看该作业是否正常运行。如果所有日志传送正常运行,则说明日志传送正常。】