sql2008发布订阅 问题汇总

  1. 云栖社区>
  2. 博客>
  3. 正文

sql2008发布订阅 问题汇总

y0umer 2011-07-11 15:01:00 浏览904
展开阅读全文
 1.如何修改一个已经发布的表的属性?

  将发布所有订阅删除,(发布不用删除),就可以在发布属性的项目中取消表,然后就

  可以修改该表了,修改后,再将表加入发布内就可以了.

  2.常用的操作界面:

  (1)一般都在监视器--发布项目,可以看到快照 分发和订阅的即时信息.

  (2)另外一个操作地方是发布的属性,(在属性--状态里可以启动代理)

  (3)还有一个是工具--复制--配置发布、订阅服务器和分发,需要订阅的服务器必

  须在这里指定授权后订阅才能成功.

  ============

  问题:

  数据库无法登陆的老问题:数据库属性-安全里面,不要选仅windows登陆,换另外一

  个模式.

  0.订阅一个快照发布(不是事务复制)出错," 名称xxx在TransP lication集

  合上没有找到",在企业管理器中,将发布数据库和订阅数据库都停止或者断开,再

  启动,重新连接就可以订阅快照发布了.真是希奇,有莫名其妙的问题可以尝试重启

  服务器试试,有时后一台机器上可以正常控制订阅操作,而另外一台机器上却订阅

  操作出错,也重新连接服务器试试.

  1.一开始碰到的问题是,注册的local服务器不能用,删除后重新命名搞定,

  2.sql server代理正在使用系统帐户,它会导致复制失败,. 这个提示点确定后,

  本账户的选项为灰色,

  原来是配置发布的服务器不是本机,到本机上操作发布,就可以选"本账户"了.

  3.又遇到不能署名订阅,"不允许请求的署名订阅",明明发布和订阅服务器双方都

  注册了,也双方都建立了

  订阅的用户帐号,原因:在这步,点注册服务器,然后不能选默认的模拟sql登陆,而

  是要选"使用sql 身份验证",然后输入名称和密码.

  如果始终弹出"不允许请求的署名订阅",不能进到选择登陆模式的界面,退出订阅

  向导,在企业管理器中,进入发布服务器,复制-右键-"配置发布、订阅服务器和分

  发"-订阅服务器-添加订阅服务器机器名和帐号,如果已经有了,直接确定下.再在

  进订阅服务器订阅就不会显示不能署名订阅了.

  以上过程可能发现明明订阅服务器名字已经在发布服务器添加了,还是出现这个问

  题,就一定要在订阅服务器进入发布服务器,然后添加订阅服务器的名字,为什么会

  这样,可能是在发布服务器指定了改订阅服务器的名字后,但订阅服务器没有刷新,

  可以断开一次订阅服务器和发布服务器,再来订阅,也可以解决.

  4.请求订阅已经建立好了,但订阅状态显示"正在重试", 上次动作"进程未能连接

  到s scriber SHD-SHD",

  原因是我安装sql后,曾经改过电脑的名字,改回SHD-SHD.(有的人是因为sql服务器

  端口修改过造成).还有可能是MSSQLserver和Sqlserveragent服务没有用域用户身

  份启动并运行,减肥药哪个好

  (于是我把B加到A所在的域,安利减肥产品并且把A的管理员用户加到B的SQLServerAgent服务的

  登陆用户中,)

  5.但订阅状态显示"请求共享代理程序失败", "进程未能连接到distributor

  ...",怀疑是订阅设置时,连接

  发布数据库的帐号有问题,在订阅(右键)的历史记录中查看具体的错误原因.帐号

  正确后,历史记录又说

  订阅端机器没有配置,于是全部删除订阅和发布来试,结果发布确无法删除发布,出

  现错误,原来是订阅

  的机器通过局域网,打开了快照的共享目录没有封闭,封闭后,成功删除发布.

  如果还无法删,干脆把共享的快照目录取消共享,再删,然后重新配置快照目录共享

  .

  6.订阅服务器上的订阅又无法删除了,提示"无法更新或删除从 MSX 服务器上

  发起的作业",

  这是因为:计算机更换名之后就出现这种错误,自己不能修改自己创建的作业。什么减肥产品最好

  解决办法:

  在msdb的sysjobs表中把originating-server中的值全部改为更改后的计算机名

  update msdb..sysjobs set originating_server = '现服务器名'

  有时可以到管理-sql server代理--作业,查看更多情况和操作.

  7.全部重新创建发布和订阅成功,执行却又出现"发布内容 null"的提示,是因为订

  阅服务器没有连接到分发服务器,(1)SQLSERVERAGENT没启动.(2)MSSQLserver和

  Sqlserveragent服务必须以域用户身份启动并运行,

  以上问题检查中随时留意SQLSERVERAGENT(控制面板-管理-服务)服务是否已经启

  动,

  8.订阅服务器已经登陆上发布服务器,但在建立订阅时看不见该服务器的发布,是

  因为没有配置分发

  服务器,工具-复制-"配置发布、订阅服务器和分发",再检查SQLSERVERAGENT是否

  运行.

  然后再在发布属性-发布访问列表,添加订阅服务器登陆的登陆名,订阅端终于看见

  发布了.

  9.发布 'xxx' 的初始快照尚不可用。

  保证SQLSERVERAGENT已经运行,

  复制=》发布内容=》发布项目mytab=》右击右侧的订阅=》重新初始化

  如果还不行,

  复制监视器--发布服务器--xxx--发布的项目--快照,看到

  进程未能创建文件“\\XXZ\SQLP \unc”,到该文件夹重新配置sql的帐号对该文

  件夹权限为"完全".

  10.订阅端产生 "快照尚不可用 发生操作系统错误 53",订阅服务器帐号访问快照

  文件

  夹出权限不够,分配权限,还有检查防火墙,被禁止了访问.

  11.有个表无法发布,选择框显示红叉,没有主键的表无法发布.

  12.进程未能从表“[dbo].[syncobj_0x]”向外大容量复制。

  在写 BCP 数据文件时发生 I/O 错误(源: ODBC SQL Server Driver (ODBC); 错

  误代码: 0)

  解决方法:就是字符类型全部改为n类型的解决问题(char-nchar,varchar-

  nvarchar,ntext).

  13、在数据发布时报如下错误信息:

  在BCP数据文件中遇到意外的EOF(源:ODBC SQL Server Driver(ODBC):错误代码 :S1000)

  这是因为数据库中含有TEXT或nTExt或Image字段引起的,只要在某项发布

  属性页中选择<快照>-<快照格式>-<字符模式格式>,即可解决该问题.

  14、另外,在建数据发布时,报如下错误:

  违反了Primary Key约束'PK_@snapshot_seqnos_7fab3fda'.不能在

  对象'#7EB71BA1'中插入重复键.

  (源:zzb_stockserver(数据源);错误代码:2627)

  这是因为在建发布时,数据库数据正在执行插入或修改动作引起的,只要该

  发布的快照重新运行一下即可。

  15、对某些大型数据表无法生成快照的问题,数据库报如下错误:

  进程未能从表"[dbo].[syncobj_0x]"向外大容量复制

  ,在写 BCP 数据文件时发生 I/O 错误(源: ODBC SQL Server Driver (ODBC);

  错误代码: 0)

  这是因为该表有问题或表数据太大造成的,可用如下方法试着解决一下:

  a、用DBCC checktable 对该表检查一下,数据表是否有问题,然后再试一

  下重新生成数据快照。

  b、如果上述问题仍无法解决,可以用数据导出功能将数据表导到订阅服务

  器中。

  c、然后重建一个针对该数据表的数据发布,选择不生成快照功能,然后运

  行下述问题4的解决方法,解决出现的问题。

  16、在建立订阅时,选择不初始化订阅方数据表,则在订阅服务器不产生相应的

  复制存贮过程,运行该发布时,会报如下错误:

  未能找到存贮过程'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 s scriber has schema and data already" option when

  we create the

  s ion, those three system auto created stored procedures will not be

  created

  in the s scribing database side, they are

  "sp_MSins_***"/"sp_MSupd_***"/"sp_MSdel_***".

  Soltuion :

  ======

  We could use the system command "sp_p licationcustomprocs

  'pulication_name'"

  to create the s of those three system stored procedures. Then we run

  these

  s in the s scribing database. The problem will be resolved.

  解决方案:

  在发布服务器上运行如下命令:sp_p licationcustomprocs 'xxxx', 其中

  xxxx为发布名称,该命令会生成创建上述三个存贮过程的脚本,然后在订阅服务

  器运行生成三个存贮过程即可。

  17、在订阅数据时,发生如下错误:

  该订阅已标记为不活动,必须重新初始化该订阅。需要删除并重新创建 NoSync

  订阅。

  (源: zzb_stockserver (数据源); 错误代码: )

  解决方案:

  在发布服务器上,选择某项发布,在属性-》订阅-》重新初始化。可以解决上

  述问题

  18、在数据发布时,发生如下错误:

  不能在具有唯一索引 'PK_tbMeetingMemo' 的对象 'tbMeetingMemo' 中插入

  重复键的行。

  (源: ZZB-XHSTOCK (数据源); 错误代码: 2601)

  原因:可能是在发布该表时,在不同的发布中存在多次发布该表的情况.

  解决方法:

  a、查明是否有多次发布该表的情况.

  在发布服务器的发布数据库中用运行如下SQL语句:select * from sysarticles

  order by dest_table

  查看在dest_table列中是否出现多次该表的信息,如是,则说明该表已被多次

  发布,可以用下一步中说明的方法来查看是哪些发布发布了该表。

  b、运行语句:select * from sysp lications,查看p id与上述信息相同的

  p id的内容,则就能确定是何种发布发布了相同的数据表。

  c、找到了发布后,如果是增加数据表,则不用删除该发布下的所有订阅,如果是

  去除发布的数据表,则需删除该发布下的所有的订阅信息,修改相应的发布内容

  ,重新制定相应的订阅.

  19.创建发布,错误,"请提供@job_id标识作业",

  是因为你删除了以前系统自动生成的作业。方法:工具-复制--禁用发布,重新配置

  发布、订阅服务器和分发,完成后,发布的数据库显示为一个手型的共享图标,再创

  建发布

  20.订阅和发布都删除完了,但禁用发布不成功,提示:无法除去分发数据

  库'distribution',该数据库正在使用.停止数据库,再启动数据库,再禁止发布.

  21.配置发布和分发向导,最后完成时错误:配置分发服务器:未能连接到

  服务器,因为distributor_admin未在该服务器上定义为远程登录

  你肯定在装完SQL SERVER以后,改了计算机名,虽然sql server 还可以用,但一用

  复制时,SQL SERVER读取了旧的计算机实例名,不信,你试试

  select @@SERVERNAME

  显示出来的,肯定不是你现在的计算机名.

  于是,你用

  sp_dropserver <(用select @@SERVERNAME显示出来的旧名)>

  go

  sp_addserver <你现在的计算机名>, LOCAL

  go

  例如:sp_dropserver 'E0184DF\SQL2K'

  go

  sp_addserver 'deboywang\SQL2K', LOCAL

  go

  重启sql server服务,问题就可以解决了

  除此之外,如果要修改@@Servername还可以使用下面的方法:

  1. exec sp_helpserver 检查你的server名字

  2. 如果不正确,用exec sp_setnetname修正

  另外,当注册的名字改为其他名字后,注册登记是成功的(在客户端工具里添加

  了匿名),发布时就会出现这个问题。

  22.强制订阅无法删除:在发布服务器上先后删除订阅和发布后,订阅服务器上该强

  制订阅始终存在,无法删除,问微软支持,得结论:

  sp_removedbreplication 'job'

  JOB为订阅复制的数据库名称。

  其他问题:

  =============

  注:

  0.不要去乱删 管理--sql server代理--作业的内容.严格按照先删订阅,再删发布

  来进行.

  1、如何忽略在分发中出现的报错

  a、在发布服务器的管理-》SQL server代理->作业->中,找到该发布的发布

  JOB,在属性->步骤->2运行代码程序-》编辑->命令->在命令语句最后添加 -

  skiperrors xxxx(xxxx是分发时报的错误号) , 指的是忽略该错误的意思。

  b、然后重新启动分发引擎.

  2.如何输出出错的信息?

  在待输出出错信息的JOB命令最后加入 -Output c:\temp\error.txt, -Output

  是命令,后面是待输出的文件路径和文件夹名.

  ================

  因为该发布不允许使用可更新的订阅,当 IDENTITY 列被传输到订阅服务器时,

  不会传输 IDENTITY 属性。(例如,在发布服务器上定义为 INT IDENTITY 的列

  在订阅服务器上将定义为 INT。)

  如果想将 IDENTITY 属性传输到订阅表,则必须进行如下操作:

  ? 使用 IDENTITY 属性和 NOT FOR REPLICATION 选项手工创建订阅表。您

  可以通过让 SQL Server 在应用快照之前执行自定义脚本来执行该操作。若要指

  定自定义脚本,请先创建发布,再创建脚本,然后在发布属性的“快照”选项卡

  上输入该脚本的名称。

  ? 设置名称冲突项目属性,以便 SQL Server 在订阅服务器上应用快照时不 会除去现有的表。该属性在项目属性的“快照”选项卡上。

  下列已发布表包含“标识”列:

  [dbo].[BookIndex]

  ===================

  SQL Server 要求发布的存储过程所引用的所有对象(如表和用户定义函数)在订

  阅服务器上都可用。如果引用的对象在此发布中未作为项目发布,则它们必须在

  订阅服务器上手工创建。

  在此发布中发布了下列存储过程:

  [dbo].[getChaNameList]

  [dbo].[setUpWebsite]

网友评论

登录后评论
0/500
评论
y0umer
+ 关注