sqlserver本地订阅无法正常工作几个问题的总结

发布日期:2013-02-07 14:21:51

  首先可能会出现无法执行sp_replcmds的错误提示,这个问题主要需要将发布数据库的Owner设置为sa,并且执行下面的脚本。

use 数据名
EXEC sp_repldone @xactid =NULL, @xact_segno =NULL, @numtrans = 0, @time =0, @reset =1
EXEC sp_replflush
/*
i.  sp_repldone : 更新标识服务器的上次分布式事务的记录.
此存储过程在发布服务器的发布数据库上执行.
(当 xactid 为 NULL、xact_seqno 为 NULL 并且 reset 是 1 时,日志中的所有复制事务都标记为已分发。此过程在事务日志中存在不再有效的复制事务并且想截断该日志时很有用)
-----
ii. sp_replflush: 刷新项目高速缓存.
为获得高效率,项目定义存储在高速缓存中。每当修改或除去项目定义时,其它复制存储过程都使用 sp_seplflush。
只有一个客户端连接能够具有对给定数据库的日志读取器访问权。如果某个客户端具有对数据库的日志读取器访问权,则执行 sp_replflush 将导致该客户端释放其访问权。这样,其它的客户端就能使用 sp_replcmds 或 sp_replshowcmds 扫描事务日志。
*/

  这里要注意的是订阅服务器连接发布服务器所使用的sqlserver用户名我也都用了sa账户,用其他账户似乎无法正常工作。

  其次会碰到类似下面的报错

  SQLServerAgent   错误:   运行作业   HB-PUBLISH-hbonline-hbonlineAllTable-HB-BACK-HBOnline-ED02F412-2B7E-45E7-BFD0-0AD9BFF84440   的请求(来自   用户   sa)被拒绝,因为该作业已应   用户   sa   的请求正在运行.

  碰到这个问题首先是检查下sqlserver agent服务是否正常运行,其次就是看下上面所提到的发布服务器的数据库和订阅服务器的连接账户是否都设置成了sa账户。

  最后数据订阅正常运行后会发现没有数据的问题,查看详细错误会提示类似下面的错误

  由于出现操作系统错误 3,进程无法读取文件

  碰到这个问题可以参考下面这篇文章

 

错误消息:
由于出现操作系统错误 3,进程无法读取文件“D:\DBSYNC\unc\FLOORWEB_FLOORLINK2_TESTFLOOR\20081128174839\ufoCorpAccount_2.pre”。 (源: MSSQL_REPL,错误号: MSSQL_REPL20016)
获取帮助: http://help/MSSQL_REPL20016
系统找不到指定的路径。
(源: MSSQL_REPL,错误号: MSSQL_REPL3)

************************解决办法*****************************************************

就是订阅服务器读取不到快照文件夹位置.这也导致了“订阅服务器无法重新初始化非immediate_sync发布的订阅”。

可能的原因较多,1、没设置共享或者没共享给跟订阅服务器共同的账户权限;2、IPC连接被关闭,订阅服务器无法连接到发布服务器共享资源。

解决办法:

可以将快照文件夹D:\XX复制到订阅服务器F:\XX

某个订阅属性-》快照位置-》“备用文件夹”,快照文件夹-》F:\XX。应该就可以了。


1.首先,在创建发布时需要指定一个发布快照位置,并且会提示你订阅服务器可能无法访问该目录(不知你有没有注意),每次生成快照都会将快照文件放在该目录下。
2.其次,在创建订阅时,需要你指定快照位置,一般为发布缺省位置(不知你这次注意没有)
3.那么,要解决你的问题只有两种方式
1)第一种:在创建发布和订阅时指定一个两个服务器都能访问的目录。 (上面案例就是此步遇到障碍)
2)第二种:每次自己将发布快照目录中的文件通过网络(或移动设备)拷贝到订阅指定的快照目录中。(上面解决办法就用该种)