首頁 資料庫 mysql教程 SQLServer Replication 常见错误

SQLServer Replication 常见错误

Jun 07, 2016 pm 03:44 PM
replication sqlserver 常見 錯誤

1. 错误: 已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除NoSync 订阅,然后重新创建它们 use distribution go -- 查找状态不正常的发布 select status, * from dbo.MSsubscriptions where status 2 -- 修改状态 update dbo.MSsubscriptions s

1. 错误:已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除NoSync 订阅,然后重新创建它们      

use distribution
go
--查找状态不正常的发布
select status,*from dbo.MSsubscriptions where status2
--修改状态
update dbo.MSsubscriptions set status=2where status2

  观察复制链是否能正常运行,正常后用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 sys.types where system_type_id=b.system_type_id ) as definition FROM dbo.sysarticles a WITH(NOLOCK) innerjoin sys.columns b WITH(NOLOCK)
on a.objid=b.object_idinnerjoin dbo.syspublications c with(nolock) on a.pubid=c.pubid
where c.name='Rp_XXXX'and b.name='xxx'

3. 错误:.主键冲突
   处理方法:跳过错误
  SQLServer Replication 常见错误
错误完成后,需要比较两边数据是否一致(比下数据量就行了)

---------------跳过订阅机器上面的错误------------------------
--
---------------------在分发机器上--------------------------
--
语法
sp_helpsubscriptionerrors [ @publisher = ]'publisher'
,
[ @publisher_db = ]'publisher_db'
,
[ @publication = ]'publication'
,
[ @subscriber = ]'subscriber'
,
[ @subscriber_db = ]'subscriber_db'

--get publisher subscriber
select*from MSsubscriber_info

--get publisher_db publication subscriber_db=publisher_db
select*from MSpublications

--example
sp_helpsubscriptionerrors 'SQLw2k8','dbtranpub','dbtranpub_pub','SQLw2k8Subscriber','dbtransub'

--获取xact_seqno 值

----------------------在订阅机器上---------------------------
sp_setsubscriptionxactseqno [ @publisher= ]'publisher',
[ @publisher_db= ]'publisher_db',
[ @publication= ]'publication',
[ @xact_seqno= ] xact_seqno

--example
sp_helpsubscriptionerrors 'SQLw2k8','dbtranpub','dbtranpub_pub',xact_seqno

-------------------------------------------------------------------------------------

4. 错误:应用复制的命令时在订阅服务器上找不到该行

   a. 可以采用“主键冲突”错误的处理方式,跳过错误,然后再用tablediff比较两个表的数据差;
   b. 在订阅端补充缺失的数据

--使用如下语句找出错误号
selecttop100 e.xact_seqno ,e.command_id,e.*
from dbo.MSdistribution_history h
join dbo.MSrepl_errors e on h.error_id=e.id
where comments notlike'%transaction%'--失败的代理
orderby id desc

--用上面查到的具体事务序列号,查看复制组件执行的具体命令
--在分发数据库上执行:sp_browsereplcmds,注意必须限定开始和结束xact_seqno
sp_browsereplcmds '0x0000003B00000020000500000000','0x0000003B00000020000500000000'
--结果如下
article_id command
1 {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].[syncobj_0x3745373834413345]”向外大容量复制
   在写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%\system32\csrss.exe ObjectDirectory=\Windows Shareddiv=1024,20480,768
  将最后的数字(不一定是这个数字,可能是等)改成1024 保存,重启即可。

  Windows2008 server 如果不是amdin用户可能会不让打开注册表,如果是管理组权限的话,可以到
  C:\windows\system32 下面找到regedit32.exe 文件,右键,然后将自己的账号添加到运行权限里面。

9.--Cannot drop the database XXX because it is being used for replication
  exec sp_removedbreplication 'database'

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

sqlserver資料庫中已存在名為的物件怎麼解決 sqlserver資料庫中已存在名為的物件怎麼解決 Apr 05, 2024 pm 09:42 PM

sqlserver資料庫中已存在名為的物件怎麼解決

sqlserver怎麼匯入mdf文件 sqlserver怎麼匯入mdf文件 Apr 08, 2024 am 11:41 AM

sqlserver怎麼匯入mdf文件

無法完成操作(錯誤0x0000771)印表機錯誤 無法完成操作(錯誤0x0000771)印表機錯誤 Mar 16, 2024 pm 03:50 PM

無法完成操作(錯誤0x0000771)印表機錯誤

Windows Update 更新提示Error 0x8024401c錯誤的解決方法 Windows Update 更新提示Error 0x8024401c錯誤的解決方法 Jun 08, 2024 pm 12:18 PM

Windows Update 更新提示Error 0x8024401c錯誤的解決方法

sqlserver服務無法啟動怎麼辦 sqlserver服務無法啟動怎麼辦 Apr 05, 2024 pm 10:00 PM

sqlserver服務無法啟動怎麼辦

怎麼查看sqlserver連接埠號 怎麼查看sqlserver連接埠號 Apr 05, 2024 pm 09:57 PM

怎麼查看sqlserver連接埠號

sqlserver誤刪資料庫怎麼恢復 sqlserver誤刪資料庫怎麼恢復 Apr 05, 2024 pm 10:39 PM

sqlserver誤刪資料庫怎麼恢復

sqlserver資料庫在哪裡 sqlserver資料庫在哪裡 Apr 05, 2024 pm 08:21 PM

sqlserver資料庫在哪裡

See all articles