SQLServer 同步复制
薛定谔的DBA
这个作者很懒,什么都没留下…
展开
-
SQLServer 可更新订阅数据冲突的一个原因
可更新订阅为什么有冲突?可更新订阅中,当升级增加一个字段时,通常在发布服务器的发布数据库中增加,对表增加字段后,发布自动同步到订阅数据库中(复制架构更改=true)。但是,如果此时在订阅数据库进行DML操作,数据将不会同步到发布表中;这些差异数据在订阅表中如果一直未进行DML 操作,也就不会再次同步到发布中,存在差异。复制配置环境:可更新订阅事务复制发布和订阅冲突都原创 2015-08-04 10:11:03 · 2629 阅读 · 0 评论 -
SQLServer 可更新订阅数据在线架构更改(增加字段)方案
之前一直查找冲突发布和订阅数据不一致的原因,后来发现多少数据库升级引起,因为一直以来都是在发布数据库增加字段,订阅也会自动同步。在此时如果订阅队列有数据,这些数据将丢失。参考上一篇说明:SQLServer 可更新订阅数据冲突的一个原因 。当在发布数据库增加一个字段时,系统同步存储过程和触发器都会重新生成,这会导致仍在队列中的数据无法正常同步。订阅队列中的命令将因“同步”后消失,代理有可能出错,但也原创 2015-08-13 17:18:44 · 4286 阅读 · 5 评论 -
SQLServer 远程服务器不存在,未被指定为有效的发布服务器,或您无权查看可用的发布服务器
创建了事务发布,在初始化时出现错误,查看相关代理信息如下:日志读取器代理错误: 状态: 0,代码: 20015,文本: '远程服务器 "serverName" 不存在,未被指定为有效的发布服务器,或您无权查看可用的发布服务器。'。远程服务器 "serverName" 不存在,未被指定为有效的发布服务器,或您无权查看可用的发布服务器。快照代理错误:异常消息原创 2015-07-24 02:05:18 · 3940 阅读 · 0 评论 -
SQLServer 使用sp_repldone标识所有未分发的事务为已分发
对于发布数据库的数据大量操作时,会使日志扫描并读取太多,会导致分发堵塞很久。也有一些解决方法,参考 《SqlServer 复制中将大事务分成小事务分发》 , 《SqlServer大量更新引起同步链延时问题》 。当然也可以使这些数据不分发,尤其是新表,数据尚未让用户使用,可以在日志读取器跳过扫描标识为 “复制” 的事务。注: 以下模拟操作,操作都在发布数据库执行!1. 将原创 2015-11-04 13:21:16 · 3705 阅读 · 0 评论 -
SqlServer 可更新订阅升级字段队列数据丢失原因
之前简单描述过数据冲突发生的原因:SQLServer可更新订阅数据冲突的一个原因 ,但具体内部原理是怎么丢失的还不清楚,今天补充说明。可更新订阅,在订阅数据库操作数据,数据实时同步到发布数据库中。经测试,有3种情况会导致订阅队列的数据丢失:1.更改字段类型2.增加删除字段3.表对象发布另:添加默认值约束,存储过程,函数正常!订阅队列数据不丢失!(触发器未原创 2015-10-14 16:04:31 · 1076 阅读 · 0 评论 -
SQL Server 中心订阅模型(多发布单订阅)
大多数SQL Server 复制拓扑都是基于中心发布模型,它是由一个发布复制到一个或者多个订阅。另一个复制模型是中心订阅模型,它使用事务复制由多个发布复制到一个订阅中。中心订阅模型用于从多个数据源中合并数据,例如:》从多个数据仓库中汇总库存到企业总部的中心服务器;》同一个公司中从持续发送远程办公数据到中心办公系统中;》合并订单信息到同一个地方集中处理。原创 2015-12-16 11:57:19 · 4394 阅读 · 0 评论 -
SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)
在可更新订阅中,在订阅设置更新方法,将 “排队更新” 设置为 “立即更新”接着在订阅数据库更新表数据,出错:消息 21079,级别 16,状态 1,过程 sp_getpublisherlink,第 52 行没有发布服务器的 RPC 安全信息,或该信息无效。请用 sp_link_publication 指定该信息。消息 20512,级别 16,状态 1,过程 sp原创 2016-03-02 10:21:53 · 2244 阅读 · 0 评论 -
SqlServer 无法为可更新的订阅设置发布服务器登录名 sp_link_publication
没有截图:创建可更新订阅,正常创建了发布,在订阅端创建订阅,最后一步提示完成,却出现了警告:无法为可更新的订阅设置发布服务器登录名。可能需要使用 sp_link_publication 直接在订阅服务器计算机上设置它。突然想起来这个发布和订阅的数据库都是其他库还原过来的,应该是账号问题:在发布数据库和订阅数据库都执行:-- 查看孤立数据库用户exe原创 2015-03-28 11:33:09 · 3265 阅读 · 0 评论 -
SQLServer 进程无法向表进行大容量复制
模拟出来的问题,这里记录下来吧。事物复制中,发布的表有一字段允许为null,并且该字段存在null值。而自己在订阅中先创建该表,并且把这个字段该为not null,结果出现了以下的错误。错误消息:进程无法向表“"dbo"."MyTable"”进行大容量复制。 (源: MSSQL_REPL,错误号: MSSQL_REPL20037)获取帮助: http://help/MS原创 2016-03-04 17:20:40 · 3884 阅读 · 0 评论 -
SQLServer 服务器架构迁移
最近服务器架构迁移,将原来的服务器架构迁移到新的服务器,新的服务器在硬件方面比之前更好!原来服务器使用双向同步,并且为水平划分到多个数据库服务器。迁移过程中,数据库方面涉及到数据一致性,帐号,重新划更多分区,规范索引,分布式查询,删除无效触发器等等。程序方法重新修改配置文件,SQL更改等。原架构如图:现在有相同的服务器,所有分库都迁移到新的服务器,再增加一台服务器作原创 2016-03-24 10:32:38 · 2542 阅读 · 4 评论 -
SQL Server 命名实例更改端口进行发布订阅
两台数据库服务器,都没有加入域,都安装多实例,端口也不一样了。现在使用命名实例进行复制,折腾了好久,才发现解决方法。服务器A:myserverAMSSQL命名实例: mymssqlMSSQL端口:14433服务器B:myserverBMSSQL命名实例: mymssqlMSSQL端口:14433正常连接数据库的方法: myserverA\myms原创 2016-07-01 12:25:50 · 2943 阅读 · 1 评论 -
SQLServer 事务复制中使用脚本添加某个对象的发布
-- use [发布库] --添加表:创建项目并将其添加到发布中exec sp_addarticle @publication = N'ReplicationName', @article = N'MyObject', @source_owner = N'dbo', @source_object = N'MyObject', @destination_owner = N'dbo',原创 2016-08-15 11:53:09 · 1327 阅读 · 0 评论 -
SqlServer 监控发布中未分发的命令数
对于查看未分发的命令数,我们通常zh原创 2014-10-30 21:12:34 · 2193 阅读 · 0 评论 -
SQLServer 以备份初始化订阅
在创建事务复制时,如果发布数据库很大,使用快照初始化时,将等待很久,如果出现问题可能又得重新初始化。使用备份初始化会省很多时间,但是数据库在创建发布订阅期间不能访问。使用备份代替快照迁移数据,备份可以压缩或使用 FTP 传输,若在同一个机房,拷贝复制更快。原创 2015-11-15 23:25:05 · 2618 阅读 · 0 评论 -
SqlServer 更改复制代理配置文件参数及两种冲突策略设置
由于经常需要同步测试并更改代理配置文件属性,所以总结成脚本,方便测试.代理配置参数位置:里面的参数是需要更改的,未显示的参数,则是没有添加到配置文件的。但是取消上面的勾选是可以看到还有那些配置参数。使用复制代理配置文件参考:https://msdn.microsoft.com/zh-cn/library/ms147893(v=sql.100).asp原创 2015-04-14 19:45:44 · 2196 阅读 · 0 评论 -
SQLServer 复制中移除和添加发布而不初始化所有项目
-- 若提前“禁止架构更改”,新增的列不会自动添加大发布,此时应使用 sp_articlecolumn 添加列EXEC sp_changepublication @publication = N'publication', @property = N'replicate_ddl', @value = 0--【移除和添加发布而不初始化所有项目】-- 禁止匿名访问Exec sp_ch原创 2015-06-27 22:23:16 · 2525 阅读 · 0 评论 -
深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数
COLUMNS_UPDATED函数能够出现在INSERT或UPDATE触发器中AS关键字后的任何位置,用来指示表或视图中有哪些列已被插入或者更新。它通常和IF语句一起使用,从而可以根据不同的结果,促使触发器执行不同的操作。因此在DML触发器中,COLUMNS_UPDATED函数是一个非常重要且有用的函数。不同于UPDATE函数,COLUMNS_UPDATED函数可以工作在多个列中,它使用字节中转载 2014-05-20 11:09:56 · 2382 阅读 · 0 评论 -
SqlServer 可更新订阅队列读取器代理错误:试图进行的插入或更新已失败
队列读取器代理在连接“p”上的“Platform”时遇到错误“试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。”。请确保正确定义了分发和订阅,并确保这两台服务器都在运行。原创 2014-09-14 12:09:56 · 3044 阅读 · 0 评论 -
SqlServer大量更新引起同步链延时问题
前言: 在SQLServer数据库中,当我们对一个位于同步链上的表进行更新时,如果更新的记录数也非常多,几百或是几千万,那么批量更新该表会造成同步链的大量延时(甚至有可能崩溃掉,即使同步链不崩溃,等的人也要崩溃了)。 原因: 一般情况下,Replication是根据我们更改的数据一条条更改记录的,也就是说我们在发布端下达如下的语句:转载 2014-08-16 18:15:16 · 5554 阅读 · 0 评论 -
SqlServer删除复制监视器中无效的发布名称
在服务器复制监视器中有一个发布名称,因为该发布订阅已经删除。ReportServerTempDB只有一个发布,已无效,打算删除。--直接删除表记录select * from dbo.MSsnapshot_agents where publisher_db='ReportServerTempDB'原创 2014-12-02 14:58:24 · 3584 阅读 · 0 评论 -
队列读取器代理 遇到错误 Row handle is invalid
今天测试在发布中更改表名称,再发布数据库更改后重新发布这个表。但是原来的表在订阅没有删除,不小心插入数据到原表中,队列读取器停止并报错。原创 2014-11-12 16:04:15 · 1133 阅读 · 0 评论 -
SQL Server 可更新订阅中有行筛选的同步复制移除项目而不重新初始化所有订阅!
在同步复制中,有行筛选的项目表,移除的时候会提示重新初始化所有的快照并且应用此快照,这将导致所有的订阅数据库被重新初始化。如下图,移除项目的时候提示:原创 2014-07-25 09:10:24 · 3475 阅读 · 0 评论 -
SqlServer 使用脚本创建分发服务及事务复制的可更新订阅
【创建使用本地分发服务器】/************************【使用本地分发服务器配置发布】***********************/-- SqlServer 2008 R2-- https://technet.microsoft.com/zh-cn/library/ms151860(v=sql.105).aspxuse mastergo-- 服务器上是否已原创 2015-03-29 03:26:20 · 5568 阅读 · 0 评论 -
SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步
由于之前的需要,禁止了复制架构更改,以至在发布中添加一个字段,并不会同步到订阅中,而现在又在订阅中添加了一个同名字段,怎么使这发布和订阅的两个字段建立同步关系呢?下面就测试更改:此次发布类型为事务复制的可更新订阅,其他类型的发布没有测试。首先建立事务复制的可更新订阅,建立好之后。在发布创建一张测试表:CREATE TABLE [dbo].[DemoTab](原创 2015-06-17 18:04:28 · 3260 阅读 · 0 评论 -
SqlServer 复制中将大事务分成小事务分发
在sql server 复制中,当在发布数据库执行1个大事务时,如一次性操作 十万或百万以上的数据。当操作数据在发布数据库执行完成后 ,日志读取器代理将扫描事务日志,一次性传递到分发数据库中。若上个事务未传递完成,连续执行多个事务,日志读取器代理将扫描日志中多个事务同时传递到分发数据库中,默认最大扫描500个事务。如果执行多次上百万或千万的数据将堵塞很久。日志读取器代理可配置将大事务划原创 2015-05-30 19:17:55 · 2867 阅读 · 2 评论 -
SQLServer 订阅过期解决方法
由于分发数据库执行一个较长的事务,达到了系统预定的72小时,导致了该订阅过期,数据库分发代理已不可再启用,提示错误如下:错误信息:已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除 NoSync 订阅,然后重新创建它们右键订阅,发现该订阅已处于不活的状态!~怎么解决?难道要重新初始化??!后来找到一个系统的存储过原创 2015-06-30 00:26:55 · 10409 阅读 · 1 评论 -
SQL Server 事务复制分发到订阅同步慢
最近发现有一个发布经常出现问题,每几天就出错不同步,提示要求初始化。重新调整同步后,复制还是很慢!每天白天未分发的命令就达五六百万条!要解决慢的问题,需要了解从发布数据库到订阅数据库中,有哪些操作,才知道哪个步骤同步缓慢。原创 2017-05-04 11:35:37 · 3493 阅读 · 3 评论