现在的位置: 首页 > 综合 > 正文

SQL SERVER 数据库复制之事务性复

2013年10月04日 ⁄ 综合 ⁄ 共 1180字 ⁄ 字号 评论关闭
SQL SERVER 2005数据库复制之事务复制

事务复制与快照复制不同,快照复制仅仅是对数据库进行一次扫描,并将其内容复制分发到服务器上,
而事务复制是对数据库进行实时的监测,随时将数据库的变化复制下来,分发到服务器上。
下面让我们做个实验来测试一下
首先我们需要2台服务器分别作为发布&分发服务器(server1)和订阅服务器(server2
事务发布与快照发布还有不同,事务发布的数据库内的表必须有主键
首先让我们来看下server1里面的数据情况
Server1中有个DB1数据库,在DB1数据库中有一个名为test的表,里面共有5条记录
然后我们在数据库的对象管理器中点击复制,在本地发布上点右键选择新建发布

然后选择我们要发布的数据库DB1
我们要做的是事务性发布

勾选要发布的表
因为我们要复制的是表的全部内容,所以筛选这一项为空

立即创建快照

下面是对代理服务器的安全设置

我们就用Serveradministrator用户

创建发布

为此发布取名为test
发布创建成功

下面我问换到Server2
看一下
Server2中又一个db1数据库
但是库里面是空的
点击复制,右键点击订阅进行新订阅的创建

发布服务器选择server1
我们看到server2已经发现了server1的发布

我们在server1上运行所有代理

我们请求订阅的数据库是db1
再次设置分发代理的安全性

由于订阅服务器是server2自己
所以对订阅服务器安全性不需要设置
我们选择连续运行
立即初始化进行同步

开始创建订阅

订阅创建成功

下面我们来看一下server2db1数据库中有没有变化
我们可以看到在表中出现了test表,而且在本地订阅中也生成了对server1的订阅

再来看下表中信息

可以看到
信息已经同步成功
下面我在server1DB1数据库中的test表中插入一条记录
我们再切换到server2上看一下

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核心服务和代理服务

抱歉!评论已关闭.