SQL Server创建发布订阅

Posted 李公子lm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server创建发布订阅相关的知识,希望对你有一定的参考价值。

背景

最近在研究基于Sqlserver 发布订阅实现的读写分离功能,踩了些坑,在此记录一下。

发布订阅是有一台主数据库,对应多台从数据库,当主数据库数据有变化时,同步到从数据库,从而保证数据的一致性,可以由主数据库统一管理,也可能有从数据库单独管理。

准备工作

由于目前打算在本机进行测试,所以首先在Sql Server里新建一个数据库名为Test 里面有一张表Users,里面有两条数据。

ps: 记得设置主键


接着在新建一个名为Test1的空数据库。我们之后的想要的效果就是,当Test库下有数据或者表结构变化了,自动同步到Test1这个库。

接着在D盘新建一个空文件夹名为sharedb用来保存快照,并对文件夹设置为共享。这里有点注意的地方,设置为共享之后,记得在网络和共享中心。设置为无密码保护的共享。


之前就是在这里出问题,导致无法访问该文件夹。

准备工作这就算完成了,接下来开始创建发布与订阅。

创建发布

首先通过服务器名称的方式连接上数据库,因为不通过服务器名称连接的话,创建发布时会弹出这样的提示窗口。这里服务器名称一般是指主机名。

通过服务器名登录。

选择复制>>本地发布 右键>>新建发布,点击下一步

选择我们要发布的数据库,点击下一步。

选择事务发布,点击下一步。

这里选择需要同步的表,点击下一步。

这里添加不需要发布的数据,一般直接点击下一步就好。

选择立即创建快照,点击下一步。

这里点击安全设置。

这里选择用Sql server用户名密码登录,这个密码就是当前登录发布服务器的密码。点击确定。

配置好之后点击下一步。

选择创建发布,点击下一步。

这里输入发布名称,之后点击完成。

这里就开始创建发布了。等待一会。

OK,发布成功。

别急,还没完成,选择本地发布下的刚发布的选项,点击右键。选择属性。

在快照里,填入我们我们刚共享的文件包的网络路径。

就是这个路径。

OK,到目前为止,发布就已经设置好了,接下来开始设置订阅。

创建订阅

在本地订阅上右键点击,新建订阅。点击下一步。

选择我们刚刚设置的发布服务器,以及新建的发布,点击下一步。

这里选择推送订阅和请求订阅都可。请求订阅可以减轻分发服务器的压力。点击下一步。

这里选择一个订阅服务器,由于我只有一台电脑,既是发布服务器也是订阅服务器。选择好数据库,点击下一步。

点击右边的三个点,进行订阅服务器的账号密码设置。

由于我订阅服务器和分发服务器是一样的都是本机,所以密码也是一样的, 正常情况下需要输入订阅服务器的数据库密码。点击确定。

点击下一步。

点击下一步。

点击下一步。

点击下一步。

点击完成。

订阅创建成功了。

在新建好的订阅上右键属性,填入快照文件夹的网络路径。

到这里还没完。选择发布后的文件,右键,点击 启动复制监视器。

不出意外的话,应该会看到一个错误。

双击错误,可以打开详细信息,可以看到是访问被拒绝。

这时,右键点击发布文件,选择查看快照代理状态。

这里需要手动点击启动。若启动失败,则需要检查共享文件夹权限设置。

若发现多了一个未知联系人,说明订阅发布/订阅服务已经能连上该文件夹了。

若都设置好了的话,再次查看复制监视器,应该就没有错误了。

功能测试

由于我们是新建的一个空的数据库用来订阅,所以在设置好之后,去看下Test1.
从下图可以看到,我们的Test1已经自动同步了Test下的表结构和数据。

接下来我们在Test库的下的Users表新加一条记录。

Insert Into Users(Id,Name) values ('3','王虎')

大概5秒钟,Test1下面也自动同步了该数据,在复制监视器中可以看到,数据是每5秒同步一次。

have a wonderful day

以上是关于SQL Server创建发布订阅的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server创建发布订阅

怎样设置sql server2012中的订阅

SQL Server读写分离之发布订阅

SQL Server 复制 - 没有可用的复制事务

SQL Server提高事务复制效率优化订阅初始化优化

SQL Server 中心订阅模型(多发布单订阅)