在服务器a有一个数据库task,需要把部分表部分字段发布订阅到服务器b的tasksiteinfo数据库上,但是a服务器有些特别,因为它除了有个默认的实例之外,还有一个命名实例:tzr06\sqlserver2008r2,如果是默认实例到不会遇到太多的问题,现在因为有命名实例在创建发布订阅的过程中出现了一些异常,所以这里做为记录;
(一) 环境信息
系统环境:windows server 2008 r2 + sql server 2008
r2
发布服务器:192.168.100.6,1433,服务器名称:tzr06
发布服务器命名实例:sqlserver2008r2
发布数据库:task
分发服务器:与发布服务器同一台机器
订阅服务器:192.168.100.8,1433,服务器名称:tzr08
订阅数据库:tasksubscribe
数据库帐号:replicationuser/ replicationpassword
(二) 搭建过程
上面提到的,发布服务器上有个默认实例和一个命名实例,本来默认实例的数据库端口为1433,后来我把它禁用了,再把命名实例的端口设置为1433,所以这个需要借助别名来实现发布订阅。
a. 发布服务器配置
首先在发布数据库和订阅数据库上创建相同的帐号和密码(replicationuser/
replicationpassword),并且设置task数据库的安全对象,设置这样的帐号的目的就是为了和程序连接到数据库的帐号区分开,可以做权限上的控制,方便问题的排查;
(figure1:帐号密码)
在e盘目录下创建文件夹:e:\repldata,并设置这个文件夹为共享目录,共享用户为bfadmin;
(figure2:文件夹权限)
需要设置sql server agent登陆帐号为上面文件夹访问用户bfadmin;
(figure3:sql server agent登陆帐号)
(figure4:测试网络共享)
(figure5:分发服务器)
如果你设置快照文件夹路径为:e:\repldata,即使你的发布服务器本身就是分发服务器,如果订阅服务器是另外一台机器,那么在请求(pull)订阅(如果是推送(push)订阅就没有这个限制)模式下订阅代理是无法访问到这个快照文件的;除非你发布服务器、分发服务器和订阅服务器都是同一台机器;你应该设置快照文件夹路径为:\\tzr06\
repldata;
(figure6:快照文件夹)
(figure7:选择发布数据库)
(figure8:事务发布)
(figure9:选择对象)
(figure10:选择对象)
(figure11:选择对象)
(figure12:初始化订阅)
(figure13:安全设置)
使用上面创建好的replicationuser帐号作为连接到发布服务器的帐号和密码;
(figure14:设置帐号密码)
(figure15:发布选项)
(figure16:发布名称)
(figure17:查看复制情况)
b. 订阅服务器配置
创建完发布服务器(分发服务器也一起创建了),接下来就可以创建订阅服务器了,下面是订阅服务器设置的具体步骤:
创建完了数据库帐号,我们接着来创建订阅,按照前面提到的在发布服务器上有命名实例,所以这里是按照tzr06\sqlserver2008r2来设置服务器名称的,但是在连接过程中出现了下面的错误:
(figure18:查找发布服务器错误信息)
使用上面的配置在订阅服务器上使用【连接服务器】的方式同样无法登录到发布服务器,防火墙的入站规则已经加入允许1433端口了,而且在发布服务器使用netstat查看端口,也是有监听的,为什么会连接不上呢?后来在【连接服务器】加入1433是可以登录的,如下图所示:
(figure19:登录发布服务器)
使用同样的方式却无法查找到发布服务器,出现了新的错误信息,如下图所示:
(figure20:查找发布服务器错误信息)
既然需要加端口号,那我们就尝试使用别名的方式,在64位的操作系统中,需要同时设置32位和64位的网络配置,设置别名为:tzr06
(figure21:别名参数值)
(figure22:32位别名)
(figure23:64位别名)
(figure24:查找发布服务器错误信息)
难道是tzr06有冲突?修改别名为:tzr06task
(figure25:修改32位和64位的别名)
(figure26:查找发布服务器错误信息)
在发布服务器上创建发布的时候,如果sql server数据库实例名与服务器名不一致,也会出现上面的错误,所以在发布服务器上执行下面的sql语句:
上面的结果为:
(figure27:查找发布服务器错误信息)
如果两个值不同,那到可以通过下面的方式进行修改:
后来请教高文佳,突然想到:“在分发服务器和订阅服务器上设置别名的时候,别名应该跟服务器的实例名要一致”继续做尝试,修改别名为:tzr06\sqlserver2008r2
(figure28:修改32位和64位的别名)
(figure29:选择发布)
(figure30:请求订阅)
(figure31:选择订阅数据库)
(figure32:分发代理安全性)
(figure33:设置帐号密码)
(figure34:同步计划)
(figure35:初始化)
(figure36:创建订阅)
(figure37:本地订阅)
1. 如果一开始你在发布服务器上设置的快照文件为本地路径,比如设置成e:\repldata,那么有可能出现下面的错误:
(figure38:系统找不到指定的路径)
这个时候你重新发布订阅是没有默认路径可以设置的,可以修改?我没找到可以设置的地方,只能通过另外一种方式进行修改,在发布属性中修改快照路径:
(figure39:默认文件夹)
(figure40:设置文件夹)
在订阅服务器上修改订阅属性的快照文件夹:
(figure41:备用文件夹)
2. 在订阅服务器上同样需要设置sql server agent登陆帐号为上面文件夹访问用户bfadmin,不然会出现下面的错误:
(figure42:错误信息)
设置帐号之后需要重启sql server agent服务
(figure43:订阅服务器sql server agent设置)
3. 在发布服务器上无法对订阅服务器进行【重新初始化】,报下面错误信息,即使在发布服务器上设置了:
(figure44:错误信息)
上面这个错误暂时还没有解决,不过关于命名实例的复制已经成功了,虽然成功了,但是还是要建议大家尽量不要在生产环境中安装多实例,避免出现不必要的问题;