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

创建一个发布项

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

权限

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

图1

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

图2

新建发布

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

图3

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

图4

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

图5

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

图6

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

图7

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

图8

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

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

图9

图10

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

图11

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

图12

图13

图14

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

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

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

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

图15

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

潜在问题

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

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

复制(5)——事务复制中的发布者(Publisher)的更多相关文章

  1. SQL SERVER 之快照复制,事务复制,合并复制

    一.环境要求及说明 1.快照复制和事务复制是单向的(2005及以后的版本中加入了订阅端可更新的事务复制). 2.合并复制是双向的. 3.快照复制对表结构没有要求. 4.事务复制要求表有主键. 5.合并 ...

  2. SQL Server 复制:事务发布

    一.背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取到 ...

  3. sqlserver 2005 分布式架构 对等事务复制 .

    http://www.cnblogs.com/qanholas/archive/2012/03/22/2412444.html     一.为什么要使用对等事务复制 首先要说明的是使用sqlserve ...

  4. SQL Server ->> 高可用与灾难恢复(HADR)技术之 -- Transaction Replication(事务复制)

    复制类型: 1)事务型复制:通过复制事务日志到订阅点重做的方式,属于增量型复制: 2)合并型复制:通过触发器和元数据表追踪表数据改变,同样属于增量型复制: 3)快照型复制:通过创建数据库快照,并把快照 ...

  5. SQL Server 复制:事务发布(读写分离)

    一.背景 在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在YangJiaLeClub数据库中有表.存储过程.视图.用户定义函数,需要提供给其它程序读取放入缓存,程序需要比较及时的获 ...

  6. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  7. SQL Server 2012复制教程以及复制的几种模式

    简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...

  8. SQL Server复制入门(一)----复制简介

    简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...

  9. SQL Server复制入门(一)----复制简介【转】

    SQL Server复制入门(一)----复制简介 简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是 ...

  10. SQL Server复制入门(一)----复制简介 (转载)

    简介SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护数 ...

随机推荐

  1. Hadoop里的Partitioner

    人们对于Mapreduce程序刚開始时都觉得仅仅须要一个reduce就够了. 毕竟,在你处理数据之前一个reducer已经把数据都分好类了,有谁不喜欢分好类的数据呢. 可是这样我们就忽略了并行计算的优 ...

  2. js实现页面重定位的几种方法

    参考地址:http://www.cnblogs.com/super-d2/archive/2011/10/01/2197004.html js实现页面重定向 在现行的网站应用中URL重定向的应用有很多 ...

  3. js实现的侧边栏展开收缩效果

    原文地址:http://www.softwhy.com/forum.php?mod=viewthread&tid=12246 <!DOCTYPE html> <html> ...

  4. 大话设计模式C++达到-文章12章-外观模式

    一.UML画画 关键词:添加Facade层. 二.概念 外观模式:为子系统中的一组接口提供一个一致的界面.此模式定义了一个高层接口,这个接口使得这一子系统更加easy使用. 三.说明 Q:外观模式在什 ...

  5. CF552E 字符串 表达式求值

    http://codeforces.com/contest/552/problem/E E. Vanya and Brackets time limit per test 1 second memor ...

  6. 【Cocos2d-x 粒子系统】火球用手指飞起来

    程序: 创建球 sp1 = CCSprite::create("ball.png"); sp1->setPosition(ccp(10, visibleSize.height ...

  7. vs2012 它已停止工作 - 解决方案

    最近学习<Windows多媒体编程>本课程, 蛋疼, 学校原来是MFC... 然后安装vs2012.   后来又在几个插件.. 在这个问题. 开业,提示 vs2012 它已停止工作. wa ...

  8. Vb.net/VB 声明API功能父窗口功能

    回想第一次敲房费,他说自己是api函数实现父窗口及其子窗口最小化的功能.现在再次遇到,自己就在思考,能不能继续使用API函数呢?答案当然是Of Course! 事实上细致看两者并没有多大的差别,先看看 ...

  9. dij算法为什么不能处理负权,以及dij算法变种

    对于上面那张图,是可以用dij算法求解出正确答案,但那只是巧合而已. 我们再看看下面这张图. dist[4] 是不会被正确计算的. 因为dij算法认为从队列出来的点,(假设为u)肯定是已经求出最短路的 ...

  10. 23设计模式(3):Abstract Factory模式

    定义:要创建一组相关或依赖对象提供一个接口,而你并不需要指定其具体类别. 类型:创建一个类模型 类图: 抽象工厂模式与工厂方法模式的差别 抽象工厂模式是工厂方法模式的升级版本号,他用来创建一组相关或者 ...