一、 SQL SERVER 2005数据同步模型
1.1 SQL 2005 的数据库复制模型
复制使用出版业术语表示复制拓扑中的组件,其中有发布服务器、分发服务器、订阅服务器、发布、项目和订阅。可借助杂志的概念来帮助理解 Microsoft SQL Server 复制:
?杂志出版商(发布服务器)生产一种或多种刊物(发布)
?刊物(发布)包含文章(项目)
?出版商(发布服务器)可以直接发行(分发)杂志,也可以使用发行商(分发服务器)
?订阅者(订阅服务器)接收订阅的刊物(发布)
虽然杂志术语有助于理解复制,但重要的是要注意到 SQL Server 复制包含有这套术语未予以表述的功能,尤其是订阅服务器进行更新的功能以及发布服务器将增量更改发送到发布中的项目的功能。
“复制拓扑”定义了服务器和数据副本间的关系,并阐明了决定数据如何在服务器之间流动的逻辑。有若干复制进程(称为“代理”)负责在发布服务器和订阅服务器之间复制和移动数据。下图为复制中所涉及的组件和进程的概述。
发布服务器
发布服务器是一种数据库实例,它通过复制向其他位置提供数据。发布服务器可以有一个或多个发布,每个发布定义一组要复制的具有逻辑关系的对象和数据。
分发服务器
分发服务器也是一种数据库实例,它起着存储区的作用,用于复制与一个或多个发布服务器相关联的特定数据。每个发布服务器都与分发服务器上的单个数据库(称作分发数据库)相关联。分发数据库存储复制状态数据和有关发布的元数据,并且在某些情况下为从发布服务器向订阅服务器移动的数据起着排队的作用。在很多情况下,一个数据库服务器实例充当发布服务器和分发服务器两个角色。这称为“本地分发服务器 ”。当发布服务器和分发服务器按各自的数据库服务器实例配置时,把分发服务器称为“远程分发服务器 ”。
订阅服务器
订阅服务器是接收复制数据的数据库实例。一个订阅服务器可以从多个发布服务器和发布接收数据。根据所选复制的类型,订阅服务器还可以将数据更改传递回发布服务器或者将数据重新发布到其他订阅服务器。
项目
项目用于识别发布中包含的数据库对象。一个发布可以包含不同类型的项目,包括表、视图、存储过程和其他对象。当把表作为项目发布时,可以用筛选器限制发送到订阅服务器的数据的列和行。
发布
发布是来自一个数据库的一个或多个项目的集合。将多个项目分组成一个发布使得更便于指定一组作为一个单元复制的、具有逻辑关系的数据库对象和数据。
订阅
订阅是把发布副本传递到订阅服务器的请求。订阅定义将接收的发布和接收的时间、地点。有两种类型的订阅:推送和请求。有关推送订阅和请求订阅的详细信息,
1.2 SQL SERVER 2005 数据库同步的类型
Microsoft SQL Server 2005 提供了下列可在分布式应用程序中使用的复制类型:
事务性复制
事务性复制通常从发布数据库对象和数据的快照开始。创建了初始快照后,接着在发布服务器上所做的数据更改和架构修改通常在修改发生时(几乎实时)便传递给订阅服务器。数据更改将按照其在发布服务器上发生的顺序和事务边界,应用于订阅服务器,因此,在发布内部可以保证事务的一致性。
事务性复制通常用于服务器到服务器环境中,在以下各种情况下适合采用事务性复制:
? 希望发生增量更改时将其传播到订阅服务器。
? 从发布服务器上发生更改,至更改到达订阅服务器,应用程序需要这两者之间的滞后时间较短。
? 应用程序需要访问中间数据状态。例如,如果某一行更改了五次,事务性复制将允许应用程序响应每次更改(例如,激发触发器),而不只是响应该行最终的数据更改。
? 发布服务器有大量的插入、更新和删除活动。
? 发布服务器或订阅服务器不是 SQL Server 数据库(例如,Oracle)。
默认情况下,事务性发布的订阅服务器应视为只读,因为更改将不会传播回发布服务器。但是,事务性复制确实提供了允许在订阅服务器上进行更新的选项。
合并复制
与事务性复制相同,合并复制通常也是从发布数据库对象和数据的快照开始,并且用触发器跟踪在发布服务器和订阅服务器上所做的后续数据更改和架构修改。订阅服务器在连接到网络时将与发布服务器进行同步,并交换自上次同步以来发布服务器和订阅服务器之间发生更改的所有行。
合并复制通常用于服务器到客户端的环境中。合并复制适用于下列各种情况:
? 多个订阅服务器可能会在不同时间更新同一数据,并将其更改传播到发布服务器和其他订阅服务器。
? 订阅服务器需要接收数据,脱机更改数据,并在以后与发布服务器和其他订阅服务器同步更改。
? 每个订阅服务器都需要不同的数据分区。
? 可能会发生冲突,并且在冲突发生时,您需要具有检测和解决冲突的能力。
? 应用程序需要最终的数据更改结果,而不是访问中间数据状态。例如,如果在订阅服务器与发布服务器进行同步之前,订阅服务器上的行更改了五次,则该行在发布服务器上仅更改一次来反映最终数据更改(也就是第五次更改的值)。
合并复制允许不同站点自主工作,并在以后将更新合并成一个统一的结果。由于更新是在多个节点上进行的,同一数据可能由发布服务器和多个订阅服务器进行了更新。因此,在合并更新时可能会产生冲突,合并复制提供了多种处理冲突的方法。
快照复制
当符合以下一个或多个条件时,使用快照复制本身是最合适的:
?很少更改数据。
?在一段时间内允许具有相对发布服务器已过时的数据副本。
?复制少量数据。
?在短期内出现大量更改。
在数据更改量很大,但很少发生时,快照复制是最合适的。例如,如果某销售组织维护一个产品价格列表且这些价格每年要在固定时间进行一两次完全更新,那么建议在数据更改后复制完整的数据快照。对于给定的某些类型的数据,更频繁的快照可能也比较适合。例如,如果一天中在发布服务器上更新相对小的表,但可以接受一定的滞后时间,则可以在夜间以快照形式传递更改。
发布服务器上快照复制的连续开销低于事务性复制的开销,因为不用跟踪增量更改。但是,如果要复制的数据集非常大,那么若要生成和应用快照,将需要使用大量资源。评估是否使用快照复制时,需要考虑整个数据集的大小以及数据的更改频率。
二、 SQL SERVER 2005 数据同步配置方法
2.1 服务器选取
首先需要选定两台服务器,一台来做发布服务器和分发服务,另外一台来做订阅服务器。 Server1 是发布服务器和分发服务器。 Server2 是订阅服务器。
2.2 前置配置和检查
在配置之前,请先检查以下内容。
1. 发布服务器的 1433端口是否开放?在订阅服务器上,点击开始-运行,输入 cmd,然后输入 telnet 发布服务器 IP地址 1433,看看能否连接上?
2. 需要在 Server1和 Server2的 hosts文件里,添加 IP和机器名的映射关系,不然订阅服务器是无法连接到发布服务器上的。
2.3 配置发布服务器
事务的功能在sqlserver中由来已久,这里以sqlserver2008的事务发布功能为例,对发布订阅的方式简要介绍一下操作流程.
这里要说明一下环境:首先我在本地局域网内有两台安装有sqlserver2008的机器(注意:已发布的快照版本无法向老版本数据库兼容,意味着 2008下创建的事务或快照发布,无法被sqlserver2005订阅)。当然这两台机器要放在同一个网段,一方面出现性能和安全性考虑,另一方面是我目前还没有找到跨不同网段的快照应用方案(可行性的那种).
首先,在要发布的数据库上创建一个我们的产品数据库(这里叫做dnt_new),然后在该数据库实例的左侧导航的“复制”--“本地发布”上击右键,然后选择“新建发布”,如下:
这样,系统就会启动‘发布向导’来引导大家,这里我们在欢迎界面下点击"下一步”,然后在当前窗口中选择要发布的数据库,如下:
点击下一步,然后在接下来的窗口中选择“事务发布”,如下图:
然后点击下一步,选择要同步的数据对象(数据表,存储过程,自定义函数等),如下:
然后就是“项目问题窗口”,因为之前已用dbo身份登陆,所以这里只要点击下一步即可,如下图:
这里可以通过“添加”方式来过滤要同步的数据信息,因为要做全表数据同步,所以这里就不做设置了,感兴趣的朋友可以自己研究一下,这里接着点击下一步,如下:
然后在‘代理安全性’窗口中,点击“安全设置”按钮:
在弹出的‘安全设置’子窗口中设置如下信息,并点击‘确定’按钮:
然后点击下一步按钮:
选择“创建发布”复选框,然后点击下一步,这时向导会让您输入“发布名称”,这里命名为“dnt_new_snap”:
点击“完成按钮”,这里系统就开始根据之前收集的信息来创建该发布对象信息了,如下:
到这里,‘创建发布’的工作就完成了。下面介绍一下创建订阅的流程。在另一个机器的sqlserver实例上,打开该实例并使用“复制”—“新建订阅”,如下图:
这时系统就会启动“新建订阅”向导,点击下一步,并在“发布”窗口中的“发布服务器”下拉框中选择“查打发布sqlserver服务器”项,如下:
然后在弹出窗口中选择之前‘创建发布时所使用的数据库实例’并进行验进登陆,这时,发布服务器的信息就会出现在下方的列表框中:
选择之前我们创建的那个发布对象“dnt_new_snap”,接着点击下一步:
在分发代理位置窗口中,选择“在分布服务器上运行所有代理”,然后点击下一步,然后在“订阅服务器”窗口中的订阅数据库列表框中选择一下要同步的订阅数据库名称(可新建):
点击下一步,然后在‘分发代理安全性’窗口中,点击列表框中的‘…’来设置安装性,并做如下设置(注意红框部分):
然后点击“确定”按钮,之后在向导上点击“下一步”按钮,这时系统就会显示“代理计划执行方式”窗口,选择“连续运行”:
点击下一步,在窗口中选择“立即执行”:
完成了这一步,点击下一步按钮,然后就可以创建该订阅对象了,如果一切运行正常,sqlserver就会从‘发布服务器’那边,将之前指定的数据表和存储过程等同步到当前的‘订阅数据库’中了。
这时我们可以在源数据库(发布服务器)上的表中添加或修改指定表数据信息,在等待1-3秒之后,所做的添加和修改就会同步到‘订阅数据库’上的相应表中。看来目的是达到了
注:本文中的两台机器必定是可以使用sqlserver客户端互联(在sqlserver studio中设置'允许远程链接',同时要设置相应的ip地址,以及在配置管理器中开启tcp/ip协议即可)