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:\Windows\System32\drivers\etc文件,加入IP和主机名。如果是请求订阅,则发布服务器不用修改也要可以;如果是推送请求,则必需设置。因为SQL Server复制不能通过IP进行相关的设置。

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

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

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

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

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

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

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

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

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

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

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

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账号,让分发服务器有权限推送数据到订阅服务器。

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

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

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

  1. use db1;
  2. GO
  3. EXEC sys.sp_changepublication
  4. @publication = 'test3',
  5. @property = N'immediate_sync',
  6. @value = N'false'
  7. GO
  8. EXEC sys.sp_changepublication
  9. @publication = 'test3',
  10. @property = N'allow_anonymous',
  11. @value = N'false'
  12. GO

然后再启动快照代理即可对新添加的项目生成快照。

(右键选择发布,选择“查看快照代理状态”——“启动”)

相当于运行以下脚本:

  1. EXEC sys.sp_startpublication_snapshot
  2. @publication = 'test3'
  3. go

SQL Server事务复制搭建与同步经验的更多相关文章

  1. SQL Server 事务复制分发到订阅同步慢

    原文:SQL Server 事务复制分发到订阅同步慢 最近发现有一个发布经常出现问题,每几天就出错不同步,提示要求初始化.重新调整同步后,复制还是很慢!每天白天未分发的命令就达五六百万条!要解决慢的问 ...

  2. SQL Server 事务复制爬坑记

    SQL Server 复制功能折腾了好几天了,现特将其配置过程以及其间遇到的问题记录下来,以备日后查阅.同时,也让“同道”同学们少走不必要的弯路.如果有不对之处,欢迎大家指正,欢迎沟通交流. 一.复制 ...

  3. sql server 数据库复制实现数据同步常见问题(不定期更新)

    sql server2008数据库复制实现数据同步常见问题 在原作者基础上追加 sql server2008数据库复制实现数据同步常见问题 23.发布 'xx' 的并发快照不可用,因为该快照尚未完全生 ...

  4. SQL Server事务复制(sql 2008 r2)

    一.环境准备 1.两个虚拟服务器 主机1:XINXIBU01  作为发布和分发服务器   主 机2:XINXIBU02 192.168.1.160  作业阅服务器 2.SQL SERVER sql 2 ...

  5. [20170706]SQL Server事务复制订阅端,job不小心被删,修复

    右击还存在的订阅,生成脚本,有个过程sp_addpullsubscription_agent 执行,发现报错说distribution agent 已经存在 执行: UPDATE dbo.MSrepl ...

  6. (初稿)SQL Server 复制(Replication)系列(2)——事务复制搭建

    原文:(初稿)SQL Server 复制(Replication)系列(2)--事务复制搭建 本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为 ...

  7. SQL Server 2012复制教程以及复制的几种模式

    简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...

  8. sql server 本地复制订阅 实现数据库服务器 读写分离(转载)

    转载地址:http://www.cnblogs.com/echosong/p/3603270.html 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下S ...

  9. sql server 本地复制订阅 实现数据库服务器 读写分离

    再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 ...

随机推荐

  1. android中得到颜色,图片资源的方式

    button01.setBackgroundColor(getResources().getColor(R.color.red)); color.xml colors.xml <?xml ver ...

  2. android R.layout 中找不到已存在的布局文件

    在R.layout.test文件时,总是找不到您想要的文件,可是它明明就在layout文件下面,而且在R.Java中也已经生成了,那么找不到的原因就是你导入了Android.R的包,这样你永远找不到你 ...

  3. 【UOJ Round #5】

    构造+贪心/数论 为什么只有两个标题呢……因为第二题我不会…… 怎样提高智商 构造题……然而一开始半天我都yy不出来…… 后来我想:这题应该不会特别麻烦,而且既然样例只给了1,可能再给大一点就让人发现 ...

  4. REST构架风格介绍之一:状态表述转移

    转载自:Todd Wei   http://www.cnblogs.com/weidagang2046/archive/2009/05/08/1452322.html REST(Representat ...

  5. 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.cpp -- 训练

    说实话,具体的训练公式,我没有自己推导,姑且认为他写的代码是对的.总体上看,用bp的方法.特殊之处,在于输入层和输出层是完完全全的“同一层”. void dA::get_corrupted_input ...

  6. jboss支持远程访问配置

    jboss有个特点,在本机启动之后,只能在本机的网页访问 http://localhost:8080,在其他机器上访问不了jboss服务. 1.关闭jboss服务端的防火墙 解决方法如下: (dcm4 ...

  7. Asp.Net 控件 GridView

    这两天做的作业都得用到visual studio 越来越发现其功能真心强大 前几天Asp.Net做了个界面增删查改的作业(连接数据库),用到了个组件GridView,感觉很强大 在这里小结一下(这里主 ...

  8. Subset II leetcode java

    题目: Given a collection of integers that might contain duplicates, S, return all possible subsets. No ...

  9. 已知(x,y,z,yaw,pitch,roll)如何得到4*4的转换矩阵?

    作者:Nicholas链接:https://www.zhihu.com/question/41514206/answer/104827395来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  10. SpringMVC验证框架Validation特殊用法

    基本用法不说了,网上例子很多,这里主要介绍下比较特殊情况下使用的方法. 1. 分组 有的时候,我们对一个实体类需要有多中验证方式,在不同的情况下使用不同验证方式,比如说对于一个实体类来的id来说,保存 ...