SQL SERVER 2005数据库复制之事务复制
事务复制与快照复制不同,快照复制仅仅是对数据库进行一次扫描,并将其内容复制分发到服务器上,
而事务复制是对数据库进行实时的监测,随时将数据库的变化复制下来,分发到服务器上。
下面让我们做个实验来测试一下
首先我们需要2台服务器分别作为发布&分发服务器(server1)和订阅服务器(server2)
![](https://i-blog.csdnimg.cn/blog_migrate/3198b9c8023dc1e3c9a0a3c984fc2127.gif)
事务发布与快照发布还有不同,事务发布的数据库内的表必须有主键
首先让我们来看下server1里面的数据情况
Server1中有个DB1数据库,在DB1数据库中有一个名为test的表,里面共有5条记录
![](https://i-blog.csdnimg.cn/blog_migrate/2265bf7fae25c3bba3d17502cfece73e.gif)
然后我们在数据库的对象管理器中点击复制,在本地发布上点右键选择新建发布
![](https://i-blog.csdnimg.cn/blog_migrate/40c1ff7dc8f81895301d868177127518.gif)
然后选择我们要发布的数据库DB1
![](https://i-blog.csdnimg.cn/blog_migrate/576b064b781f16a0bdb2e001b844c106.gif)
我们要做的是事务性发布
![](https://i-blog.csdnimg.cn/blog_migrate/a36d4350f7205fd28eba6df3f652f8c2.gif)
勾选要发布的表
![](https://i-blog.csdnimg.cn/blog_migrate/9fc7104ab20bdcac255070b4a6b1b4f1.gif)
因为我们要复制的是表的全部内容,所以筛选这一项为空
![](https://i-blog.csdnimg.cn/blog_migrate/73d610d7586f2fcc015b2426af745c57.gif)
立即创建快照
![](https://i-blog.csdnimg.cn/blog_migrate/5656e1de6ccfdeea7c4b1da56889380f.gif)
下面是对代理服务器的安全设置
![](https://i-blog.csdnimg.cn/blog_migrate/cc17a927c331c1c7aba5c4883112cafe.gif)
我们就用Server的administrator用户
![](https://i-blog.csdnimg.cn/blog_migrate/98ef1a40ddb453402ccad54fa72d0e80.gif)
创建发布
![](https://i-blog.csdnimg.cn/blog_migrate/0f948dd9a6a52e6893e623a86899439b.gif)
为此发布取名为test
![](https://i-blog.csdnimg.cn/blog_migrate/52d30a315429e1de0b39d36e7a80e159.gif)
发布创建成功
![](https://i-blog.csdnimg.cn/blog_migrate/c34f2d54a0bb812d404f228305d8313c.gif)
下面我问换到Server2上
看一下
Server2
中又一个db1数据库
但是库里面是空的
![](https://i-blog.csdnimg.cn/blog_migrate/7b82cb0cd223da598dc30f88f8e855f9.gif)
点击复制,右键点击订阅进行新订阅的创建
![](https://i-blog.csdnimg.cn/blog_migrate/42050ea3a3ee81f2bb61f5c42c2e203a.gif)
发布服务器选择server1
我们看到server2已经发现了server1的发布
![](https://i-blog.csdnimg.cn/blog_migrate/89ca00e06f647f78f4aa906a86342968.gif)
我们在server1上运行所有代理
![](https://i-blog.csdnimg.cn/blog_migrate/a44dd29ca7937d1847713c204295e165.gif)
我们请求订阅的数据库是db1
![](https://i-blog.csdnimg.cn/blog_migrate/7cd326baa55154ea9070645f846ea44e.gif)
再次设置分发代理的安全性
![](https://i-blog.csdnimg.cn/blog_migrate/4ced897f55504672c1d8428fee6f5e21.gif)
由于订阅服务器是server2自己
所以对订阅服务器安全性不需要设置
![](https://i-blog.csdnimg.cn/blog_migrate/3c1f4b7abb4662196355f4882966bf98.gif)
我们选择连续运行
![](https://i-blog.csdnimg.cn/blog_migrate/e1401f2f1eb3301f8e16ea7700b3c6ec.gif)
立即初始化进行同步
![](https://i-blog.csdnimg.cn/blog_migrate/e2950411ada2ab3d86bafdf2a1698b3a.gif)
开始创建订阅
![](https://i-blog.csdnimg.cn/blog_migrate/323bcdfaeab8def61adb84dd0187250e.gif)
订阅创建成功
![](https://i-blog.csdnimg.cn/blog_migrate/94be74ab0978bab9f402d0648d18172d.gif)
下面我们来看一下server2中db1数据库中有没有变化
![](https://i-blog.csdnimg.cn/blog_migrate/583616e8a31dc42129d0488df64c4bdf.gif)
我们可以看到在表中出现了test表,而且在本地订阅中也生成了对server1的订阅
再来看下表中信息
![](https://i-blog.csdnimg.cn/blog_migrate/5fc2aab92f66d25d0d0a721f79aa80d3.gif)
可以看到
信息已经同步成功
下面我在server1的DB1数据库中的test表中插入一条记录
![](https://i-blog.csdnimg.cn/blog_migrate/71d2d37d38c3eef9e291435369deba84.gif)
我们再切换到server2上看一下
![](https://i-blog.csdnimg.cn/blog_migrate/164e8d01c1868508cb25202a2927e24b.gif)
OK ,
实验圆满成功
注:1事务性发布的表中必须要有主见
2
计算机名与SQL SERVER中识别的服务器名不一样的情况,次试验也会失败。
可以用此脚本同步计算机名
if serverproperty('servername') <> @@servername
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核心服务和代理服务