金沙澳门唯一官网:公布订阅及有关难题消除办

2019-12-07 09:34 来源:未知

0. 环境

  1. 无域环境
  2. 发布服务和分发服务器同一台主机
角色 主机名 IP 发布名 发布库名/订阅库名
发布服务器 Server1 192.168.1.100 test3 db1
分发服务器(与发布服务器同一实例) Server1 192.168.1.100 - -
订阅服务器 Client1 192.168.1.200 - db1

前言:

1. 修改host文件

在发布服务器和订阅服务器都修改C:WindowsSystem32driversetc文件,加入IP和主机名。如果是请求订阅,则发布服务器不用修改也要可以;如果是推送请求,则必需设置。因为SQL Server复制不能通过IP进行相关的设置。

  前两天接到领导的任务,将一个系统A的客户数据同步到另一个系统B中,以后客户录入入口只有A系统,B系统不提供录入入口,因为各种原因不能使用接口方式A系统和B系统直接交互同步,只能通过数据库重A库同步到B库。原想通过触发器直接些过去的,但在跨服务器方面遇到种种问题,稳定性太差最终放弃,选择使用发布订阅的方式;没想到发布订阅也没有想象的那么顺利,今天就来就发布订阅遇到的问题说说解决方法,不全面只是我遇到的问题;

2. 创建快照文件夹及相应的用户和权限

比如快照文件在发布服务器的D:ReplData下。在发布服务器和订阅服务器创建相同的Windows用户( 如果不想发布服务器创建新的Windows用户,则需要在发布服务器开启Guest用户),如repl_admin,并加入各自的administrator组中,并设置密码不能过期,不能修改密码。设置D:ReplData文件对于新建的用户repl_admin完全读写权限,并设置共享此文件夹。

这里,可能会有疑问为什么repl_admin已经是administrator组的用户,对D:ReplData文件夹是读取权限的,为什么还要设置repl_admin完全读写权限?后来测试在生成快照文件时,无法在文件夹\Server1ReplData写入。后面第4步会提到\Server1ReplData这个文件夹。

遇到问题:

3. 设置SQL Server Agent的启动用户

在发布服务器设置SQL Server Agent的启动用户为repl_admin(最好是在SQL Server Configuration Manager进行设置),并重启Agent。同样,在订阅服务器也做同样的步骤。注意,重启Agent可能会影响SQL Job的计划任务,生产环境上请检查重启带来的影响。

  1、如果服务器开启了防火墙,需要添加1433端口的出站入站

4. 在发布服务器新建发布和分发

在SSMS上,根据向导一步一步创建新的发布。如果没有分发服务器,在向导中,会进行创建。(分发的属性)设置快照文件为\Server1ReplData。最后可以生成创建发布的SQL脚本,可以保存起来,以后再重启创建,或是其他服务器需要创建发布,只需要修改一下脚本,再执行即可。

为什么不直接设置D:ReplData?其实是可以的,但默认使用\Server1ReplData这个文件的话,在订阅端默认也是读取这个快照文件夹\Server1ReplData,这样比较方便。

当然,可以手动再修改(可以单独修改发布的快照文件夹路径,也可以修改订阅时的快照文件夹路径),不过还是建议使用分发的设置的默认文件的网络路径格式。

也可以使用FTP或其他方法把快照文件复制到订阅服务器做初始化即可。SQL Server复制也支持备份数据库的方式进行订阅的初始化。

在第1步中,默认快照文件夹也是可以放到真正的网络盘上,而不是发布服务器上。考虑到直接写到网络盘,但需要考虑这可能会造成网络影响,如果在生成很大的快照过程中,造成网络阻塞,甚至中断,对生产造成影响。

  2、发布服务器发布成功后,在订阅服务器上订阅,显示订阅成功后但是在本地订阅下看不到订阅信息:

5. 在订阅服务器新建订阅

在SSMS上,根据向导一步一步创建新的订阅(以请求订阅pull subcription为例)。在Distribution Agent Security这一步,设置是这样的:

  • Run under the SQL Server Agent service account
  • Connect to the Distribution: Using the following SQL Server login
    这里使用了发布服务器的sa用户和密码。当然也可以另外创建专门的SQL Server复制账号来连接。
  • Connect to the Subscriber: By impersonating the process account

