复制(5)——事务复制中的发布者(Publisher)

  发布者是所有被复制(replicated)的数据的集合。每个发布者可以有多个发布(publication),每个发布项包含多个项目(articles),但是这些发布必须处于一个单一的数据库中,而每个项目又包含一个数据库对象的全部或者一部分。一个对象可以存在多个发布项中。下面是一个简单的示意图:

复制(5)——事务复制中的发布者(Publisher)_第1张图片

创建一个发布项

  在创建发布项前,必须让发布者(Publisher)有一个对应的分发者(Distributor),分发者可以是与发布者同一个服务器,也可以想复制(6)中提到的分开独立的服务器。

 

权限

  拥有数据库层次的db_owner的权限的成员均可定义该数据库的发布项。但是需要服务器层次上sysadmin角色成员才能启用发布功能,如果你是sysadmin角色的成员,并且想启用发布功能,可以选择图1中的选项:

复制(5)——事务复制中的发布者(Publisher)_第2张图片

图1

  打开之后,选择【发布数据库】,如图2,勾选需要启用发布功能的数据库,这里第一个【所有可复制的数据库】 ,只要有一个数据库被选中,就会变成灰色,直到全部数据库选中,才会变成高亮的勾。注意图2中最下面的红框,也说明了只有在管理员启用了发布功能之后数据库所有者才能创建发布。我们这里把示例数据库启用发布。

复制(5)——事务复制中的发布者(Publisher)_第3张图片

图2

新建发布

  步骤1:一旦有一个分发者可用于发布,并且数据库已经启用发布功能,就可以新建发布,选择图3中的选项:

复制(5)——事务复制中的发布者(Publisher)_第4张图片

图3

  步骤2:然后选择对应的发布数据库,如图4:

复制(5)——事务复制中的发布者(Publisher)_第5张图片

图4

  步骤3:选择发布类型,如图5,这里选择第二个【事务复制】,发布类型会在其他文中详细介绍,注意第三个选项,实际上叫【对等复制】,是一个高级选项,允许订阅者发生修改后把修改同步到发布者:

复制(5)——事务复制中的发布者(Publisher)_第6张图片

图5

  步骤4:选择项目,在选择了发布类型之后,就要选择数据库中的项目(article),项目是基于发布数据库中的一个单独对象或者这个对象的部分,完整的对象列表可以看图6:

复制(5)——事务复制中的发布者(Publisher)_第7张图片

图6

  步骤5:除了表之外,其他对象都是整个对象发布,而表,可以选择某些列,但是这些列必须包含主键,即使你没选,SQLServer也会自动帮你选项,如图7:

复制(5)——事务复制中的发布者(Publisher)_第8张图片

图7

  步骤6:项目属性(Article Properties):我们可以选择一个表来看看属性,如图8:

复制(5)——事务复制中的发布者(Publisher)_第9张图片

图8

  上面有很多选项,如果读者需要深入研究复制,应该浏览一下这些选项,可能这里就会有一些高级选项用于解决你工作中的问题。不过这部分可以在创建后修改,但是需要重新初始化。所以最好预先规划好。

  步骤7:筛选表数据,如图9、图10,这部分可以定义一些条件,筛选表中的数据,比如不发布历史数据,就可以根据条件来过滤掉。比如本例中选择对Address表ModifiedDate大于当天的数据才发布:

复制(5)——事务复制中的发布者(Publisher)_第10张图片

图9

复制(5)——事务复制中的发布者(Publisher)_第11张图片

图10

  快照引擎,如图11,你可以选择马上创建快照并保持快照直到订阅初始化,也可以选择按计划运行快照引擎,也能完全不选。对于很大的表,建议选择指定时间运行快照引擎,以免影响业务,作为实践经验,这里完全可以不选任何选项,直接下一步:

复制(5)——事务复制中的发布者(Publisher)_第12张图片

图11

  步骤8:安全性,这里设置运行快照引擎和日志读取器引擎的帐号,对于快照引擎(图13),可以使用一个windows登录或者使用一个SQLServer Agent 服务帐号,对于生成环境,建议使用一个windows帐号,而不选用SQLServer Agent帐号,正如上面的提示(不建议使用),对于快照引擎中的第二个选项【连接到发布服务器】,可以使用windows身份验证或者SQL身份验证连接。对于日志读取器引擎(图14),可以选择与快照引擎相同的设置。

复制(5)——事务复制中的发布者(Publisher)_第13张图片

图12

复制(5)——事务复制中的发布者(Publisher)_第14张图片

图13

复制(5)——事务复制中的发布者(Publisher)_第15张图片

图14

  需要注意的是,每个发布都有对应的快照引擎,但是每个发布数据库,只有一个日志读取器引擎。如果已经定义了一个发布,将不能在这一步更改帐号,正如图14上部分,已经灰掉,因为本机上已经有一个发布。但是连接到发布者的部分是可以选的。

快照引擎负责把数据从发布数据库移到分发数据库的快照文件夹,为了实现这种功能,快照引擎的帐号必须是分发库和发布库的db_owner角色,并且有写快照文件夹的权限。

日志读取器引擎也会把数据从发布数据库复制到分发库,但是不需要使用快照文件夹,所以这个引擎的帐号同样必须是分发库和发布库的db_owner角色,但是不需要对快照文件夹有权限。

  步骤9:完成复制,这一步填写发布名称即可:

复制(5)——事务复制中的发布者(Publisher)_第16张图片

图15

至此,第二个发布演示已经完成,第一个发布例子在复制(2)一文。

潜在问题

  在发布过程中,会有很多步骤和很多需要选择的细节,所以配置复制是很复杂的一个过程,最常见的问题就是帐号权限问题,并且很多时候错误提示并不准确或者直接,比如“远程服务器XXX不存在,或者没有被指定为一个可用的发布者”(The remote server "xxxx" does not exists, or has not been designated as a valid Publisher... ),这个错误意味着快照引擎不能访问分发数据库,对于常见的错误信息,将在本系列的最后一篇文章中总结。

  另外,发布者所在的快照文件夹,需要共享给快照引擎,并有写的权限。如果使用windows身份验证或者域账号,也需要对这些帐号授权。

你可能感兴趣的:(事务)