SQL SERVER将复制方式分为三大类,每一个发布只能有一种复制类型,分别为:快照复制,事务复制和合并复制,如下图。
快照复制
快照复制将发布的数据库所有表的某个瞬间数据做成一个镜像,然后一次性复制到订阅服务器。中间的更新不会像其它复制类型那样自动传送到订阅服务器。由此可以看出选择快照复制的的合格环境是:
1、用户允许订阅服务器使用相对己过时的数据副本并且需要复制的整体数据量较小。
2、数据库在短期内出现了大量更改并且需要复制的整体数据量较小。
事务复制
快照复制每次同步的是整个订阅的内容。如果发布包括非常大的表,那么势必每次同步都需要生成很大的快照文件夹并将这些快照文件夹逐一导入要订阅数据库中,因此同步时间和同步间隔都会很长。事务复制能够有效地解决快照复制的这些缺陷。实现快速的数据同步。
事务复制在第一次设置好事务复制后,发布的表、存储过程等都会被镜像,之后每次对于发布服务器所做的更改都会以日志的方式传送到订阅服务器。使得发布服务器和订阅服务器几乎可以保持同步(具体的工作方式将在下面继续说明)。因此,可以看出事务复制的特点是:
1、发布服务器和订阅服务器内容基本可以同步
2、发布服务器,分发服务器,订阅服务器之间的网络连接要保持畅通
3、订阅服务器也可以设置成请求订阅,使得订阅服务器也可以不用一直和分发服务器保持连接
4、适用于要求实时性的环境
合并复制:
合并复制即允许发布服务器更新数据库,也允许订阅服务器更新数据。定期将这些更新进行合并,使得发布的数据在所有的节点上保持一致。因此,有可能发布服务器和订阅服务器更新了同样的数据,当冲突产生时,并不是完全按照发布服务器优先来处理冲突,而是根据设置进行处理。
由上面可以看出SQL SERVRE复制架构包含发布服务器、分发服务器、订阅服务器3种服务器角色。配置SQL SERVER复制时,需要在发布服务器上标识需要发布的项目(数据库对象,这些对象构成一个或者多个发布),然后在订阅发布服务器上发布。当完成上述配置后,复制代理负责读取发布器上发布对象的变更(根据发布对象的不同和配置的差异,变更可能是数据的变化情况将发布的变化传送每个订阅服务器上。根据配置发布时所选择的复制类型,上述过程会略有差异)
在实际的配置中,我们需要根据具体的需求选择合适的复制类型。下面是复制的模型,会讲一些复制的基本术语,避免在配置的时候不知所云。
复制的模型
----
项目:项目是SQL SERVER数据库中的对象,它可以是表、视图、存储过程、自定义函数和其他对象。如果项目是一个表,你可以通过添加筛选条件来过滤掉表中的某些行和列。
发布:发布是项目的一个或多个项目的集合。一次发布可以包括不同类型的项目。通常我们将逻辑上相关联的数据库对象(比如外键和被外键关联的两个表)组合在一起形成一个发面,这样可以确保被复制的内容在逻辑上一致。
发布服务器:发布服务器是一个数据库实例,上面配了一个或多个发布。这些发布中的对象和数据通过复制发送给其它的服务器或客户端。
分发服务器:也是一个数据库实例,它服务于一个或多个发布服务器。每个发布服务器都对应分发服务器中的一个数据库,这种关联的数据库被称为分发数据库。分发数据库上保存着状态信息以及每个发布的元数据。从发布服务器发信订阅者的数据会在分发服务器上排除,依次发送出去。
订阅:订阅就是将发布从分发服务器发送到订阅服务器上,根据数据发送的方式,订阅有两种类型:推送订阅和请求订阅。
1) 推送订阅(PUSH):发布服务器或分发服务器(取决于所使用的复制类型)主动将数据更改发送到订阅服务器,而无须订阅服务器发布请求。你有三种选择来决定何时把发布推送到订阅服务器上:手动发送、连续发送、按计划时间定期发送。
2) 请求订阅(PULL):订阅服务器主动请求去获得发布服务器上所做的更改。这种模式下,接收发布的时间是由订阅服务器来确定的。
订阅服务器:订阅服务器是接收复制数据的数据库实例。订阅服务器可以接收来自多个发布服务器的数据。根据所选的复制类型,用户可以在订阅服务器上对复制过来的数据做修改,然后将修改发送回发布服务器或者将数据重新发布到其它订阅服务器上。订阅服务器不一定是SQL SERVER,ORAQCLE 和IBM也可以使用摄像头订阅方式来订阅‘快照’和‘事务发布’。