【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表

原创 2013年12月01日 20:54:21

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


一、使用场景

数据发布和订阅,就是sql server的数据库复制技术,用于同步数据。我觉得使用情况主要有2种:

1、适合于数据分散在不同的地区的情况。
比如,总公司,还有分公司,可能在北京,上海,广州,等地区,那么每个地区都有地区数据库,都会有销售数据,那么通过对每个分公司的数据库进行发布,然后总公司进行订阅,那么数据就从分公司复制到总公司,也就是发布端复制到了订阅端。

2、如果数据库很大,压力很大,读写很频繁,那么为了分担单个数据库服务器的压力,可以通过数据库复制技术,来实现读写分离。
可以从一个数据库,把数据复制到多台服务器上,主数据库用于写,而其他几台服务器用于读取数据,减轻主数据库的压力。


3、总结一下:
一个是用于分布式数据的情况。
一个是数据库的高可用性,不仅能通过读写分离,提高性能,减轻压力,同时还能起到数据库备份的作用。


因为太大的数据库,要再备份,估计需要花很长的时间,所以通过数据库复制,也保证了数据的安全。



二、发布类型

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

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

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


总结一下:

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



三、实验环境

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

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


那么,如果不是虚拟机,能否配置成功呢?

我也尝试过在两台笔记本之间,也做了事务复制,配置与上面的类似,也同步成功了。

需要注意的是在配置完成订阅端成功后,发现在复制目录下面本地订阅目录下,没有出现订阅,这个多刷新几次就好了。

还有就是数据库引擎服务和代理服务,都是通过Local System帐号来启动的,不一定需要Administrator帐号。


需要特别说明的是这个数据库复制,并不是实时的,最短复制间隔为10秒,所以不能完全满足高安全性的要求,也就是当出现故障时,会有少量数据没有复制到订阅端。



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

--在笔记本上
create database wc
go

use wc
go

create table A
(
id int primary key,
v varchar(100)
)


--在虚拟机上
create database wc
go

use wc
go

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


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


首先是设置发布:

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



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



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



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



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

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



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



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



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



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



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



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



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



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



11、代理安全性:



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


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



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




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


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



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



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



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





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



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



6、设置分发代理安全性

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



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



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



9、创建订阅成功



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

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

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

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



如果不需要再进行数据库的复制,那么只需要直接在发布端进行删除就可以,主要就是删除复制目录-》本地发布-》发布的项目删除,然后,右键“复制”,选择“禁用本地发布”,就可以删除分发数据库distribution,会自动删除订阅端,不需要在订阅端进行删除。



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Sql Server 2005/2008中把一个数据库中的表完整复制到另一个数据库!(已解决)

Sql Server 2005/2008中把一个数据库中的表完整复制到另一个数据库!(已解决) 1.将数据库【oa】中的表[OA_Email],复制到数据库【Q】,需要进行第一步: 右击—>...
  • dxnn520
  • dxnn520
  • 2013年11月22日 09:26
  • 17753

SQL Server 复制表及数据的两种方法

1、新表不存在(即复制数据的同时创建与旧表相同结构的新表): select [col1,col2,col3...] into new_table from old_table where 1=1...

MySQL快速复制数据库的方法

某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。 假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。...
  • ssyan
  • ssyan
  • 2013年07月10日 16:04
  • 49300

MySQL数据库迁移(直接复制文件)

原地址:http://www.cnblogs.com/advocate/archive/2013/11/19/3431606.html MySQL数据库迁移(数据文件直接迁移) 在今年10...

数据库复制详解

一、需求         为了解决数据同步,我们经常使用各种各样的导入导出程序,过程繁琐,下面将介绍数据库复制实现数据库同步,SqlServer数据库同步是项目中常用到的环节,若一个项目中的数据同时...

SQL Server 2008 数据库同步的两种方式(SQL JOB)

sql Job的方式同步数据库就是通过SQL语句,将一个数据源中的数据同步到目标数据库中。特点是它可以灵活的通过SQL的方式进 行数据库之间的同步操作。可以在制定的时间时间作为任务计划自动执行。缺点是...
  • xgf415
  • xgf415
  • 2016年07月25日 17:15
  • 2897

复制A表指定字段的内容到B表的几种情况

A表字段:id(自动递增),name,pwd,noteB表字段:id(自动递增),name,pwd,note(1)将A表id为1的记录的name,pwd,note字段内容插入B表的name,pwd,n...

单片机——我的第一个程序

流水灯的实现 一、硬件 开发板的焊接过程 说明书 工具 完成,烧录程序 成品 二、辅助软件介绍 Proteus(画电路图) 流水灯 ...

VB6基本数据库应用(四):数据的提取,新增和修改

列的第四篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9474661。本章内容继承前面的内容,讲述的是打开表之后的数据的提取,新建和...

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

经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使用链接服务器+触发器,来实现数据同步,但当要同步的数据表比较多,那么可以考虑用数据库复制技术,来实现数据的同步。 不同的发...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表
举报原因:
原因补充:

(最多只允许输入30个字)