不同SQL Server数据库之间表数据的实时同步-发布与订阅

数据库 专栏收录该内容
2 篇文章 0 订阅

最近要将不同服务器上数据库的表数据同步汇总,所以就涉及到了数据同步的问题,以前没有接触过,在网上找了找方法,

 大抵的方法有三种:

1,在数据库中编写触发器

2,写一个同步程序去完成同步

3,使用数据库的发布和订阅功能

以上前两种方法暂且不提,今天说说第三种方法:使用数据库的发布和订阅功能实现同一服务器下的不同数据库的表数据同步,以及不同服务器下的不同数据库的表数据同步。前提是源数据表结构和目标数据表结构必须相同。

先来说说【发布】和【订阅】的操作步骤,在文章的后面,会将这个过程中可能会遇到的所有问题做一个汇总,然后给出解决方法。

目录

1发布

2订阅

3发布和订阅过程中的可能遇到问题及解决方案


1发布

1,首先使用本机名称连接到数据库,不能使用IP地址连接数据库,至于为什么,在文后说明说到。【复制】,展开复制选项,可以看到两个节点:【本地发布】,【本地订阅】

2,鼠标右键点击【本地发布】,选择【新建发布

3,弹出【新建发布向导】对话框,选择【下一步】 

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

 5,选择发布类型,这里数据库有四种发布类型,每种发布类型下面都有类型说明,这里在选择选择【快照发布】,点击然后【下一步

如图6所示,选择要发布的表对象,在左侧的选择区域选择要发布的表信息,然后点击【下一步

 7,进入筛选表的设置界面,这里的筛选是指发布的表数据中的某一个或者全部字段只能为固定的值,从而达到当所有的订阅服务器接收数据时,接收到的该字段的值为发布时设定的值。如果不需要,直接点击【下一步

 8,进入快照代理界面,将界面上的两项内容选中

 9,如果需要修改数据同步的时间和频率,则点击【更改

 10,设置数据同步的频率每天执行的频率执行的开始时间,持续时间,设置完成点击【确定】,返回到上一界面,然后点击【下一步

 11,设置代理快照,点击【安全设置】,进入设置界面

 12,选择【在SQL Server代理服务账户下运行】和【使用以下SQL Server登录名】,登录名和密码是为了使订阅的服务器登录到发布服务器。设置完成点击【确定】,返回到上一个界面,然后点击【下一步

 13,该页面选择默认设置,直接点击【下一步

 14,为本次发布创建一个名称,然后点击【完成

 15,以上步骤全部做完之后,等待发布的创建完成,当提示成功时,表示本次发布创建成功

 16,返回到数据库的连接初始界面,的左侧处节点选择【复制】 - 》【本地发布】,可以在改节点下看到刚才创建好的发布

 至此,发布的相关操作已经做完,一个完整的发布已经成功发布。接下来要做的就是在需要同步数据的服务器上订阅该发布。

2订阅

在需要同步数据的服务器上添加订阅,订阅刚才我们添加的发布,这样可以实现数据库表数据之间的同步和迁移。

1,同样的是使用本机名称连接数据库,然后选择【复制】,展开该节点,选择【本地订阅】,鼠标右键点击该项,选择【新建订阅

2,进入新建订阅向导界面,初始界面同新建发布界面,选择【下一步

 3,进入为订阅选择发布的界面,如果是一个服务器不同数据库之间的表数据同步,则在发布服务器中选择本地服务器;如果是不同服务器之间不同数据库的表的数据同步,则在发布服务器中选择远程服务器。

 4,如果是不同服务器之间的数据同步,选择【发布服务器】的下拉框,选择第一项【查找SQL Server发布服务器】,会弹出【连接到服务器】的对话框,点击【服务器名称】一栏的下拉框,选择【浏览更多】,在打开的界面【选择网络服务器】,找到发布的服务器。

 5,找到该服务器之后,选择用实例名登录数据库,选择用SQL Server身份验证,登录名和密码则为源服务器创建发布时选择的登录名和密码

 6,选择连接,自动返回到选择发布服务器的界面,在数据库和发布区域,会将连接到的服务器的所有发布的数据库显示出来,例如这个的textdb就是刚才创建的发布数据库,然后展开该项,可以看到我们刚才创建的发布为111的名称,选中该发布,点击然后【下一步

 如图7所示,选择然后【在分发服务器***运行上所有代理】,【点击下一步

 如图8所示,选择订阅服务器,选中当前需要订阅的服务器,然后点击后面的【订阅数据库】,选择下拉框,然后选择目标数据库,之后完成选择【下一步

9,进入分发代理安全性设置界面,选择与订阅服务器的连接的选择按钮,进入设置界面 

 10,按照图中所示进行设置,SQL Server登录名和密码即为当前数据库的登录名和密码,设置完成点击【确定】,返回到上一界面,然后点击【下一步

 11,同步计划的设置,点击代理计划框,出现下拉框,选择需要的方式,完成设置点击之后【下一步

 12,初始化的设置,点击初始化时间设置框,出现下拉框,选择需要的初始化时间,完成设置点击【下一步

 13,其他选项全部默认,点击直接【下一步

14,点击完成,等待订阅的成功提示 

 至此,目标服务器端的订阅也成功配置。

以上发布和订阅同时完成之后,只要保证服务器之间的连接畅通,则数据会实时的实现同步。

以上只是一对一的服务器之间的数据同步,一个服务器同时订阅多个发布会有冲突,比如服务器1的甲数据库有一个表A,服务器2的乙数据库有一个表B,需要将数据库甲中表A的数据和数据库乙中表B的数据汇总同步到服务器3的数据库乙的C表中,A,B,C三个表的结构需要完全相同,在的服务器3单独订阅服务器1时,数据可以顺利同步,当同时订阅服务器1和服务器2的时候,在同步服务器1的数据时没有问题,在同步服务器2的时候,会自动覆盖掉服务器1的数据。

3 发布和订阅过程中的可能遇到问题及解决方案

在发布和订阅的创建过程中,往往会因为电脑的设置原因,而出现各种各样的问题,在这里整理一下最常见到的问题,并提供一些解决方案

1

问题:新建发布或者订阅,提示“无法连接到服务器,需要有实际的服务名才能连接到服务器”,

解决方案:该问题是因为使用了IP地址登录服务器导致的,需要使用实际的服务名登录服务器,具体的名称查看方法:右键【我的电脑】 - 【属性】即可查看到计算机名,使用该名称连接服务器即可

2

问题:新建发布或者订阅,提示“SQL Server复制需要有实际的服务器名称才能连接到服务器,不支持通过别名,ip地址或其他任何备用名称进行连接。请指定实际的服务器名称”xxxx“”

解决方案:该问题是由于更改计算机名称导致的。如果遇到此问题,则复制下面的SQL语句到数据库中执行

select @@servername
select serverproperty('servername')

执行以上两句代码,结果如上图所示,如果两个结果的名称不一致,则需要修改,修改代码如下:

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

执行以上代码,执行成功以后,需要重新启动SQL Server(MSSQLSERVER)服务,然后重启之后再使用一下代码查询。

select @@servername
select serverproperty('servername')

结果显示查询结果一致,则该问题解决。

3

问题:在创建发布的最后一步,提示一个警告,显示“SQL Server无法启动快照代理”

解决方案:该问题是由于SQL服务器的一个服务没有启动导致的打开SQL服务器的配置管理器,查看SQL服务器的代理服务是否启动,如果没有启动,则启动该程序即可

暂时遇到的这几种问题,以后遇到的在做补充。

评论 1 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

小妖嘤嘤嘤

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值