如果是推送push subcription的话,第2,3个选项是相反的。即Using the following SQL Server login填写的是订阅服务器的SQL Server账号,让分发服务器有权限推送数据到订阅服务器。

    1)可能是发布的快照路径权限问题,发布时一般默认在系统盘,可以将路径修改到可配置权限的文件夹下(见下面发布部署2.3),将路径下的repldata文件夹权限开放(注意:指定给这个文件夹设置,在上级设置不一定有效);

6. 设置添加新项目不初始化整个快照

在发布服务器经常会新创建表或其他数据库对象,如存储过程或函数等,如果要把这些新的项目加入到已经存在的订阅中时,需要初始化这些项目。但默认的设置是初始化整个快照所有项目的。这对于大的快照来说,成本很高。

下面设置只初始化新添的项目。

use db1;
GO

EXEC sys.sp_changepublication 
    @publication = 'test3', 
    @property = N'immediate_sync', 
    @value = N'false'
GO

EXEC sys.sp_changepublication 
    @publication = 'test3', 
    @property = N'allow_anonymous',
    @value = N'false'
GO

然后再启动快照代理即可对新添加的项目生成快照。
(右键选择发布,选择“查看快照代理状态”——“启动”)

相当于运行以下脚本:

EXEC sys.sp_startpublication_snapshot
@publication = 'test3'
go

    2)服务名称和主机名不同

    可以通过执行一下SQL查询是否相同

    1 select @@servername
    2 select serverproperty('servername')

    如果不相同执行下面SQL修改

金沙澳门唯一官网 1金沙澳门唯一官网 2

 if serverproperty('servername') <> @@servername

    begin

    declare @server sysname

    set @server = @@servername

    exec sp_dropserver @server = @server

    set @server = cast(serverproperty('servername') as sysname)

    exec sp_addserver @server = @server , @local = 'LOCAL'

    End

View Code

    需注意的是,改过之后必须要重启一下SQL 服务器才可以

    3)主机名和其它服务器主机名称相同

    修改主机名,重启主机,按上一种方法将服务器名称改为主机名称,重启服务;

    但是这样可能还会有问题:发布订阅都成功后,但是并不能同步数据,在发布服务器看同步状态,查看详细会看到说无法连接订阅服务器,使用SQL客户端远程连接订阅服务器发现使用IP方式可以连接,但用主机名称方式不能连接;这里咱们就要检查一下订阅服务器的登录名里面,会发现有一个以原来主机名称+‘/administrator’命名的一个登录名 

  金沙澳门唯一官网 3我们将这个登录名删掉,然后新建登录名

    金沙澳门唯一官网 4

修改之后在发布服务器上重新初始化发布就可以了,启动复制监视查看可以看到订阅正在运行,查看数据库数据同步成功

 

1部署事项

  1、发布服务器跟订阅服务器必须在同一局域网内

  2、发布的时候SQL Server 需要有实际的服务器名称才能连接到服务器。不支持通过服务器别名、IP地址或者其他备用名称进行连接。因此如果当前的SQL Server的连接是IP地址的话,最好断开连接,以实际的服务器名称重新进行登录

