在SQL Server的复制中出现在错误“应用复制的命令时在订阅服务器上不到该行”,换上以前的做法就是删除掉这个复制,然后再新建一个复制,但是这次,我突然想BAIDU一下,看看别人是怎么处理这个问题的,然后发现到的文章都是从MSDN上抄下来的,因此我决定把我的做法写下来。
  首先查MSDN,确定这个错误的ID为20598,这个下面会用到;确定了错误ID之后,有两种方法可以跳过这个错误
  第一种是使用“右键-》复制-》分发服务器属性-》默认配置文件-》然后新建一个新的配置文件,”这样子就可以让分发的所有复制都使用新的配置文件,一般用来修改一些公共的参数。
  第二种是打开复制监视器,然后双击你要修改的那个复制,在“操作”菜单下有个代理配置文件,打开它后新建一个配置文件,然后使用这个配置文件,这种方法用来修改单个的复制的参数。
  新建后修改-SkipErrors这一项,点“值”栏后输入刚刚查到的ID号,就是20598,点确定,然后勾上你刚刚新建的这个配置文件。
  重启代理,打开复制监视器,你会发现它已经跳过了这个错误。
  如果是对等数据复制的话,要慎用,因为可能导致两个数据库的数据不一致,请先查明原因,然后再决定是否要跳过这个错误。 
  于事务性复制,有两种方法可以跳过在分发过程中遇到的错误:
  分发代理的 -SkipErrors 参数,可用来跳过某种类型的错误。有错误的事务将不提交,但后续的事务将提交。
  sp_setsubscriptionxactseqno 存储过程,可用来跳过一个或多个导致错误的事务。非SQL Server 的订阅服务器没有此选项。
  重要事项:
  在典型的复制处理中,应该不会遇到任何需要跳过的错误。跳过错误时要谨慎,要了解发生错误的条件、错误的起因以及需要跳过错误或特定事务而不解决的理由。如果在订阅服务器上跳过发布服务器上提交的事务,则这两个节点就不会完全同步,这会导致其他错误。
  -SkipErrors 参数:
  默认情况下,发布代理遇到错误时就会停止。如果使用 -SkipErrors 参数,并指定了预期的或不想让其干扰复制的错误,则代理就会记录错误信息,然后继续运行。例如,如果要指定分发代理,使其记录重复键违规但继续处理后续事务,就需要指定代理跳过错误 2601(不能在具有唯一索引 ’%.*ls’ 的对象 ’%.*ls’ 中插入重复键的行。)和 2627(违反了 %ls 约束 ’%.*ls’。不能在对象 ’%.*ls’ 中插入重复键): -SkipErrors 2601;2627
