-----SQLSERVER2008 事务日志传送 备份数据库
1、在主机上执行完整备份数据库
2、在备份机上 创建三个文件夹 。
· 第一个文件夹A(原主机上:比如)用来存放:备份数据库。
第二个文件夹B(目标机) 需要共享 存放:为备份数据库传送过来的事务日志。
第三个文件组C(目标机) 需要共享 存放:为还原数据库复制的事务日志。--
3、将主机上备份好的数据库 拷贝复制到 备份主机的对应文件夹中。并还原备份机上的数据库。
还原选项为 “覆盖现有数据库(WITH REPLACE)”。
.恢复状态 选第二项 即 “不对数据库执行任何操作。不回滚未提交的事务。可以还原其他事务日志” "RESTORE WITH NORECOVERY"
也就是恢复模式。
4、在主数据库服务器上>>>>>>选择数据库,右键>>>>任务>>>>>传送事务日志>>>>>
5、勾选 将此数据库启用为日志传送配置中的主数据库
>>>点击 备份设置>>>>>>填写事务日志备份参数(备份文件夹的网络路径:此处填写备份服务器上建立的用于存放事务日志备份的文件夹的网络路径。
此例中为"B"(也可写\\127.0.0.1\B文件夹名)。这里说明一下,此例中将备份文件夹放在了备份服务器上,但这不是必需的,也可以将备份文件夹放在数据库服务器上,或者放在第三台服务器上,只要保证此文件夹能从网络上被数据库服务器和备份服务器访问即可)。备份文件夹位于主机 这项 输入 本机的绝对路径这里输入 A 文件夹的路径。
6、点击 计划 开始设置备份作业计划。
7、回到 数据库>>>>属性>>>>传送事务日志的界面。 在 “辅助数据库” 下 点 “添加” >>>>>设置 辅助数据库 即 备份数据库服务器
8、连接到 备份数据库服务器 (服务器名称 最后写 计算机的名称 不要写 IP地址),并选择 对应的数据库。
9、由于开始 完成了对 备份数据库服务器上的数据库还原,所以在 “初始化辅助数据库”TBA选项卡 中选择“否”。
10、点击 “复制文件‘TAB 选项卡>>>>>>在弹出的窗体设置中 输入 复制文件的目标文件夹 C(目标机器上的C文件夹路径).填写下面的 复制作业的作业名称 >>>>>>>>>点编辑作业>>>>>>设置作业计划
11、点击 ”还原事务日志“TAB选项卡>>>>选中下面的 ”备用模式“。同样填写 作业名称 并编辑作业计划
12、 最后点击确定(OK) 则 备份数据库就会变为 ”备用/只读“的状态。
---备注: 也可以 用第三方工具在 目标机器上通过FTP 的方式将A 路径下的文件拷贝到 B 路径下。(下面的案例就是通过ServU 第三方工具定时将A 中的日子传递到B 下,然后通过日志传送产生的作业,再将B中的日志COPY到C中,然后利用C中的日志 来实现数据库恢复的。)
-- 在主服务器上执行下列语句,以便为数据库 [WIN2008R2-SERVER0].[db_name_read] -- 配置日志传送。-- 需要在主服务器上 [msdb] 数据库的上下文中运行该脚本。 ------------------------------------------------------------------------------------- -- 添加日志传送配置
-- ****** 开始: 要在主服务器 [WIN2008R2-SERVER0] 上运行的脚本 ******
DECLARE @LS_BackupJobId AS uniqueidentifier DECLARE @LS_PrimaryId AS uniqueidentifier DECLARE @SP_Add_RetCode As int
EXEC @SP_Add_RetCode = master.dbo.sp_add_log_shipping_primary_database @database = N'db_name_read' ,@backup_directory = N'F:\db_name_log' ---A文件夹 ,@backup_share = N'\\127.0.0.1\db_name_share_log' ---B文件夹 ,@backup_job_name = N'LSBackup_db_name_read' ,@backup_retention_period = 4320 ,@backup_compression = 1 ,@backup_threshold = 180 ,@threshold_alert_enabled = 1 ,@history_retention_period = 5760 ,@backup_job_id = @LS_BackupJobId OUTPUT ,@primary_id = @LS_PrimaryId OUTPUT ,@overwrite = 1
IF (@@ERROR = 0 AND @SP_Add_RetCode = 0) BEGIN
DECLARE @LS_BackUpScheduleUID As uniqueidentifier DECLARE @LS_BackUpScheduleID AS int
EXEC msdb.dbo.sp_add_schedule @schedule_name =N'LSBackupSchedule_WIN2008R2-SERVER01' ,@enabled = 1 ,@freq_type = 4 ,@freq_interval = 1 ,@freq_subday_type = 1 ,@freq_subday_interval = 15 ,@freq_recurrence_factor = 0 ,@active_start_date = 20121026 ,@active_end_date = 99991231 ,@active_start_time = 30000 ,@active_end_time = 235959 ,@schedule_uid = @LS_BackUpScheduleUID OUTPUT ,@schedule_id = @LS_BackUpScheduleID OUTPUT
EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_BackupJobId ,@schedule_id = @LS_BackUpScheduleID
EXEC msdb.dbo.sp_update_job @job_id = @LS_BackupJobId ,@enabled = 1
END
EXEC master.dbo.sp_add_log_shipping_alert_job
EXEC master.dbo.sp_add_log_shipping_primary_secondary @primary_database = N'db_name_read' ,@secondary_server = N'192.168.1.19,18991' ,@secondary_database = N'db_name_read' ,@overwrite = 1
-- ****** 结束: 要在主服务器 [WIN2008R2-SERVER0] 上运行的脚本 ******
-- 在辅助服务器上执行下列语句,以便为数据库 [192.168.1.19,18991].[db_name_read] -- 配置日志传送。-- 需要在辅助服务器上 [msdb] 数据库的上下文中运行该脚本。 ------------------------------------------------------------------------------------- -- 添加日志传送配置
-- ****** 开始: 要在辅助服务器 [192.168.1.19,18991] 上运行的脚本 ******
DECLARE @LS_Secondary__CopyJobId AS uniqueidentifier DECLARE @LS_Secondary__RestoreJobId AS uniqueidentifier DECLARE @LS_Secondary__SecondaryId AS uniqueidentifier DECLARE @LS_Add_RetCode As int
EXEC @LS_Add_RetCode = master.dbo.sp_add_log_shipping_secondary_primary @primary_server = N'WIN2008R2-SERVER0' ,@primary_database = N'db_name_read' ,@backup_source_directory = N'\\127.0.0.1\db_name_share_log' ---B文件夹 ,@backup_destination_directory = N'D:\db_name_log' ---C文件夹 ,@copy_job_name = N'LSCopy_WIN2008R2-SERVER0_db_name_read' ,@restore_job_name = N'LSRestore_WIN2008R2-SERVER0_db_name_read' ,@file_retention_period = 4320 ,@overwrite = 1 ,@copy_job_id = @LS_Secondary__CopyJobId OUTPUT ,@restore_job_id = @LS_Secondary__RestoreJobId OUTPUT ,@secondary_id = @LS_Secondary__SecondaryId OUTPUT
IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) BEGIN
DECLARE @LS_SecondaryCopyJobScheduleUID As uniqueidentifier DECLARE @LS_SecondaryCopyJobScheduleID AS int
EXEC msdb.dbo.sp_add_schedule @schedule_name =N'DefaultCopyJobSchedule' ,@enabled = 1 ,@freq_type = 4 ,@freq_interval = 1 ,@freq_subday_type = 1 ,@freq_subday_interval = 15 ,@freq_recurrence_factor = 0 ,@active_start_date = 20121026 ,@active_end_date = 99991231 ,@active_start_time = 32500 ,@active_end_time = 235959 ,@schedule_uid = @LS_SecondaryCopyJobScheduleUID OUTPUT ,@schedule_id = @LS_SecondaryCopyJobScheduleID OUTPUT
EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_Secondary__CopyJobId ,@schedule_id = @LS_SecondaryCopyJobScheduleID
DECLARE @LS_SecondaryRestoreJobScheduleUID As uniqueidentifier DECLARE @LS_SecondaryRestoreJobScheduleID AS int
EXEC msdb.dbo.sp_add_schedule @schedule_name =N'DefaultRestoreJobSchedule' ,@enabled = 1 ,@freq_type = 4 ,@freq_interval = 1 ,@freq_subday_type = 1 ,@freq_subday_interval = 15 ,@freq_recurrence_factor = 0 ,@active_start_date = 20121026 ,@active_end_date = 99991231 ,@active_start_time = 40000 ,@active_end_time = 235959 ,@schedule_uid = @LS_SecondaryRestoreJobScheduleUID OUTPUT ,@schedule_id = @LS_SecondaryRestoreJobScheduleID OUTPUT
EXEC msdb.dbo.sp_attach_schedule @job_id = @LS_Secondary__RestoreJobId ,@schedule_id = @LS_SecondaryRestoreJobScheduleID
END
DECLARE @LS_Add_RetCode2 As int
IF (@@ERROR = 0 AND @LS_Add_RetCode = 0) BEGIN
EXEC @LS_Add_RetCode2 = master.dbo.sp_add_log_shipping_secondary_database @secondary_database = N'db_name_read' ,@primary_server = N'WIN2008R2-SERVER0' ,@primary_database = N'db_name_read' ,@restore_delay = 0 ,@restore_mode = 1 ,@disconnect_users = 1 ,@restore_threshold = 45 ,@threshold_alert_enabled = 1 ,@history_retention_period = 5760 ,@overwrite = 1
END
IF (@@error = 0 AND @LS_Add_RetCode = 0) BEGIN
EXEC msdb.dbo.sp_update_job @job_id = @LS_Secondary__CopyJobId ,@enabled = 1
EXEC msdb.dbo.sp_update_job @job_id = @LS_Secondary__RestoreJobId ,@enabled = 1
END
-- ****** 结束: 要在辅助服务器 [192.168.1.19,18991] 上运行的脚本 ******