文档首页/ 云数据库 RDS/ 故障排除/ RDS for SQL Server/ RDS for SQL Server如何解除和重建复制关系
更新时间:2024-12-13 GMT+08:00

RDS for SQL Server如何解除和重建复制关系

场景描述

主备实例对用户的数据库会自动建立复制关系,用户创建或迁移上云的数据库一般会在几分钟内开始建立复制关系,完成的时间取决于数据库的大小。

有一些场景可能需要解除复制关系执行配置,然后再重新建立复制关系,如下所示。

  • 临时解除复制关系。在修改数据库名称、设置快照隔离级别、设置数据库属性等操作需要临时解除复制关系。不然会有类似如下报错:
    图1 报错信息
  • 较长时间解除复制关系(不推荐)。有些库对性能要求极高吞吐量极大,需要不建立复制关系下工作等。

故障分析

存在部分alter database操作需要先解除数据库的复制关系,然后才能执行成功。

解决方案

  1. 暂时解除复制关系
    1. 非2017企业版的实例

      执行如下SQL解除某个库的复制关系。

      alter database [@DBName] set partner off

      [@DBName]:指定需要解除复制关系的库名。

      1. 解除复制关系后的操作需要和该语句在一个批处理中执行,解除复制关系后,系统会尽快自动重建该库的复制关系,不需要手动执行SQL重建。
    2. 2017企业版的实例

      执行存储过程将数据库移出可用性组。详细内容可参考将自定义数据库移出可用性组

      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 Managerment Studio)客户端,选择目标数据库,右键属性,查看Recovery model,修改Recovery model为Simple。

    • 执行SQL语句修改
      alter database [db1] set recovery simple with no_wait

      设置为Simple模式后不会产生增量备份,将不能进行表级时间点恢复。如果想恢复建立复制关系。需要将Recovery model 设置为full。

      alter database [db1] set recovery full with no_wait
  3. 数据库auto close属性为True时不会建立复制关系,并且不会产生复制关系异常的告警。

    需要将auto close属性关闭设置为False,才能重新自动建立复制关系。

    alter database [db1] set auto_close off with no_wait