MS SQL Server 2008发布与订阅
本文转载:http://chaoyouzhuo.blog.163.com/blog/static/126376001201173092514498/
参考文章:http://www.cnblogs.com/gbmf/archive/2009/06/04/1496013.html
如果选择的是“快照发布”:则必须在发布服务器需要设置代理时间计划,订阅服务器可以不用设置代理时间计划。
如果选择的是“事务发布”;则发布服务器和订阅服务器不需要设置代理时间计划,这样几乎可以实现两台数据库服务器的数据实时同步。
订阅服务器有两种方式。一种是推式订阅,一种是拉式订阅(发布服务器上的快照路径必须是UNC路径共享路径,且订阅服务器的快照路径一样)。
(我做了一下,在配置订阅的时候,配置为事务订阅(发布服务器中对应的表必须有主键),延迟为2、3秒,而配置为快照订阅(立刻执行),则只同步一次,后来发布服务器上的数据更新没有在订阅服务器上有对应的更新;配置为快照订阅(自定义执行,每天的0:00:00执行),则每天更新一次。我都是采用推送订阅方式的。)
1 名词解释<
xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office"
/>
ü 发布服务器
发布服务器是一种数据库实例,它通过复制向其他位置提供数据。发布服务器可以有一个或多个发布,每个发布定义一组要复制的具有逻辑关系的对象和数据。
ü 分发服务器
分发服务器也是一种数据库实例,它起着存储区的作用,用于复制与一个或多个发布服务器相关联的特定数据。 每个发布服务器都与分发服务器中的单个数据库(称作分发数据库)相关联。 分发数据库存储复制状态数据和有关发布的元数据,并且在某些情况下为从发布服务器向订阅服务器移动的数据起着排队的作用。 在很多情况下,一个数据库服务器实例充当发布服务器和分发服务器两个角色。 这称为“本地分发服务器”。 当发布服务器和分发服务器按各自的数据库服务器实例配置时,把分发服务器称为“远程分发服务器”。
ü 订阅服务器
订阅服务器是接收复制数据的数据库实例。 订阅服务器可以接收来自多个发布服务器和发布的数据。 根据所选的复制类型,订阅服务器还可以将数据更改传递回发布服务器或者将数据重新发布到其他订阅服务器。
ü 项目
项目用于标识发布中包含的数据库对象。 一次发布可以包含不同类型的项目,包括表、视图、存储过程和其他对象。 当把表作为项目发布时,可以用筛选器限制发送到订阅服务器的数据的列和行。
ü 发布
发布是一个数据库中的一个或多个项目的集合。 将多个项目分组成一个发布,使得更便于指定一组作为一个单元复制的、具有逻辑关系的数据库对象和数据。
ü 订阅
订阅是把发布副本传递到订阅服务器的请求。 订阅定义将接收的发布和接收的时间、地点。 有两种类型的订阅:推送订阅和请求订阅。 有关推送订阅和请求订阅的详细信息,请参阅订阅发布。
2 配置分发和发布
若要创建发布,请提供下列信息:
· 分发服务器。
· 快照文件的位置。
· 发布数据库。
· 要创建的发布的类型(快照发布、事务发布、具有可更新订阅的事务发布或合并发布)。
· 包含在发布中的数据和数据库对象(项目)。
· 用于所有发布类型的静态行筛选器和列筛选器,以及用于合并发布的参数化行筛选器和联接筛选器。
· 快照代理计划。
· 运行下列代理时使用的帐户:所有发布的快照代理;所有事务发布的日志读取器代理;允许更新订阅的事务发布的队列读取器代理。
· 发布的名称和说明。
2.1 配置分发
1. 在 Microsoft SQL Server Management Studio 中,连接到将要作为分发服务器的服务器(许多情况下,发布服务器和分发服务器是同一服务器),然后展开服务器节点。
注意: 如果在安装完SQL Server 2008后修改过计算机名,则可能会连不上服务器,可用select@@servername和selectserverproperty('servername')进行验证。
2. 右键单击“复制”文件夹,然后单击“配置分发”。
3. 随着配置分发向导执行下列操作:
· 选择分发服务器。
? 若要使用本地分发服务器,请选择:“‘<服务器名称>’将充当自己的分发服务器;SQL Server 将创建分发数据库和日志”。
? 若要使用远程分发服务器,请选择“使用以下服务器作为分发服务器”,然后选择一个服务器。
注意:必须已将该服务器配置为分发服务器,且使发布服务器能够使用此分发服务器。就是在创建该分发服务器时将本服务器添加到该分发服务器的发布服务器中。可以通过:在配置分发向导中启用发布服务器 和 在“分发服务器属性”对话框中启用发布服务器 两种分发实现。
如果选择远程分发服务器,则必须在“管理密码”页上输入从发布服务器连接到分发服务器的密码。 此密码必须与在远程分发服务器上启用发布服务器时所指定的密码相匹配。
· 指定根快照文件夹(适用于本地分发服务器)。 快照文件夹只是指定共享的目录。对此文件夹执行读写操作的代理必须对其具有足够的访问权限。 每个使用此分发服务器的发布服务器都在根文件夹下创建一个文件夹,而每个发布则在发布服务器文件夹下创建用于存储快照文件的文件夹。
· 指定分发数据库(适用于本地分发服务器)。 分发数据库存储了事务复制的所有复制和事务类型的元数据和历史记录数据。
· 还可以让其他发布服务器使用该分发服务器(可选)。 如果其他发布服务器能够使用分发服务器,则必须在“分发服务器密码”页上输入从这些发布服务器连接到分发服务器的密码。
2.2 创建发布和项目
1. 在 Microsoft SQL Server Management Studio 中连接到发布服务器,然后展开服务器节点。
2. 展开“复制”文件夹,再右键单击“本地发布”文件夹。
3. 单击“新建发布”。
4. 按照新建发布向导中的页完成以下任务:
· 如果尚未在服务器上配置分发,请指定分发服务器。具体方法见【2.1配置分发】
如果在“分发服务器”页上指定将发布服务器用作其自己的分发服务器(本地分发服务器),而未将服务器配置为分发服务器,则新建发布向导将配置该服务器。 在“快照文件夹”页中指定分发服务器的快照文件夹。 快照文件夹只是指定为共享的一个目录。对此文件夹中执行读写操作的代理必须对其具有足够的权限才能访问它。
如果指定另一台服务器作为分发服务器,则必须在“管理密码”页上输入密码来连接发布服务器和分发服务器。 此密码必须与在远程分发服务器上启用发布服务器时所指定的密码一致。
· 选择发布数据库。
· 选择发布类型。
ü 快照复制:快照复制将数据以特定时刻的瞬时状态分发,而不监视对数据的更新。发生同步
时,将生成完整的快照并将其发送到订阅服务器。
当符合以下一个或多个条件时,使用快照复制本身是最合适的:
? 很少更改数据。
? 在一段时间内允许具有相对发布服务器已过时的数据副本。
? 复制少量数据。
? 在短期内出现大量更改。
ü 事务复制:事务复制通常用于服务器到服务器环境中,
在以下各种情况下适合采用事务复制:
? 希望发生增量更改时将其传播到订阅服务器。
? 从发布服务器上发生更改,至更改到达订阅服务器,应用程序需要这两者之间的滞后时间较短。
? 应用程序需要访问中间数据状态。 例如,如果某一行更改了五次,事务复制将允许应用程序响应每次更改(例如,激发触发器),而不只是响应该行最终的数据更改。
? 发布服务器有大量的插入、更新和删除活动。
? 发布服务器或订阅服务器不是 SQL Server 数据库(例如,Oracle)。
ü 合并复制:并复制通常用于服务器到客户端的环境中。
合并复制适用于下列各种情况:
? 多个订阅服务器可能会在不同时间更新同一数据,并将其更改传播到发布服务器和其他订阅服务器。
? 订阅服务器需要接收数据,脱机更改数据,并在以后与发布服务器和其他订阅服务器同步更改。
? 每个订阅服务器都需要不同的数据分区。
? 可能会发生冲突,并且在冲突发生时,您需要具有检测和解决冲突的能力。
? 应用程序需要最终的数据更改结果,而不是访问中间数据状态。 例如,如果在订阅服务器与发布服务器进行同步之前,订阅服务器上的行更改了五次,则该行在发布服务器上仅更改一次来反映最终数据更改(也就是第五次更改的值)。
· 指定要发布的数据和数据库对象;(可选)筛选来自表项目的列,并设置项目属性。
· 可选择筛选来自表项目的行。
· 设置快照代理调度。
· 指定运行下列复制代理和进行连接的凭证:
· 创建发布。
3 创建订阅
订阅是对发布中的数据和数据库对象的副本的请求。订阅定义将接收哪个发布以及接收的时间和位置。创建订阅后,将无法更改其类型。
两种订阅方式的标比较:
订阅类型 |
特征 |
使用时间 |
推送订阅 |
发布服务器将更改传播到订阅服务器,而无需订阅服务器发出请求。更改可以按需、连续地或按照计划推送到订阅服务器。 分发代理或合并代理在分发服务器上运行。 |
1.通常,数据将连续同步或按照经常重复执行的计划同步。 2.发布要求数据近似实时地移动。 3.分发服务器上较高的处理器开销不会影响性能。 4.通常与快照和事务复制一起使用。 |
请求订阅 |
订阅服务器请求在发布服务器上所做的更改。 请求订阅允许订阅服务器上的用户确定同步数据更改的时间。 分发代理或合并代理在订阅服务器上运行。 |
1.数据通常按需或按计划同步,而非连续同步。 2.发布具有大量订阅服务器,并且/或在分发服务器上运行所有代理会消耗大量资源。 3.订阅服务器是自主的、断开连接的和/或移动的。订阅服务器将确定连接和同步更改的时间。 4.通常与合并复制一起使用。 |
若要创建订阅,请提供下列信息:
· 发布的名称。
· 订阅服务器和订阅数据库的名称。
· 分发代理或合并代理是在分发服务器上运行还是在订阅服务器上运行。
· 分发代理或合并代理是连续运行、按照计划运行,还是仅按需运行。
· 快照代理是否应为订阅创建初始快照,以及分发代理或合并代理是否应在订阅服务器上应用该快照。
· 将运行分发代理或合并代理的帐户。
· 对于合并复制,还要提供订阅类型: 服务器或客户端。
3.1 创建推送订阅
使用新建订阅向导,在发布服务器或订阅服务器上创建推送订阅。 按照向导中的页的指示执行下列操作:
· 指定发布服务器和发布。
· 选择运行复制代理的位置。 对于推送订阅,根据发布类型的不同,在“分发代理位置”页或“合并代理位置”页上选择“在分发服务器上运行所有代理(推送订阅)”。
· 指定订阅服务器和订阅数据库。
· 指定复制代理建立连接所用的登录名和密码:
对于快照发布和事务性发布的订阅,在“分发代理安全性”页上指定凭据。
对于合并发布的订阅,在“合并代理安全性”页上指定凭据。
· 指定同步计划和初始化订阅服务器的时间。
· 指定合并发布的其他选项: 订阅类型以及用于参数化筛选的值。
· 指定允许更新订阅的事务性发布的其他选项: 订阅服务器是立即在发布服务器上提交更改还是将它们写入队列、用于从订阅服务器连接到发布服务器的凭据。
· 还可以编写订阅的脚本。
3.1.1 从发布服务器创建推送订阅
1. 在 Microsoft SQL Server Management Studio 中,连接到发布服务器,然后展开服务器节点。
2. 展开“复制”文件夹,再展开“本地发布”文件夹。
3. 右键单击要为其创建一个或多个订阅的发布,然后单击“新建订阅”。
4. 完成新建订阅向导中的页。
3.1.2 从订阅服务器创建推送订阅
1. 在 SQL Server Management Studio 中,连接到订阅服务器,然后展开服务器节点。
2. 展开“复制”文件夹。
3. 右键单击“本地订阅”文件夹,然后单击“新建订阅”。
4. 从新建订阅向导的“发布”页上的“发布服务器”下拉列表中,选择“<查找 SQL Server 发布服务器>”或“<查找 Oracle 发布服务器>”。
5. 在“连接到服务器”对话框中,连接到发布服务器。
6. 在“发布”页上,选择一个发布。
7. 完成新建订阅向导中的页。
3.2 创建请求订阅
使用“新建订阅向导”在发布服务器或订阅服务器中创建请求订阅。按照向导中的页进行操作:
· 指定发布服务器和发布。
· 选择复制代理运行的位置。 对于请求订阅,根据发布类型的不同,请在“分发代理位置”页或“合并代理位置”页上选择“在其订阅服务器上运行每个代理(请求订阅)”。
· 指定订阅服务器和订阅数据库
· 指定复制代理建立连接所用的登录名和密码:
如果是对快照和事务发布的订阅,请在“分发代理安全性”页上指定凭据。
如果是对合并发布的订阅,请在“合并代理安全性”页上指定凭据。
· 指定同步计划和初始化订阅服务器的时间。
· 指定合并发布的其他选项: 订阅类型;参数化筛选值;如果发布启用了 Web 同步,则还需指定要通过 HTTPS 同步的信息。
· 指定允许更新订阅的事务发布的其他选项: 订阅服务器是应该立即在发布服务器上提交更改还是将它们写入队列;用于从订阅服务器连接到发布服务器的凭据。
· 还可以编写订阅的脚本。
3.2.1 从发布服务器创建请求订阅
1. 连接到 Microsoft SQL Server Management Studio 中的发布服务器,然后展开服务器节点。
2. 展开“复制”文件夹,然后展开“本地发布”文件夹。
3. 右键单击要为其创建订阅的发布,然后单击“新建订阅”。
4. 完成新建订阅向导中的页。
3.2.2 从订阅服务器创建请求订阅
1. 连接到 SQL Server Management Studio 中的订阅服务器,然后展开服务器节点。
2. 展开“复制”文件夹。
3. 右键单击“本地订阅”文件夹,然后单击“新建订阅”。
4. 在新建订阅向导的“发布”页上,从“发布服务器”下拉列表中选择“<查找 SQL Server 发布服务器>”或“<查找 Oracle 发布服务器>”。
5. 在“连接到服务器”对话框中连接到发布服务器。
6. 在“发布”页上选择一个发布。
7. 完成新建订阅向导中的页。
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【腾讯课堂】:https://abennet.ke.qq.com
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET