Replication--备份初始化需要还原备份么?

测试场景:
发布服务器:SQLVM6\SQL2
订阅服务器:SQLVM5\SQL2
分发服务器:SQLVM3\SQL2
发布数据库:RepDB2
订阅数据库:RepDB2
发布:RepDB2_TB1

测试步骤:
1>停止发布库上的日志备份
2>备份发布服务器上数据库"RepDB2" 至"E:\REPDB2.BAK"
3>将备份复制到订阅服务器,还原出数据库RepDB2_Temp
4>在订阅服务器上将 RepDB2_Temp 订阅相关的数据导入到 RepDB2(INSERT SELECT)
5>将发布RepDB2_TB1的属性"允许从备份文件初始化"设置为True

--==================================================
--发布服务器上运行
USE [RepDB2]
GO
DECLARE @publication AS sysname
SET @publication = N'RepDB2_TB1'
EXEC sp_changepublication
@publication = @publication,
@property = N'allow_initialize_from_backup',
@value = true
View Code

 

6>运行以下脚本创建订阅

use [RepDB2]
go
exec sp_addsubscription 
@publication = N'RepDB2_TB1', 
@subscriber = N'SQLVM5\SQL2', 
@destination_db = N'RepDB2', 
@subscription_type = N'Push', 
@sync_type = N'initialize with backup',
@article = N'all', 
@update_mode = N'read only', 
@subscriber_type = 0,
@backupdevicetype='disk',
@backupdevicename='E:\REPDB2.BAK'--最后一次备份的备份文件(发布服务器上的存放位置)
GO
exec sp_addpushsubscription_agent 
@publication = N'RepDB2_TB1',
@subscriber = N'SQLVM5\SQL2', 
@subscriber_db = N'RepDB2', 
@job_login = null, 
@job_password = null, 
@subscriber_security_mode = 0, 
@subscriber_login = N'dba', 
@subscriber_password = 'dba@123', 
@frequency_type = 64, 
@frequency_interval = 0, 
@frequency_relative_interval = 0, 
@frequency_recurrence_factor = 0, 
@frequency_subday = 0, 
@frequency_subday_interval = 0, 
@active_start_time_of_day = 0, 
@active_end_time_of_day = 235959, 
@active_start_date = 20131028,
@active_end_date = 99991231, 
@enabled_for_syncmgr = N'False', 
@dts_package_location = N'Distributor'
GO

7>检查复制,一切正常

 

在测试过程中,特地在订阅库上增加部分无关表,复制搭建完毕后,这些无关表依然存在,表明本次操作对这些表无影响。

误区:在讨论备份初始化时,一部分人都认为需要使用备份在订阅上还原,如果订阅库上存在其他数据,则不能使用备份初始化来初始化订阅。
解释:使用备份初始化时为了避免生成快照时对发布库的影响,而在创建订阅时指定备份,只是需要利用该备份来获取一个LSN,使用该LSN来告诉订阅应该从哪个点开始同步数据。

补充:注意在备份初始化前停止发布库日志备份

相关:
http://www.cnblogs.com/TeyGao/p/3521231.html
http://www.cnblogs.com/TeyGao/p/3521234.html

 

posted on 2014-01-22 10:56  笑东风  阅读(585)  评论(0编辑  收藏  举报

导航