
# Microsoft SQL Server发布与订阅
Microsoft SQL Server提供的发布与订阅功能，利用复制技术来实现数据同步，可以通过其提供的发布与订阅功能实现数据的读写分离和线下线上数据同步。
本章节提供使用SQL Server Management Studio（SSMS）配置发布与订阅的方法。RDS for SQL Server支持在界面创建发布和订阅，详见[创建发布](https://support.huaweicloud.com/usermanual-rds-mssql/rds_sqlserver_08_0026.html)。
#### 准备工作
**环境说明：**
1. 本地环境：windows系统，Microsoft SQL Server 2014 SE标准版。
2. 线上环境：
   - 华为云 Microsoft SQL Server 2014 SE 单机实例 2u16g规格 1个，绑定弹性公网EIP。
   
   - 华为云 Microsoft SQL Server 2014 SE 主备实例 4u8g规格 1个，绑定弹性公网EIP。
    
**环境搭建**
- 发布服务器（Publisher）：数据写入源头，维护源数据，决定将特定数据分发到分发服务器（Distributor），此处即为本地环境构建的服务器。
  1. 使用SQL Server Management Studio（SSMS）配置发布服务器，以sa身份登录本地数据库。单击右键"复制"，选择"配置分发"，可以将自己作为分发服务器，也可以选择配置其他服务器作为分发服务器，单击"下一步"。
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/public_sys-resources/notice_3.0-zh-cn.png)
     - sa为管理员账号。
     
     - 登录的账户必须具有**sysadmin**权限，否则无法配置发布和订阅。
      
     图1配置发布服务器   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229707994.png "点击放大") 
  
  2. 指定快照文件夹的根位置并记录，单击"下一步"。
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/public_sys-resources/note_3.0-zh-cn.png)
     发布需要配置相关的代理权限，以供代理账户有权限操作该文件夹，否则会导致发布失败。
     图2快照文件夹   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548194.png "点击放大") 
  
  3. 选择分发数据库和日志文件的名称及位置，单击"下一步"。
     图3配置分发向导   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229707978.png "点击放大") 
  
  4. 使服务器能够成为发布服务器后使用此分发服务器，单击"下一步"。
  
  5. 单击"完成"，执行此配置操作。
     图4完成配置   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229708022.png "点击放大") 
   

- 配置代理账户控制文件。
  1. 根据快照文件夹目录地址，需要将***agent*** ***代理账户*** 加入到该文件的控制属性。未加入该账户到文件控制会出现拒绝访问路径的报错信息：
     图5报错信息   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627565.jpg "点击放大") 
  
  2. 打开本地SQLSERVER配置管理器，找到对应代理，右键单击选择"属性"，复制"account name"。
     图6复制代理账户名   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229708042.jpg "点击放大") 
  
  3. 返回设置的快照文件夹的目录，右键单击文件夹选择"属性"，在弹出框中选择"安全 \> 编辑 \> 添加"，选择位置为本地，名称为代理账户名称，单击"确定"，勾选所有权限设置即可。
   