--------------------------------------------------------------------------------------------------------
附: Mssql错误代码对照表
错误
消息
MSSQL_ENG002601
不能在具有唯一索引 '%.*ls' 的对象 '%.*ls' 中插入重复键的行。
MSSQL_ENG002627
违反了 %ls 约束 '%.*ls'。不能在对象 '%.*ls' 中插入重复键。
MSSQL_ENG003165
数据库 '%ls' 已还原,但在还原/删除复制时出错。该数据库仍保留为离线状态。请参阅 SQL Server 联机丛书中的主题 MSSQL_ENG003165。
MSSQL_ENG003724
无法对 %S_MSG '%.*ls' 执行 %S_MSG,因为它正用于复制。
MSSQL_ENG004929
无法更改 %S_MSG '%.*ls',因为正在为复制而发布它。
MSSQL_ENG007395。请参阅对 Oracle 发布服务器进行故障排除
无法启动链接服务器“%ls”的 OLE DB 访问接口“%ls”的嵌套事务。由于 XACT_ABORT 选项已设置为 OFF,因此必须使用嵌套事务。
MSSQL_ENG014005
无法删除发布。该发布已有订阅。
MSSQL_ENG014010
安装sql server数据库没到未将服务器“%s”定义为订阅服务器。
MSSQL_ENG014114
未将 '%s' 配置为分发服务器。
MSSQL_ENG014117
未将 '%s' 配置为分发数据库。
MSSQL_ENG014120
无法删除分发数据库 '%s'。此分发服务器数据库与发布服务器相关联。
MSSQL_ENG014121
无法删除分发服务器 '%s'。此分发服务器与分发数据库相关联。
MSSQL_ENG014144
无法删除订阅服务器 '%s'。在发布数据库“%s”中已有此服务器的订阅。
MSSQL_ENG014150
复制 - %s:代理 %s 成功。%s
MSSQL_ENG014151
复制 - %s: 代理 %s 失败。%s
MSSQL_ENG014152
复制 - %s:代理 %s 计划重试。%s
MSSQL_ENG014157
由发布 '%s' 的订阅服务器 '%s' 创建的订阅已过期,且已停止。
MSSQL_ENG014160
已设置发布 [%s] 的阈值 [%s:%s]。此发布的一个或多个订阅已过期。
MSSQL_ENG014161
已设置发布 [%s] 的阈值 [%s:%s]。请确保日志读取器和分发代理正在运行并且可以满足滞后时间要求。
MSSQL_ENG014162
已设置发布 [%s] 的阈值 [%s:%s]。请确保合并代理正在运行且符合要求。
MSSQL_ENG014163
已设置发布 [%s] 的阈值 [%s:%s]。请确保合并代理正在运行且符合要求。
MSSQL_ENG014164
已设置发布 [%s] 的阈值 [%s:%s]。请确保合并代理正在运行且符合要求。
MSSQL_ENG014165
已设置发布 [%s] 的阈值 [%s:%s]。请确保合并代理正在运行且符合要求。
MSSQL_ENG018456
用户 '%.*ls'.%.*ls 登录失败
MSSQL_ENG018752
一次只能有一个日志读取器代理或日志相关过程(sp_repldone、sp_replcmds 和 sp_replshowcmds)连接到某个数据库。如果执行了一个日志相关过程,那么在启动日志读取器代理或者执行另一个日志相关过程之前,请删除执行 第一个过程时所用的连接,或者在该连接上执行 sp_replflush。
MSSQL_ENG020554
复制代理在 %ld 分钟内没有记录任何进度消息。这表明代理已停止响应或系统活动过多。请确保正在将记录复制到目标,并且与订阅服务器、发布服务器和分发服务器的连接仍然是活动的。
MSSQL_ENG020557
代理关闭。有关详细信息,请参阅作业 '%s' 的 SQL Server 代理作业历史记录。
MSSQL_ENG020572
在验证失败之后,订阅服务器“%s”对发布“%s”中项目“%s”的订阅已被重新初始化。
MSSQL_ENG020574
订阅服务器“%s”对发布“%s”中项目“%s”的订阅未通过数据验证。
MSSQL_ENG020575
订阅服务器“%s”对发布“%s”中项目“%s”的订阅已通过数据验证。
MSSQL_ENG020596
只有 '%s' 或 db_owner 的成员可以删除匿名代理。
MSSQL_ENG020598
应用复制的命令时在订阅服务器上不到该行。
MSSQL_ENG021075
发布 '%s' 的初始快照尚不可用。
MSSQL_ENG021076
项目 '%s' 的初始快照尚不可用。
MSSQL_ENG021286
冲突表 '%s' 不存在。
MSSQL_ENG021330
无法在复制工作目录下创建子目录。(%ls)
MSSQL_ENG021331
无法将用户脚本文件复制到分发服务器。(%ls)
MSSQL_ENG021385
快照无法处理发布 '%s'。可能是由于活动架构的更改操作或者是所添加的新项目所致。
MSSQL_ENG021617。请参阅对 Oracle 发布服务器进行故障排除
无法运行 SQL*PLUS。请确保分发服务器上安装了最新版本的 Oracle 客户端代码。
MSSQL_ENG021620。请参阅对 Oracle 发布服务器进行故障排除
通过系统 Path 变量获得的 SQL*PLUS 版本不够新,无法支持 Oracle 发布。请确保分发服务器上安装了最新版本的 Oracle 客户端代码。
MSSQL_ENG021624。请参阅对 Oracle 发布服务器进行故障排除
在分发服务器 '%s' 上不到已注册的 Oracle OLEDB 访问接口 OraOLEDB.Oracle。请确保分发服务器上安装并注册了最新版本的 Oracle OLEDB 访问接口。有关其他信息,请参阅 SQL Server 联机丛书中“排除 Oracle 发布服务器故障”中的“SQL Server 错误 21624”。
MSSQL_ENG021626。请参阅对 Oracle 发布服务器进行故障排除
无法使用 Oracle OLEDB 访问接口 OraOLEDB.Oracle 连接到 Oracle 数据库服务器 '%s'。
MSSQL_ENG021627。请参阅对 Oracle 发布服务器进行故障排除
无法使用 Microsoft OLEDB 访问接口 MSDAORA 连接到 Oracle 数据库服务器 '%s'。
MSSQL_ENG021628。请参阅对 Oracle 发布服务器进行故障排除
无法更新分发服务器 '%s' 的注册表,以允许 Oracle OLEDB 访问接口 OraOLEDB.Oracle 与 SQL Server 一起在进程中运行。请确保当前登录名有权修改 SQL Server 拥有的注册表项。
MSSQL_ENG021629。请参阅对 Oracle 发布服务器进行故障排除
指示 Oracle 的 Oracle OLEDB 访问接口 OraOLEDB.Oracle 已注册的 CLSID 注册表项不在分发服务器上。请确保分发服务器上安装并注册了 Oracle OLEDB 访问接口。
MSSQL_ENG021642。请参阅对 Oracle 发布服务器进行故障排除
异类发布服务器需要链接服务器。已有一个名为 '%s' 的链接服务器。请删除链接服务器或另选一个发布服务器名称。
MSSQL_ENG021663。请参阅对 Oracle 发布服务器进行故障排除
不到源表 [%s].[%s] 的有效主键。
MSSQL_ENG021684。请参阅对 Oracle 发布服务器进行故障排除
“Oracle 发布服务器 "%s" 的复制管理用户权限不足。有关所需权限,请参阅脚本 /MSSQL/Install/oracleadmin.sql。”
MSSQL_ENG021797
'%s' 必须是有效的 Windows 登录名,且格式为:'计算机\登录名' 或 '域\登录名'。请参阅 '%s' 的文档。
MSSQL_ENG021798
在继续操作之前,必须通过“%s”添加“%s”代理作业。请参阅 '%s' 的文档。
MSSQL_ENG024070
客户端没有所需的特权。
MSSQL_REPL020011
进程无法在“%2”上执行“%1”。
MSSQL_REPL027056
合并进程无法更改“%1”上的生成历史记录。进行故障排除时,请使用详细的历史日志记录来重新启动同步,并指定要写入的输出文件。
MSSQL_REPL027183
合并进程未能使用参数化的行筛选器来枚举项目中的更改。如果此操作仍失败,请增大该进程的查询超时值,缩短发布的保持期,并改进对已发布表的索引。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。