SQL SERVER 2005数据库复制之事务复制
事务复制与快照复制不同,快照复制仅仅是对数据库进行一次扫描,并将其内容复制分发到服务器上,
而事务复制是对数据库进行实时的监测,随时将数据库的变化复制下来,分发到服务器上。
下面让我们做个实验来测试一下
首先我们需要2台服务器分别作为发布&分发服务器(server1)和订阅服务器(server2
事务发布与快照发布还有不同,事务发布的数据库内的表必须有主键
首先让我们来看下server1里面的数据情况
Server1中有个DB1数据库,在DB1数据库中有一个名为test的表,里面共有5条记录
然后我们在数据库的对象管理器中点击复制,在本地发布上点右键选择新建发布
 
 
然后选择我们要发布的数据库DB1
 
 
 
我们要做的是事务性发布
勾选要发布的表
 
 
 
因为我们要复制的是表的全部内容,所以筛选这一项为空
 
立即创建快照
 
 
 
下面是对代理服务器的安全设置
 
 
我们就用 Server administrator 用户
 
 
 
创建发布
 
 
为此发布取名为 test
 
发布创建成功
 
 
下面我问换到 Server2
看一下
Server2 中又一个 db1 数据库
但是库里面是空的
 
点击复制,右键点击订阅进行新订阅的创建
 
发布服务器选择 server1
我们看到 server2 已经发现了 server1 的发布
我们在 server1 上运行所有代理
 
我们请求订阅的数据库是 db1
 
再次设置分发代理的安全性
 
由于订阅服务器是 server2 自己
所以对订阅服务器安全性不需要设置
 
我们选择连续运行
 
 
立即初始化进行同步
 
开始创建订阅
 
订阅创建成功
 
 
下面我们来看一下 server2 db1 数据库中有没有变化
我们可以看到在表中出现了test表,而且在本地订阅中也生成了对server1的订阅
 
再来看下表中信息
 
可以看到
信息已经同步成功
下面我在 server1 DB1 数据库中的 test 表中插入一条记录
 
我们再切换到 server2 上看一下
 
OK , 实验圆满成功
 
 
 
 
 
注: 1 事务性发布的表中必须要有主见
2 计算机名与 SQL SERVER 中识别的服务器名不一样的情况,次试验也会失败。
可以用此脚本同步计算机名
if  serverproperty('servername')  <>  @@servername  <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

begin  

           declare  @server  sysname  

           set  @server  =  @@servername  

           exec  sp_dropserver  @server  =  @server  

           set  @server  =  cast(serverproperty('servername')  as  sysname)              

           exec  sp_addserver  @server  =  @server  ,  @local  =  'LOCAL'  

end  

 

执行后需要重启 SQL SERVER 核心服务和代理服务