深入浅出SQL Server Replication第一篇:走近Replication(上)

对于很多的SQL Server DBA而言,Replication不是什么新鲜的事物了,也是大家常常说的“复制”,很多的朋友已经在项目中使用。正如其他技术一样:有人可以使用的好,有人会抱怨技术不行。
我们AgileSharp团队也经过了不少高可用的案例, Replication还是非常有价值的。因此,我们整理了很多的资源,我们决定发布一系列的Replication文章,一是为了帮助大家了解Replication,另外也是为以后的讲述高可用做个铺垫。
另外,有关高可用的一些问题,请参看这篇文章 谈谈SQL Server高可用的常见问题

理解出版业刊物发布

提到Replication,说的通俗一点就是:传递数据,同步数据。既然是数据的同步和传递,那么就可以实时的进行,或者隔断时间进行。既然是同步,那么就可能存在多个数据源,而且数据源的位置可以是任意的,或许在同一台服务器上面,或者处于不同的服务器,甚至网络。

为了使得更好的讨论Replication,势必要讨论它涉及到的几个重要的组成部分:Distributor(分发服务器),Publisher(发布服务器),Subscriber(订阅服务器),Publication(发布),Article(项目),Subscriptions(订阅)。为了使得大家更好的明白这些组成部分,首先,我建议大家在头脑中把Replication同步数据的过程和出版社发送刊物给读者结合起来思考。下面我们首先看看三个重要的组件:发布者(Publisher),分发者(Distributor),订阅者(Subscriber)。然后在一一的展开。 如图:

下面我们就借助上面的图和出版社发行刊物的例子来说明Replication。
 
我们首先看看我们最熟悉的发行订阅刊物的例子。
 
整个步骤是这样的:
1.    读者(Subscribers)去出版社(Publisher),要求订阅书刊。
2.    既然有很多的数据,但是读者在出版社中订阅了《AgileSharp技术周刊》杂志(称之为Subscriptions)。
3.    出版社同意读者的要求,并且把这个读者加入到他们的订阅者清单中。
4.    刊物出版了,出版社通知下面的各级的代理商(Distributor)新书出来了。
5.    各级代理商派人去把新书和订阅者的名单拿来。
6.    代理商每次把新书销售都做一个记录,方便之后结算等
7.    代理商然后把新书快递到每个读者手里。
 
再谈Replication组成部分

Replication使用出版业术语表示Replication拓扑中的组件,其中有发布服务器、分发服务器、订阅服务器、发布、项目和订阅:
·杂志出版商(发布服务器)生产一种或多种刊物(发布)
·刊物(发布)包含文章(项目)
·出版商(发布服务器)可以直接发行(分发)杂志,也可以使用发行商(分发服务器)
·订阅者(订阅服务器)接收订阅的刊物(发布)


虽然杂志术语有助于理解Replication,但重要的是要注意到 SQL Server Replication包含有这套术语未予以表述的功能,尤其是订阅服务器进行更新的功能以及发布服务器将增量更改发送到发布中的项目的功能。
Replication拓扑”定义了服务器和数据副本间的关系,并阐明了决定数据如何在服务器之间流动的逻辑。Replication进程(称为“代理”)负责在发布服务器和订阅服务器之间复制和移动数据。

下图为Replication中所涉及的组件和进程的概述。





发布服务器

发布服务器是一种数据库实例,它通过复制向其他位置提供数据。发布服务器可以有一个或多个发布,每个发布定义一组要复制的具有逻辑关系的对象和数据。

分发服务器

分发服务器也是一种数据库实例,它起着存储区的作用,用于复制与一个或多个发布服务器相关联的特定数据。每个发布服务器都与分发服务器中的单个数据库(称作分发数据库)相关联。分发数据库存储复制状态数据和有关发布的元数据,并且在某些情况下为从发布服务器向订阅服务器移动的数据起着排队的作用。在很多情况下,一个数据库服务器实例充当发布服务器和分发服务器两个角色。这称为“本地分发服务器”。
当发布服务器和分发服务器按各自的数据库服务器实例配置时,把分发服务器称为“远程分发服务器”。

订阅服务器

订阅服务器是接收复制数据的数据库实例。订阅服务器可以接收来自多个发布服务器和发布的数据。根据所选的复制类型,订阅服务器还可以将数据更改传递回发布服务器或者将数据重新发布到其他订阅服务器。

项目

项目用于标识发布中包含的数据库对象。一次发布可以包含不同类型的项目,包括表、视图、存储过程和其他对象。当把表作为项目发布时,可以用筛选器限制发送到订阅服务器的数据的列和行。

发布

发布是一个数据库中的一个或多个项目的集合。将多个项目分组成一个发布,使得更便于指定一组作为一个单元复制的、具有逻辑关系的数据库对象和数据。

订阅

订阅是把发布副本传递到订阅服务器的请求。订阅定义将接收的发布和接收的时间、地点。有两种类型的订阅:推送订阅和请求订阅,我们之前的那个出版社的例子就是推送订阅,即,Push。