SQLServer复制同步错误收集
1. 错误:已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除NoSync 订阅,然后重新创建它们
use distributiongo--查状态不正常的发布select status,*from dbo.MSsubscriptions where status<>2--修改状
态update dbo.MSsubscriptions set status=2where status<>2
观察复制链是否能正常运⾏,正常后⽤tablediff⽐较发布链中的表数据是否⼀致
还可以重新初始化快照,但是数据量⼤就是个悲剧。
2. 错误:表、存储过程不存在以及表结构不⼀致等
处理⽅法:
a. 表或存储过程不存在:
在订阅端对应的库中补齐缺失的对象;
有⼀种⽐较奇怪的现象是订阅端表明明存在,但是同步链依然报错,此时可能有两种情况:
第⼀: 表字段不⼀致,可以参照下⾯(b)的⽅式补齐表字段;
第⼆: 表字段也⼀致,但是依旧报错,可以采取三种⽅式解决:
a. 暂停同步链,然后再次开启,看是否能通过,如果不⾏,进⾏下⾯的步骤;
b. 勾选掉同步链中报错的这个表,然后观察同步链,此时去掉了这个表的发布,错误⼀般都能过去,
等到所有数据同步后,再将这个表勾选上,⼀般都能过;同步链正常后,在⽤TableDiff⼯具⽐较下
这个表的数据;
c. 如果b步骤依然报错,那就只能重建了。
b. 列名'xxx' ⽆效
可以通过以下语句查缺失的字段对应的表
--查某个发布链中的某个字段(Rp_XXXX 发布名xxx 字段名)select a.name as table_name,b.name as column_name,
(select'alter table '+a.name+' add '+b.name+''+
(casewhen name='nvarchar'thencast(b.max_length/2ASvarchar)when name like'date%'or name='money'then''else name end ) from s
3. 错误:.主键冲突
处理⽅法:跳过错误
错误完成后,需要⽐较两边数据是否⼀致(⽐下数据量就⾏了)
---------------跳过订阅机器上⾯的错误------------------------
-----------------------在分发机器上--------------------------
--语法sp_helpsubscriptionerrors [ @publisher = ]'publisher'
, [ @publisher_db = ]'publisher_db'
, [ @publication = ]'publication'
, [ @subscriber = ]'subscriber'
, [ @subscriber_db = ]'subscriber_db'--get publisher subscriberselect*from MSsubscriber_info--
get publisher_db publication subscriber_db=publisher_dbselect*from MSpublications--
examplesp_helpsubscriptionerrors 'SQLw2k8','dbtranpub','dbtranpub_pub','SQLw2k8Subscriber','dbtransub'--获
取xact_seqno 值----------------------在订阅机器上---------------------------
session数据错误是什么意思sp_setsubscriptionxactseqno [ @publisher= ]'publisher', [ @publisher_db= ]'publisher_db', [ @publication= ]'publication', [ @xact_seqno= ] xact_seq -examplesp_helpsubscriptionerrors 'SQLw2k8','dbtranpub','dbtranpub_pub',xact_seqno------------------------------------------------------------------------
4. 错误:应⽤复制的命令时在订阅服务器上不到该⾏
a. 可以采⽤“主键冲突”错误的处理⽅式,跳过错误,然后再⽤tablediff⽐较两个表的数据差;
b. 在订阅端补充缺失的数据
--使⽤如下语句出错误
号selecttop100 e.xact_seqno ,emand_id,e.* from dbo.MSdistribution_history hjoin dbo.MSrepl_errors e _id=e.idwhere comments not -失败的代理orderby id desc--⽤上⾯查到的具体事务序列号,查看复制组件执⾏的具体命令--在分发数据库上执⾏:sp_browsereplcmds,注意必
须限定开始和结束xact_seqnosp_browsereplcmds '0x0000003B00000020000500000000','0x0000003B00000020000500000000'--结果如
下article_id command1 {CALL [dbo].[sp_MSdel_dboUPCCodeTransaction] ('000000002 ')}--到对应的对
象select publisher_db,article From dbo.MSarticles where article_id=1and publication_id=
(select publication_id from MSpublications with(nolock) where publication='Rp_xxx')--由sp_MSdel 可以知道,这条命令是⼀个删除语句,
因为发布端的数据已经不存在,所以只能跳过;--如果是修改,需要验证上述数据在故障订阅服务器上是否存在,如果不存在,则补上。
5. 错误:⽤户'xxx' 登录失败或者The process could not connect to Subscriber 'xxxx'.
处理⽅法: 检查账号是否正确,能够登录到发布和订阅服务器,⽽且有相应的权限。
6. 发布'xxx' 的初始快照尚不可⽤
保证SQLSERVERAGENT已经运⾏,复制=》发布内容=》发布项⽬=》右击右侧的订阅=》重新初始化
如果还不⾏,复制监视器--发布服务器--xxx--发布的项⽬--快照,看到进程未能创建⽂件“\\XXZ\SQLPUB\unc”,
到该⽂件夹重新配置sql的帐号对该⽂件夹权限为"完全"。
7. 进程未能从表“[dbo].[XXX]”向外⼤容量复制
在写BCP 数据⽂件时发⽣I/O 错误(源: ODBC SQL Server Driver (ODBC); 错误代码: 0)
解决⽅法:就是字符类型全部改为n类型的解决问题(char-nchar,varchar-nvarchar,ntext).
8. 错误消息:
"代理'xxxx' 在出错后正在重试。已重试了25 次。有关详细信息,请参阅Jobs ⽂件夹中的代理作业历史记录。”
发⽣这个错误⼀般都是在⼀台机器上⾯有⽐较多的发布链,错误原因在于数据库对Replication使⽤内存的限制,
我们需要更改这个限制来解决这个问题(最好是不要再⼀台机器上创建太多的发布链),⽅法如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\
点开Windows项,到下⾯这些内容
%SystemRoot%\ ObjectDirectory=\Windows SharedSection=1024,20480,768
将最后的数字(不⼀定是这个数字,可能是等)改成1024 保存,重启即可。
Windows2008 server 如果不是amdin⽤户可能会不让打开注册表,如果是管理组权限的话,可以到
C:\windows\system32 下⾯到 ⽂件,右键,然后将⾃⼰的账号添加到运⾏权限⾥⾯。
9.--Cannot drop the database XXX because it is being used for replication
exec sp_removedbreplication 'database'
10. 在插⼊nvarchar(max)类型的字段值时,报异
常"Length of LOB data (92472) to be replicated exceeds configured maximum 65536. The statement has been terminated." (“要复制
的 LOB 数据的长度(92472)超出了配置的最⼤值 65536。语句已终⽌。”)
解决⽅法:修改服务器配置选项”Max Text Repl Size”(“最⼤⽂本复制⼤⼩”),它的默认值为65536,最⼤值为2147483647
通过SELECT * figurations WHERE NAME LIKE '%repl%'
例如:
sp_configure 'max text repl size', '9000000'
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论