MSSQL发布订阅中解决含有Text域的数据发布问题

来源:互联网 发布:小米服务号是什么软件 编辑:程序博客网 时间:2024/06/07 07:08

1、在数据发布时报如下错误信息:
               在BCP数据文件中遇到意外的EOF(源:ODBC SQL Server Driver(ODBC):错误代码:S1000)
       这是因为数据库中含有TEXT或nTExt或Image字段引起的,只要在某项发布属性页中选择<快照>-<快照格式>-<字符模式格式>,即可解决该问题.
2、另外,在建数据发布时,报如下错误:
            违反了Primary Key约束'PK_@snapshot_seqnos_7fab3fda'.不能在对象'#7EB71BA1'中插入重复键.
     (源:zzb_stockserver(数据源);错误代码:2627)
     这是因为在建发布时,数据库数据正在执行插入或修改动作引起的,只要该发布的快照重新运行一下即可。
3、对某些大型数据表无法生成快照的问题,数据库报如下错误:
        进程未能从表"[dbo].[syncobj_0x3436383044343035]"向外大容量复制,在写 BCP 数据文件时发生 I/O 错误(源: ODBC SQL Server Driver (ODBC); 错误代码: 0)
     这是因为该表有问题或表数据太大造成的,可用如下方法试着解决一下:
     a、用DBCC checktable 对该表检查一下,数据表是否有问题,然后再试一下重新生成数据快照。
     b、如果上述问题仍无法解决,可以用数据导出功能将数据表导到订阅服务器中。
     c、然后重建一个针对该数据表的数据发布,选择不生成快照功能,然后运行下述问题4的解决方法,解决出现的问题。
4、在建立订阅时,选择不初始化订阅方数据表,则在订阅服务器不产生相应的复制存贮过程,运行该发布时,会报如下错误:
     未能找到存贮过程'sp_MSupd_XXX'...
   原因如下:
Problem Deion :
======
Replication Distribution Agent reports error. The error message is "It could not
find the stored procedure sp_MSins_***".

Reason :
======
If we choose "the subscriber has schema and data already" option when we create the
subion, those three system auto created stored procedures will not be created
in the subscribing database side, they are
"sp_MSins_***"/"sp_MSupd_***"/"sp_MSdel_***".

Soltuion :
======
We could use the system command "sp_publicationcustomprocs 'pulication_name'"
to create the s of those three system stored procedures. Then we run these
s in the subscribing database. The problem will be resolved.
   解决方案:
     在发布服务器上运行如下命令:sp_publicationcustomprocs 'xxxx', 其中xxxx为发布名称,该命令会生成创建上述三个存贮过程的脚本,然后在订阅服务器运行生成三个存贮过程即可。

5、在订阅数据时,发生如下错误:
该订阅已标记为不活动,必须重新初始化该订阅。需要删除并重新创建 NoSync 订阅。
(源: zzb_stockserver (数据源); 错误代码: 21074)
解决方案:
   在发布服务器上,选择某项发布,在属性-》订阅-》重新初始化。可以解决上述问题

6、在数据发布时,发生如下错误:
   不能在具有唯一索引 'PK_tbMeetingMemo' 的对象 'tbMeetingMemo' 中插入重复键的行。
(源: ZZB-XHSTOCK (数据源); 错误代码: 2601)
   原因:可能是在发布该表时,在不同的发布中存在多次发布该表的情况.
   解决方法:
       a、查明是否有多次发布该表的情况.
  在发布服务器的发布数据库中用运行如下SQL语句:select * from sysarticles order by dest_table
  查看在dest_table列中是否出现多次该表的信息,如是,则说明该表已被多次发布,可以用下一步中说明的方法来查看是哪些发布发布了该表。
b、运行语句:select * from syspublications,查看pubid与上述信息相同的pubid的内容,则就能确定是何种发布发布了相同的数据表。
c、找到了发布后,如果是增加数据表,则不用删除该发布下的所有订阅,如果是去除发布的数据表,则需删除该发布下的所有的订阅信息,修改相应的发布内容,重新制定相应的订阅.

注:
1、如何忽略在分发中出现的报错
    a、在发布服务器的管理-》SQL server代理->作业->中,找到该发布的发布JOB,在属性->步骤->2运行代码程序-》编辑->命令->在命令语句最后添加 -skiperrors xxxx(xxxx是分发时报的错误号) , 指的是忽略该错误的意思。
    b、然后重新启动分发引擎.

2.如何输出出错的信息
   在待输出出错信息的JOB命令最后加入 -Output c:\temp\error.txt, -Output是命令,后面是待输出的文件路径和文件夹名.

转自:美娜的BLOG天空