SQL SERVER 2005数据库复制之事务复制
事务复制与快照复制不同,快照复制仅仅是对数据库进行一次扫描,并将其内容复制分发到服务器上,
而事务复制是对数据库进行实时的监测,随时将数据库的变化复制下来,分发到服务器上。
下面让我们做个实验来测试一下
首先我们需要2台服务器分别作为发布&分发服务器(server1)和订阅服务器(server2)
![](https://s1.51cto.com/attachment/200906/200906101244571989812.gif)
事务发布与快照发布还有不同,事务发布的数据库内的表必须有主键
首先让我们来看下server1里面的数据情况
Server1中有个DB1数据库,在DB1数据库中有一个名为test的表,里面共有5条记录
![](https://s1.51cto.com/attachment/200906/200906101244572039906.gif)
然后我们在数据库的对象管理器中点击复制,在本地发布上点右键选择新建发布
![](https://s1.51cto.com/attachment/200906/200906101244572087437.gif)
然后选择我们要发布的数据库DB1
![](https://s1.51cto.com/attachment/200906/200906101244572122500.gif)
我们要做的是事务性发布
![](https://s1.51cto.com/attachment/200906/200906101244572160531.gif)
勾选要发布的表
![](https://s1.51cto.com/attachment/200906/200906101244572190828.gif)
因为我们要复制的是表的全部内容,所以筛选这一项为空
![](https://s1.51cto.com/attachment/200906/200906101244572215500.gif)
立即创建快照
![](https://s1.51cto.com/attachment/200906/200906101244572234625.gif)
下面是对代理服务器的安全设置
![](https://s1.51cto.com/attachment/200906/200906101244572259578.gif)
我们就用
Server
的
administrator
用户
![](https://s1.51cto.com/attachment/200906/200906101244572289281.gif)
创建发布
![](https://s1.51cto.com/attachment/200906/200906101244572317437.gif)
为此发布取名为
test
![](https://s1.51cto.com/attachment/200906/200906101244572337484.gif)
发布创建成功
![](https://s1.51cto.com/attachment/200906/200906101244572365328.gif)
下面我问换到
Server2
上
看一下
Server2
中又一个
db1
数据库
但是库里面是空的
![](https://s1.51cto.com/attachment/200906/200906101244572387875.gif)
点击复制,右键点击订阅进行新订阅的创建
![](https://s1.51cto.com/attachment/200906/200906101244572432359.gif)
发布服务器选择
server1
我们看到
server2
已经发现了
server1
的发布
![](https://s1.51cto.com/attachment/200906/200906101244572450921.gif)
我们在
server1
上运行所有代理
![](https://s1.51cto.com/attachment/200906/200906101244572512890.gif)
我们请求订阅的数据库是
db1
![](https://s1.51cto.com/attachment/200906/200906101244572536312.gif)
再次设置分发代理的安全性
![](https://s1.51cto.com/attachment/200906/200906101244572556812.gif)
由于订阅服务器是
server2
自己
所以对订阅服务器安全性不需要设置
![](https://s1.51cto.com/attachment/200906/200906101244572576718.gif)
我们选择连续运行
![](https://s1.51cto.com/attachment/200906/200906101244572600421.gif)
立即初始化进行同步
![](https://s1.51cto.com/attachment/200906/200906101244572677125.gif)
开始创建订阅
![](https://s1.51cto.com/attachment/200906/200906101244572697140.gif)
订阅创建成功
![](https://s1.51cto.com/attachment/200906/200906101244572716843.gif)
下面我们来看一下
server2
中
db1
数据库中有没有变化
![](https://s1.51cto.com/attachment/200906/200906101244572803265.gif)
我们可以看到在表中出现了test表,而且在本地订阅中也生成了对server1的订阅
再来看下表中信息
![](https://s1.51cto.com/attachment/200906/200906101244572821203.gif)
可以看到
信息已经同步成功
下面我在
server1
的
DB1
数据库中的
test
表中插入一条记录
![](https://s1.51cto.com/attachment/200906/200906101244572872406.gif)
我们再切换到
server2
上看一下
![](https://s1.51cto.com/attachment/200906/200906101244572895953.gif)
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
核心服务和代理服务
转载于:https://blog.51cto.com/xiaosi/164892