SQL Server 事务复制爬坑记

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

1、复制功能概述sql

  SQL Server 复制功能实现了主从库的分离,从而将主库的压力分解掉,主库就主要负责数据的更、改等,而主库主要负责查询。(废话一句:本人之因此入了这个坑,仍是由于项目须要,我勒个去~~,真的老血都吐了3.7坛了都)。另外,有了主、从库,则从另外一个方面,也多了一层安全性,即:备份。万一主从出了什么问题,从库却还在。数据库

  本文主要讲述的是经过:发布 -------- 订阅的方式实现数据库的主、从分离。所以,必然的,将须要配置一个发布服务器 与 一个订阅服务器。其中发布服务器负责将数据分布到相应的订阅服务器上,而订阅服务器,则负责接收数据,并将数据整合、更新到本身库上,从而保证其数据与主库同样。下面将本身配置发布与订阅的流程以及遇到的问题详细记录以下。安全

  注意:如下配置在阿里云ECS服务器环境下操做。服务器

2、配置前的准备工做网络

DBServer 机器两台,分别为:DBServer_master 与 DBServer_slave,操做系统均为:Windows Server 2008 r2 x64阿里云

SQL Server x64 Enterprize 版本(注意:使用企业版本,标准版本好像不支持事务复制,先前用的是绿色版本是不支持的,后来改用企业版就能够了)。在安装 SQL Server 时,建议全选全部组件。不然复制相关的组件必须要钩选。spa

3、发布与订阅操作系统

  请查看参考文献资料。关于这部分的操做网络上能够查到很多,所以再也不多作介绍。.net

