
# RDS for SQL Server如何解除和重建复制关系
#### 场景描述
主备实例对用户的数据库会自动建立复制关系，用户创建或迁移上云的数据库一般会在几分钟内开始建立复制关系，完成的时间取决于数据库的大小。
有一些场景可能需要解除复制关系执行配置，然后再重新建立复制关系，如下所示。
- 临时解除复制关系。在修改数据库名称、设置快照隔离级别、设置数据库属性等操作需要临时解除复制关系。不然会有类似如下报错：
  图1报错信息   
  ![](https://support.huaweicloud.com/trouble-rds-mssql/zh-cn_image_0000002214915818.png) 
- 较长时间解除复制关系（不推荐）。有些库对性能要求极高吞吐量极大，需要不建立复制关系下工作等。
 
#### 故障分析
存在部分alter database操作需要先解除数据库的复制关系，然后才能执行成功。
#### 解决方案
1. 暂时解除复制关系
   - 除2017及以上版本的企业版以外的实例 执行如下SQL解除某个库的复制关系。
     ```
     alter database [@DBName] set partner off
     ```
     \[@DBName\]：指定需要解除复制关系的库名。
     ![](https://support.huaweicloud.com/trouble-rds-mssql/zh-cn_image_0000002250115525.jpg)
     ![](https://support.huaweicloud.com/trouble-rds-mssql/public_sys-resources/note_3.0-zh-cn.png)
     1. 解除复制关系后的操作需要和该语句在一个批处理中执行，解除复制关系后，系统会尽快自动重建该库的复制关系，不需要手动执行SQL重建。
       
   
   - 2017及以上版本的企业版实例 执行存储过程将数据库移出可用性组。详细内容可参考[将自定义数据库移出可用性组](https://support.huaweicloud.com/usermanual-rds-mssql/rds_09_0005.html)。
     ```
     EXEC rdsadmin.dbo.rds_remove_database_from_ag '@DBName';
     ```
     @DBName：需要移除的自定义数据库名称。
     示例：
     将数据库testDB_1从可用性组\[AG-RDS-YUN\]中移除。
     ```
     EXEC rdsadmin.dbo.rds_remove_database_from_ag 'testDB_1';
     ```
     
    
2. 解除复制关系并且要求不再自动建立（不推荐）
   参考[1]，可以解除复制关系，如果不想让系统自动建立复制关系，可以将数据库的恢复模式（recovery model）改为Simple，参考如下两种方式。
   - 登录SSMS（SQL Server Management Studio）客户端，选择目标数据库，右键属性，查看Recovery model，修改Recovery model为Simple。 ![](https://support.huaweicloud.com/trouble-rds-mssql/zh-cn_image_0000002250115541.jpg)
     
   
   - 执行SQL语句修改
     ```
     alter database [db1] set recovery simple with no_wait
     ```
     ![](https://support.huaweicloud.com/trouble-rds-mssql/public_sys-resources/notice_3.0-zh-cn.png)
     设置为Simple模式后不会产生增量备份，将不能进行表级时间点恢复。如果想恢复建立复制关系。需要将Recovery model 设置为full。
     ```
     alter database [db1] set recovery full with no_wait
     ```
     
     
3. 数据库auto close属性为True时不会建立复制关系，并且不会产生复制关系异常的告警。 ![](https://support.huaweicloud.com/trouble-rds-mssql/zh-cn_image_0000002249955613.png)
   需要将auto close属性关闭设置为False，才能重新自动建立复制关系。
   ```
   alter database [db1] set auto_close off with no_wait
   ```
   
 
