SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表

点击打开链接

经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使用链接服务器+触发器,来实现数据同步,但当要同步的数据表比较多,那么可以考虑用数据库复制技术,来实现数据的同步。


不同的发布类型,会有不同的效果,适用于不同的场景,特别是下面的2种发布类型,需要特别注意:

快照发布:
发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照。也就是间隔时间一到,2000把数据的快照,也就是所有数据,都发生到订阅端,一般适合同步间隔时间比较长的,比如1周才同步一次。

事务发布:
在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。
也就是,设置好后,第一次会进行初始化,然后以后每次同步的时候,只是把修改的数据,比如insert、update、delete,同步到订阅端,一般适合对同步时间要求比较严格的情况,间隔时间可能就10秒,或者几分钟。


总结一下:

快照复制,每次都是复制所有的数据,所以如果数据量大,那么往往复制的时间会很长。
而事务复制,每次只复制变化的部分,所以速度较快。


下面的环境是这样的:

一台是笔记本,机器名:ggg-pc,实例名:MSSQLSERVER

另一台是安装的虚拟机,机器名:DTSCIOW1G2GJOED,实例名:MSSQLSERVER。


一、首先,分别在两个实例中分别运行下面的代码,来创建数据库:

    --在笔记本上  
    create database wc  
    go  
      
    use wc  
    go  
      
    create table A  
    (  
    id int primary key,  
    v varchar(100)  
    )  

    --在虚拟机上  
    create database wc  
    go  
      
    create table B  
    (  
    id int primary key,  
    v varchar(100),  
    vv varchar(100)   --注意:这里比A表多了一列  
    )  
    go  

二、然后,接下来就是要配置同步与订阅,来实现把A表的2列,同步到B表的2列中:


首先是设置发布:

1、展开“复制”目录,选择“本地发布”,右键,选择“新建发布”

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第1张图片


2、弹出新建发布向导,单击下一步

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第2张图片


3、选择:把ggg-pc作为自己的分发服务器,单击下一步

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第3张图片


4、选择:是,将SQL Server的代理服务器配置为自动启动

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第4张图片


5、选择:快照文件夹,默认是

C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\ReplData

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第5张图片


6、选择:要发布的数据库,这里选wc

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第6张图片


7、选择:发布类型,这里选择“事务发布”

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第7张图片


8、选择要发布的表A,以及要发布的列:id和v

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第8张图片


然后,点一下A表,点击右边的“项目属性”按钮,在弹出的菜单中选择“设置突出显示的 表的项目属性”,弹出“项目属性”对话框:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第9张图片


然后,往下拉,找“目标对象”,由于需要同步到的不是A表,而是已存在的B表,所以把“目标对象名称”改为“B”,同时把“名称已被使用时的操作”改为“现有对象保持不变”:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第10张图片


9、在筛选表行中,你可以设置只同步满足条件的记录,而不是所有的记录:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第11张图片


10、设置快照代理,在两个复选框上都打上勾,也就是立即启动快照、计划快照代理:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第12张图片


然后,单击右边的”更改“按钮,设置同步的时间间隔为 10秒:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第13张图片


11、代理安全性:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第14张图片


然后,单击 安全设置 ,弹出 快照代理安全性 对话框,选择 在SQL Server代理账户下运行,在“连接到订阅服务器”中,选择“使用以下SQL Server登录名”,输入:sa和密码。


12、如果你希望生成脚本,也可以勾选”生成包含创建发布的脚本文件“

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第15张图片


13、输入发布名称:wc_publisher,然后下一步,点击完成,就发布成功了。

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第16张图片



接下来,是设置订阅,这个是在虚拟机上设置的:


1、展开“复制”,右键“本地订阅”,选择“新建订阅”:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第17张图片


2、弹出新建订阅对话框,单击下一步:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第18张图片


3、在发布服务器下拉框中,选择“查找SQL Server发布服务器”:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第19张图片


然后,选择ggg-pc服务器,然后输入连接到ggg-pc的用户名和密码:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第20张图片


SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第21张图片


4、分发代理位置, 选择“在分发服务器ggg-pc上运行所有代理”:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第22张图片


5、选择:订阅服务器和订阅数据库:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第23张图片


6、设置分发代理安全性

点击按钮,在弹出的对话框中设置:“在SQL Server代理账户下运行”,在连接到订阅服务器上,选择“通过以下SQL Server登录名”,并输入连接到订阅服务器的:用户名和密码

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第24张图片


7、同步计划,点击下一步

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第25张图片


8、初始化订阅,单击下一步,最后点击完成

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第26张图片


9、创建订阅成功

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第27张图片


三、最后,验证一下数据是否同步

我们在ggg-pc的wc数据库的A表中插入数据:

    --插入数据  
    insert into a  
    values(1,'aaa')  

然后,到虚拟机的wc数据库中,查询B表的数据:

SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表_第28张图片



你可能感兴趣的:(数据库)