4、注意事项

  关于这部份内容其实才是真正的核心所在,网络上的文章几乎都只介绍了若是建立发布与订阅的标准流程,但其间可能会遇到的很是很是多的问题都被省掉不写。现特将本人遇到的问题都一一记录下来,以备你们查阅,少走弯路。

  1. Master服务器的网络可见须要开启。开启步骤以下:
    a) 服务 -> SSDP Discovery 启动该服务并设置自动启动
    b) 服务 -> UPnP Device Host 启动该服务并设置自动启动。(注意:该服务必定是后于 a) 点的服务开启)
    c) 右键 "网络" 图标 -> 打开网络和共享中心 -> 更改高级共享设置 -> 点选"启用网络发现"
    d) 右键 "网络" 图标 -> 打开网络和共享中心 -> 更改高级共享设置 -> 点选"启用共享以即可以访问网络的用户能够读取和写入公用文件夹中的文件"
  2. Slave服务器也按照上面第1点的操做开启网络可见性
  3. Master 服务器 与 Slave 服务器都创建以下 Windows 帐户,以供 SQL Server 事务复制中进行链接使用。
    a) 控制面板 -> 用户帐户 -> 管理其余帐户 -> 建立一个新帐户 -> 输入新用户名称(如:sql_dbuser)和密码(如:abcdefg)。
    提示:选择标准帐户便可。
  4. 新建目录(如:D:\abc\master_slave),并将 master_slave 目录共享
    注意:
    a) 新建完共享目录后,必定记得在 Slave 服务器上尝试打开该远程目录,若是能够打开,则说明该目录可远程访问。(不然还怎么同步数据了?)
    b) Master 服务器与 Slave 服务器的网络环境搭建完成后,双方要互相ping以及telnet一下,看下是否可以互通,只有互通了,才可能顺序完成复制。
    提示:telnet的端口通常是1433,由于数据库安装好后,没什么特殊更改,默认就是1433端口。
    c) 正常状况下,要开放1433端口。(本人是没处理该细节,由于先前就已经在运行的Master服务器,因此确定是有开放的)
  5. master_slave 目录共享后,为其添加 sql_dbuser 用户的读写权限。(注意:建议将 Everyone 给移除)
  6. Master 服务器与 Slave 服务器的 SQL Server 代理服务以 sql_dbuser 用户身份登陆。下面以 Slave 服务器的 SQL Server 代理服务的设置为例进行描述
    a) 打开"SQL Server 配置管理器" -> SQL Server 服务 -> 右键"SQL Server 代理 (MSSQLSERVER)" -> 属性
    b) 点选"本帐户" -> 在帐户名右侧点击"浏览" -> 输入"sql_dbuser" -> 检查名称 -> 点击肯定 -> 输入密码。(注意:SQL Server 代理须要重启)
  7. Master 服务器与 Slave 服务器须要开启 Named Pipes 以及 TCP/IP 协议。
    a) 打开"Sql Server Configuration Manager" -> SQL Server 网络配置 -> MSSQLSERVER 的协议
    b) 右键"Named Pipes" -> 启用
    c) 右键"TCP/IP" -> 启用
    注意:右键"TCP/IP" -> 属性 -> IP 地址 -> IP2的 -> "活动"有可能须要设置为"激活"(本人这边是设置为激活状态的,本来是未激活的)
  8. 在建立发布或订阅的过程当中,有可能会由于计算机名被修改,致使建立不了。此时可以使用下面语句判断计算机名称是否被修改,以及修正该问题
    1 IF SERVERPROPERTY('servername') <> @@SERVERNAME
    2 BEGIN
    3     DECLARE @server sysname
    4     SET @server = @@SERVERNAME
    5     EXEC sp_dropserver @server = @server
    6     SET @server = CAST(SERVERPROPERTY('servername') as sysname)
    7     EXEC sp_addserver @server = @server , @local = 'LOCAL'
    8 END
  9. Master 服务器须要建立别名
    a) 打开"Sql Server Configuration Manager" -> SQL Native Client 10.0 配置(32/64位) -> 别名
    b) 右键 -> 新建别名... -> 
            在别名处输入:计算机名。(如:DBServer_master)
            在端口处输入:1433
            服务器处输入:127.0.0.1
  10. Slave 服务器须要建立别名
    a) 打开"Sql Server Configuration Manager" -> SQL Native Client 10.0 配置(32/64位) -> 别名
    b) 右键 -> 新建别名... ->
            在别名处输入:DBServer_master
            在端口处输入:1433
            服务器处输入:DBServer_master 的内网IP地址
  11. Master 服务器与 Slave 服务器的服务器代理帐户须要开启。下面以 Slave 服务器的 SQL Server 设置为便进行描述
    a) 打开"Microsoft SQL Server Management Studio" -> 链接数据库对象(注意:请以本地计算机登陆,不要使用IP或localhost之类的登陆,数据库帐户可使用 sa 帐户),假如链接成功后的数据库对象为:iZir3n162rkr3iZ (SQL Server 10.50.1600 - sa) -> 右键 -> 属性
    b) 点选"安全性" -> 将"服务器代理帐户"下的"启用服务器代理帐户"复选框钩选 -> 输入代理帐户 sql_dbuser 以及密码 -> 肯定
  12. 在 Slave 服务器上若是新建好了订阅后,记得设置一下快照的信息。
    a) 右键新建好的本地订阅 -> 属性 -> 快照 -> 将"快照位置" 配置为 "备用文件夹"
    b) 将"快照文件夹" 配置为 "\\{Master cumputer name}\master_slave" 路径
  13. 在 Master 服务器上若是新建好了发布后,记得设置一下快照的信息。
    a) 右键新建好的本发发布 -> 属性 -> 快照 -> 将"快照文件的位置"下的 "将文件放入默认文件夹" 复选框的钩取消
    b) 将"快照文件的位置"下的 "将文件放入下列文件夹" 复选框的钩选中,而后指定先前建立好的共享目录路径。(如:D:\abc\master_slave)
  14. 成功新建立好本地发布与本地订阅后,能够分析并执行一下以下语句
     1 SELECT immediate_sync ,allow_anonymous FROM dbo .syspublications
     2 
     3 -- sp_helppublication;
     4  
     5 EXEC sp_changepublication
     6     @publication = 'xxxxxx_Pub',    -- 此处将 xxxxxx_Pub 换成本身建立的本地发布
     7     @property = 'allow_anonymous' ,
     8     @value = 'false'
     9 GO
    10 EXEC sp_changepublication
    11     @publication = 'xxxxxx_Pub',    -- 此处将 xxxxxx_Pub 换成本身建立的本地发布
    12     @property = 'immediate_sync' ,
    13     @value = 'false'
    14 GO
  15. 一个注意点:在成功创建好了发布与订阅后,对于新增的表,是没办法自动同步的,因此必须要从新单独对这些新增的表进行钩选同步才可,但记录的修改、字段的添加什么的,却是能够的。

5、参考文献(资料)

  主要参考资料

  •  https://blog.csdn.net/u012861467/article/details/76411216
    这篇文章说的是快照复制,但有许多细节、注意事项也是有说起到,对我的的帮助很多,点个赞
  • http://blog.51cto.com/46562434/1156582
    这篇文章说的是如何开启 Windows Server 2008 r2 的网络发现的
  • https://www.cnblogs.com/linyanyao/p/4513257.html
    这篇文章说的是当SQL Server安装后,计算机名称被更改了,要如何才能确认是否被修改,以及如何才能解决修正

  备用参考资料

  • https://www.cnblogs.com/songafeng/p/3839955.html这篇文章说的是同一局域网发布不了其余发布、订阅的解决办法。(提示:本人没用到这块处理就已经OK了,因此我的感受这个是非必要的)
相关文章
相关标签/搜索