前言:
前两天接到领导的任务,将一个系统A的客户数据同步到另一个系统B中,以后客户录入入口只有A系统,B系统不提供录入入口,因为各种原因不能使用接口方式A系统和B系统直接交互同步,只能通过数据库重A库同步到B库。原想通过触发器直接些过去的,但在跨服务器方面遇到种种问题,稳定性太差最终放弃,选择使用发布订阅的方式;没想到发布订阅也没有想象的那么顺利,今天就来就发布订阅遇到的问题说说解决方法,不全面只是我遇到的问题;
遇到问题:
1、如果服务器开启了防火墙,需要添加1433端口的出站入站
2、发布服务器发布成功后,在订阅服务器上订阅,显示订阅成功后但是在本地订阅下看不到订阅信息:
1)可能是发布的快照路径权限问题,发布时一般默认在系统盘,可以将路径修改到可配置权限的文件夹下(见下面发布部署2.3),将路径下的repldata文件夹权限开放(注意:指定给这个文件夹设置,在上级设置不一定有效);
2)服务名称和主机名不同
可以通过执行一下SQL查询是否相同
1 select @@servername
2 select serverproperty('servername')
如果不相同执行下面SQL修改
if serverproperty('servername') <> @@servername
begin
declare @serversysnameset @server = @@servername
exec sp_dropserver @server = @server
set @server = cast(serverproperty('servername') assysname)exec sp_addserver @server = @server , @local = 'LOCAL'
End
View Code
需注意的是,改过之后必须要重启一下SQL服务器才可以
3)主机名和其它服务器主机名称相同
修改主机名,重启主机,按上一种方法将服务器名称改为主机名称,重启服务;
但是这样可能还会有问题:发布订阅都成功后,但是并不能同步数据,在发布服务器看同步状态,查看详细会看到说无法连接订阅服务器,使用SQL客户端远程连接订阅服务器发现使用IP方式可以连接,但用主机名称方式不能连接;这里咱们就要检查一下订阅服务器的登录名里面,会发现有一个以原来主机名称+‘/administrator’命名的一个登录名