纸上得来终觉浅,绝知此事要躬行。搞技术尤其如此,看别人配置SQL SERVER的复制,发布-订阅、镜像、日志传送者方面的文章,感觉挺简单,好像轻轻松松的,但是当你自己去实践的时候,你会发现还真不是那么一回事,毕竟环境不同、数据库版本或经验关系,你实践的时候会或多或少碰到一些问题,有可能人家是多次实践后,绕开了那些“坑”,毕竟写文章是事后总结,人家台上一分钟,台下十年功。闲话不扯了,进入正题,本文虽然简单,但是趁现在有时间,也记录一下前几天配置Replication的发布订阅。
环境:发布服务器A:Windows Server 2008 R2 Standard, SQL SERVER 2008 R2, 订阅服务器B:Windows Server 2003 R2 Standard X64 Edition Service Pack2, SQL SERVER 2008 R2 Standard
开始前,你必须确保实例已经安装了Replication Componets,否则会报错,详情请见MS SQL 2008 发布订阅配置遇到的错误,在服务器A上,打开SSMS,右键单击Local Publication(本地发布),选择New Publication(新建发布)
(图1)
然后就进入新建发布的向导了,如果第一次新建发布,有可能出现下面图2、图3,否则不会遇到这些界面
(图2)
不建议将快照文件夹放在C盘,最好设置在其它非系统磁盘。如果下面你不用UNC路径并且共享改目录,必须设置可读权限,否则后面你可能会碰到一个让你棘手的错误,具体参见MS SQL 2008 发布订阅配置错误总结
(图3)
选择你要发布的数据库,这里只能单选,不能选择多个数据库。
(图4)
接下来,关于选择发布类型,根据你的实际情况,选择合适的发布类型
快照复制:快照复制将数据以特定时刻的瞬时状态分发,而不监视对数据的更新。发生同步时,将生成完整的快照并将其发送到订阅服务器。 当符合以下一个或多个条件时,使用快照复制本身是最合适的:
1: 很少更改数据。
2: 在一段时间内允许具有相对发布服务器已过时的数据副本。
3: 复制少量数据。
4: 在短期内出现大量更改。
事务复制:事务复制通常用于服务器到服务器环境中, 在以下各种情况下适合采用事务复制:
1: 希望发生增量更改时将其传播到订阅服务器。
2: 从发布服务器上发生更改,至更改到达订阅服务器,应用程序需要这两者之间的滞后时间较短。
3: 应用程序需要访问中间数据状态。 例如,如果某一行更改了五次,事务复制将允许应用程序响应每次更改(例如,激发触发器),而不只是响应该行最终的数据更改。
4:发布服务器有大量的插入、更新和删除活动。
5:发布服务器或订阅服务器不是 SQL Server 数据库(例如,Oracle)。
具有可更新订阅的事务发布:
事务复制支持在订阅服务器中通过可更新订阅和对等复制来进行更新。下面介绍两种可更新订阅:
-
立即更新。必须连接发布服务器和订阅服务器才能在订阅服务器中更新数据。
-
排队更新。不必连接发布服务器和订阅服务器即可在订阅服务器中更新数据。可以在订阅服务器或发布服务器脱机时进行更新。
在订阅服务器中更新数据时,首先将数据传播到发布服务器,然后再传播到其他订阅服务器。如果使用立即更新,将使用两阶段提交协议立即传播更改。如果使用排队更新,更改将存储在队列中;当网络连接可用时,再在发布服务器中异步应用排队事务。由于更新异步传播至发布服务器,所以发布服务器或另一台订阅服务器有可能更新同一数据,而在应用更新时会发生冲突。将根据创建发布时设置的冲突解决策略检测和解决冲突。
如果在新建发布向导中创建具有可更新订阅的事务发布,将同时启用立即更新和排队更新。如果使用存储过程创建发布,则可以启用一个或两个选项。创建发布的订阅时,可以指定要使用的更新模式。如有必要,以后可以在两种更新模式之间切换。有关详细信息,请参阅下面的“在更新模式之间切换”部分
合并复制:并复制通常用于服务器到客户端的环境中。合并复制适用于下列各种情况:
1:多个订阅服务器可能会在不同时间更新同一数据,并将其更改传播到发布服务器和其他订阅服务器。
2:订阅服务器需要接收数据,脱机更改数据,并在以后与发布服务器和其他订阅服务器同步更改。
3:每个订阅服务器都需要不同的数据分区。
4:可能会发生冲突,并且在冲突发生时,您需要具有检测和解决冲突的能力。
5:应用程序需要最终的数据更改结果,而不是访问中间数据状态。 例如,如果在订阅服务器与发布服务器进行同步之前,订阅服务器上的行更改了五次,则该行在发布服务器上仅更改一次来反映最终数据更改(也就是第五次更改的值)。
(图5)
(图6)
其中被打上红圈叉叉的表,表示没有Primary Key的表是没法发布,关于Article Properties,主要是设置过滤表数据的
(图7)
(图8)
(图9)
(图10)
第二个生成创建发布的脚本选项,不是必须的,如果你想研究,也可以选择
(图11)
(图12)
在发布名称(Publication name)的选项里面输入你想命名的名称,然后点击Finish,那么OK了
(图13)
(图14)
接下来,登录订阅服务器B,打开SSMS管理器,右键单击Local Subscriptions(本地订阅),选择新建订阅
(图15)
(图16)
(图17)
(图18)
(图19)
(图20)
(图21)
(图22)
(图23)
(图24)
(图25)
接下来,你就可以测试数据是否同步,相关作业是否报错,检查具体原因,如果出现错误,建议大家看看这篇文件,囊括了大部分你可能会遇到的错误:javascript:void(0), 我的这篇文章MS SQL 2008 发布订阅配置遇到的错误也打算不断整理收集复制发布订阅中碰到的问题.
参考资料: