/*--说明: 下面的代码演示了如何利用日志还原功能,将主数据库中的数据变化及时反馈到备用数据库中 备用数据库的数据可以随时用于查询,但不能被更新(备用数据库只读)。 --*/
--首先,创建一个演示用的数据库(主数据库) CREATE DATABASE Db_test ON ( NAME = Db_test_DATA, FILENAME = 'c:\Db_test.mdf' ) LOG ON ( NAME = Db_test_LOG, FILENAME = 'c:\Db_test.ldf') GO
--对数据库进行备份 BACKUP DATABASE Db_test TO DISK='c:\test_data.bak' WITH FORMAT GO
--把数据库还原成备用数据库(演示主数据库与这个备用数据库之间的同步) RESTORE DATABASE Db_test_bak FROM DISK='c:\test_data.bak' WITH REPLACE,STANDBY='c:\db_test_bak.ldf' ,MOVE 'Db_test_DATA' TO 'c:\Db_test_data.mdf' ,MOVE 'Db_test_LOG' TO 'c:\Db_test_log.ldf' GO
--启动 SQL Agent 服务 EXEC master..xp_cmdshell 'net start sqlserveragent',no_output GO
--创建主服务器数据训与备用服务器数据库之间同步的作业 DECLARE @jogid uniqueidentifier EXEC msdb..sp_add_job @job_id = @jogid OUTPUT, @job_name = N'数据同步处理'
--创建同步处理步骤 EXEC msdb..sp_add_jobstep @job_id = @jogid, @step_name = N'数据同步', @subsystem = 'TSQL', @command = N' --主数据库中进行日志备份 BACKUP LOG Db_test TO DISK=''c:\test_log.bak'' WITH FORMAT
--备用数据库中还原主数据库的日志备份(应用主数据库中的最新变化 --实际应该时主数据库备份与备用数据库的还原作业应该分别在主服务器和备用服务器上建立,并且备份文件应该放在主服务器和备用都能访问的共享目录中 RESTORE LOG Db_test_bak FROM DISK=''c:\test_log.bak'' WITH STANDBY=''c:\test_log.ldf''', @retry_attempts = 5, @retry_interval = 5
--创建调度(每分钟执行一次) EXEC msdb..sp_add_jobschedule @job_id = @jogid, @name = N'时间安排', @freq_type=4, @freq_interval=1, @freq_subday_type=0x4, @freq_subday_interval=1, @freq_recurrence_factor=1
-- 添加目标服务器 EXEC msdb.dbo.sp_add_jobserver @job_id = @jogid, @server_name = N'(local)' GO
--通过上述处理,主数据库与备用数据库之间的同步关系已经设置完成 --下面开始测试是否能实现同步
--在主数据库中创建一个测试用的表 CREATE TABLE Db_test.dbo.TB_test(ID int) GO
--等待1分钟30秒(由于同步的时间间隔设置为1分钟,所以要延时才能看到效果) WAITFOR DELAY '00:01:30' GO
--查询一下备用数据库,看看同步是否成功 SELECT * FROM Db_test_bak.dbo.TB_test
/*--结果: ID -----------
(所影响的行数为 0 行) --*/
--测试成功 GO
--最后删除所有的测试 DROP DATABASE Db_test,Db_test_bak EXEC msdb..sp_delete_job @job_name=N'数据同步处理' GO
/*===========================================================*/
/*--服务器档机处理说明 使用这种方式建立的数据库同步,当主数据库不可用时(例如,主数据库损坏或者停机检修) 可以使用以下两种方法使备用数据库可用。 --*/ |