2 发布部署

  2.1  新建发布

    展开SQL Server 2008 服务器下的 【复制】 节点,会发现有【本地发布】和【本地订阅】两个节点,右击【本地发布】节点,选择【新建发布】

     金沙澳门唯一官网 5

  2.2  发布向导

    1、如果服务器第一次进行发布设置,会弹出【发布向导】对话框

     金沙澳门唯一官网 6

    2、设置【分发服务器】,选择第一个

     金沙澳门唯一官网 7

  2.3  快照文件夹

    点击【下一步】,会出现设置【快照文件夹】对话框,我们选择默认

     金沙澳门唯一官网 8

  2.4  发布数据库

    点击【下一步】,选择要发布的数据库

     金沙澳门唯一官网 9

  2.5  发布类型

    点击【下一步】,选择【发布类型】,我们选择 【事务发布】。

       金沙澳门唯一官网 10

  2.6  选择发布对象

    点击【下一步】,选择数据库中的发布对象,选择所需的表、视图,也可选择所有的表

     金沙澳门唯一官网 11

  2.7  项目问题

    点击【下一步】,SQL Server 要求已发布存储过程引用的所有对象(例如,表和用户定义函数)在订阅服务器上可用。如果没有将被引用对象作为此发布中的项目发布,则必须在订阅服务器上手动创建这些对象。(默认)

     金沙澳门唯一官网 12

  2.8 筛选表行

    1、点击【下一步】,进入【筛选表行】对话框:

     金沙澳门唯一官网 13

    2、如果需要筛选表行点击【添加】就会出现如下的筛选器对话框,可在筛选语句中添加SQL查询语句

     金沙澳门唯一官网 14

  2.9  快照代理

    不需要筛选,即所有数据全部同步,点击【取消】后,直接【下一步】,进入【快照代理】设置对话框,这里有两个选择一个是立即创建快照,一个是指定一个计划(比如可以指定xxx天xxx时间运行),我们选择第一个

     金沙澳门唯一官网 15

  2.10  代理安全性

    1、点击【下一步】进入【代理的安全性】设置

     金沙澳门唯一官网 16

    2、点击【安全性设置】,我们选择 SQL SERVER 用户

     金沙澳门唯一官网 17

  2.11  向导操作

    1、点击【确定】 后,返回 【代理安全性】设置对话框,继续点击【下一步】

     金沙澳门唯一官网 18

    2、点击【下一步】,我们给发布进行命名为:FaBu_TEST

          金沙澳门唯一官网 19

    3、点击【完成】,就会创建发布,并会显示创建发布的结果

     金沙澳门唯一官网 20

  2.12  设置文件夹权限

    发布创建完成后设置C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQL路劲下repldata文件权限

    金沙澳门唯一官网 21

  

3 订阅部署

  3.1  新建订阅

    右键点击【本地订阅】节点,打开,【新建订阅】对话框

     金沙澳门唯一官网 22

  3.2  订阅向导

    1、弹出新建订阅向导点

     金沙澳门唯一官网 23

    2、击下一步,选择发布服务器,选择查找SQL Server 发布服务器

     金沙澳门唯一官网 24

    3、弹出链接到服务器,链接到发布服务器。

    注:不支持通过服务器别名、IP地址等名链接,需用服务器实际名称进行链接

     金沙澳门唯一官网 25

    4、点击链接 ,选择要为其创建一个或多个订阅的发布, 我们选择发布服务器WIN-XXX 中的数据库发布 FaBu_TEST,然后点击【下一步】

    金沙澳门唯一官网 26

  3.3  分发代理位置

    在【分发代理位置】对话框中,选择第一项,点击【下一步】 

     金沙澳门唯一官网 27

  3.4  订阅服务器

    在【订阅服务器】对话框中,选择新建数据库,或者提前建好一个新数据库选择这个数据库

     金沙澳门唯一官网 28

  3.5  分发代理安全性

    1、在【分发代理安全性】对话框中,我们点击“...”,进入安全性设置,我们选则的是 SQL 帐户

     金沙澳门唯一官网 29

    2、输入订阅服务器SQL Server的登陆名和密码

     金沙澳门唯一官网 30

  3.6  同步计划

    点击【下一步】,设置代理计划,我们选择默认的“连续运行”

     金沙澳门唯一官网 31

  3.7  初始化订阅

    点击【下一步】,进入【初始化订阅】对话框,选择 “立即” 初始化

     金沙澳门唯一官网 32

  3.8  向导操作

    1、在【初始化订阅】点击【下一步】:选创建订阅

     金沙澳门唯一官网 33

    2、点击【下一步】:完成向导

     金沙澳门唯一官网 34

    3、点击【完成】,就会创建订阅,并显示创建结果

     金沙澳门唯一官网 35

 

TAG标签:
版权声明:本文由金沙澳门唯一官网发布于数据库管理,转载请注明出处:金沙澳门唯一官网:公布订阅及有关难题消除办