两个都是win2003server装sql2005x64版的,两台机都是1433端口,不在一个局域网内,相距很远,上千公里。但是网络连接还是挺快的,现在要把一台sqlserver中的一个库复制到另一个,保持同步,我筠选择是的事务复制。 
现在我身边的这台机,简称sqlserver1,当成发布机,远程机,是sqlserver2,是订阅机。
如前所述,我现在吐血了,事情的经过是事这样的:  
在本地机新建发布,正常,再新建订阅(推送订阅)正常,但是打开复制监视器,老提示有错误:进程无法连接上subscriber。我本地机和远程机sqlagent服务都已经建了一个独立用户(加入管理员组了),并且sqlserver 配置管理器改成此账号运行了。另外我也把发布服务器上的快照目录改成//XXXX/sqlrepldata这样的目录形式了,并且也把目录安全设置中加上了刚建的账号的全部控制权限了,但是这一切都没用,还是提示连不上subscripber,但是我本机明明是可以连上远程机的,因为2台机已经互相注册过了。本地机可以直接打开远程机的数据库。而且这2台机都是用别名进行注册的。后来想推送不行,我就在远程机上进行请求订阅,还是不行。在本地机新建发布,正常,发远程机建订阅(请求订阅),也正常。但是就是查看同步状态时,老是提示什么:  由于出现操作系统错误 53,进程无法读取文件“\\xxxx\MssqlReplData\unc\xxxxxxx.pre”。 (源: MSSQL_REPL,错误号: MSSQL_REPL20143)
获取帮助: http://help/MSSQL_REPL20143
找不到网络路径。
 (源: MSSQL_REPL,错误号: MSSQL_REPL53)   这个\\xxxx\\mssqlrepldata这样的共享就是在网上找了N多解决方法以后自已照做的,结果根本没用,因为这些人老是提到一个就是说必须要在同一个域中,问题是我2台sqlserver不在一个域中,所以不明白为何要搞什么共享。实在蛋疼,实验结果也是一样,根本没用。还是出错。
后来杂七杂八的还出现过一些错误:
  已以用户 xxxx 的身份执行。 客户端没有所需的特权   总之就是一点,就是无法复制。我就想不通ms把这个复制搞的这么复杂干什么,就算你搞复杂了,你难道不能把说明写的详细一点嘛。例如一定要指定说明2台sqlserver都不能改端口,我前面就是因为有一台sqlserver为了防止攻击,改过了1433,结果死活建不了订阅,后来改成1433就好了,能建订阅了,但是还是出错。在我看来,复制明明就该很简单,2台sqlserver,只要能通信,就该能复制啊。你不能把全部流程都写出来吗?哪一条不满足为何不让大家一看就知道呢,非要搞这么垃圾的一大堆设置出来折腾人。唉。累的吐血。想看微软的帮助文件,结果还没看几分钟,就给转的眼花潦乱。 当年sql2000的时代,我也配置过复制,当时也能配置成功,现在为何就不行了呢,当时我记得是在局域网里配置的。现在变成公网就不行了吗?我两台机都是公网ip。又不是一个内网一个外网。
请各位sql达人给点提示呢,多谢了。

解决方案 »

  1.   

    又经过测试,把原来的//xxx/dir这样的目录共享删除 ,还是改成普通文件夹的快照存放方式,现在还是提示错误,现在提示是:系统找不到指定的路径。  原来用网络共享的方式是:找不到网络路径。
    nnd.我这个目录已经设为:everyone都可以完全空制了,管理员组和新建的那个账号都是完全空制了,怎么可能还是无法找到路径呢,我已经出离气愤了。
      

  2.   

    还有一些贴子里提到的:TCP/IP 启用 和 Named Pipes 启用。 这个我也全部试过了,均无效。还有一些贴子里提到什么要在sql里面建一个和新建的windows管理员账同名的登陆名,并赋予要发布的数据库的public和dbowner权限,我也试过也,也没用。
      

  3.   

    经过N个小时的搜索,找到原因了,只需要在发布机上的Hosts文件中加上一个ip地址指向订阅机的别名即可。 这一点我怎么之前看了N多的资料都没发现,这该死的微软真恶心。  不过现在又来析问题了。老提什么没有text和image的令拍,无法复制大容量数据