- 分发服务器（Distributor）：数据分发源，负责具体执行发送到哪个订阅服务器。将分发和发送服务器都指定为本地服务器，即发送和分发为同一服务器。因而无需再做多余设置。更多设置信息可参考官方文档[分发服务器](https://docs.microsoft.com/zh-cn/sql/relational-databases/replication/configure-distribution?view=sql-server-2014)。
- 订阅服务器（Subscriber）：数据接收服务器，数据读取的源头，接收端，用于接收分发服务器发送的指定数据。订阅分为推送订阅和请求订阅。
  - **推送订阅**：发布服务器将更改传播到订阅服务器，而无需订阅服务器发出请求，数据将连续同步或按照经常重复执行的计划同步。
  
  - **请求订阅**：订阅服务器主动请求订阅，数据通常按需或按计划同步，而非连续同步。华为云实例不支持请求订阅，因而需要此处设置为推送订阅，仅需在发送服务器端设置即可实现订阅。
  
  
  在订阅前需要确保服务器间网络互通，可以在本地服务器上访问云上实例。
  **配置本地端订阅之前，需要将云上信息配置在本地。**
  1. 为订阅服务器在本地服务器上设置别名。由于订阅服务**不支持** **IP** **访问** ，因此需要将RDS实例的公网IP映射为别名。别名不可随意取名，需先登录RDS实例后，执行以下SQL语句。
     ```
     select  @@SERVERNAME
     ```
     图7设置别名   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548142.png "点击放大") 
  
  2. 得到别名名称，打开本地sqlserver配置管理器选择"native client"，右键单击"Aliases"，选择"new Aliases"。
     图8配置native client   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627545.jpg "点击放大") 
  
  3. 填写相关信息，单击"确认"。
     图9确认   
     ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548198.png)
     表1参数说明 
     | 参数         | 说明                                          |
     |:---|:---|
     | Alias Name | [1]中设置的别名。 |
     | Port No    | 对应实例的端口号。                                   |
     | Server     | 绑定的公网IP。                                    |
        
     
  
  4. 配置本地host。在**C:\\Windows\\System32\\drivers\\etc** 中，打开host文件并添加一条映射：
     ```
     Server地址 MSSQL-177FFD84\MSSQL2014STD
     ```
     
   
 
#### 发布
1. 创建发布。 
   展开服务器下的"复制"节点，右键单击"本地发布"，选择"新建发布"。
   图10新建发布数据库   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627549.jpg "点击放大")
   
   
2. 选择事务发布。
3. 选择以表作为发布对象。 
   图11发布表   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229708018.jpg "点击放大")
   
   
4. 添加筛选对象，进行个性化的发布。 
   图12添加筛选对象   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264547457.jpg "点击放大")
   
   
5. 事务发布会先创建一个快照以复制表当前的状态。也可以设置快照代理用以执行计划。 
   图13快照代理   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627525.jpg "点击放大")
   
   
6. 设置代理安全性，这里需要设置登录账号为本地sa账号。 
   图14设置代理安全性   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627561.jpg "点击放大")
   
   
7. 设置发布名称，单击"完成"。 
   图15完成   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548150.jpg "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229708014.jpg "点击放大")
   
   
8. 创建完成后可以通过**复制监视器** 来查看是否创建发布成功。
   
   图16启动复制监视器   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548186.png "点击放大")
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264547465.png "点击放大")
   
   
 
#### 订阅
1. 选择对应设置的发布，单击右键选择"新建订阅"。 
   图17新建订阅   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548134.png)
   
   
2. 创建订阅的发布，单击"下一步"。 
   图18创建发布   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627537.png "点击放大")
   
   
3. 选择推送订阅，单击"下一步"。 
   图19分发代理位置   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264547453.png "点击放大")
   
   
4. 选择"添加订阅服务器"，支持SQL Server引擎和非SQL Server作为订阅服务器，将创建并根据上述步骤配置的华为云实例作为一个订阅服务器。 
   图20添加订阅服务器   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627517.jpg)
   
   
5. 选择一个数据库作为订阅对象。 
   图21选择订阅数据库   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229707982.png "点击放大")
   
   
6. 配置与订阅服务器的连接。 
   图22配置连接   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264547469.jpg)
   
   
7. 使用一个长期有效的数据库账号，保障订阅长期有效，这里的账号设置可以为登录华为云实例的数据库账号，单击"确定"。 
   图23连接分发服务器   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002264627553.jpg)
   
   
8. 创建订阅成功。 
   图24创建订阅   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548178.jpg)
   
   
9. 将鼠标移动到发布配置上可以看到对应的订阅信息。 
   图25查看订阅   
   ![](https://support.huaweicloud.com/bestpractice-rds-mssql/zh-cn_image_0000002229548158.png "点击放大")
   
   
 
