问题描述
在RDS SQL Server实例中删除数据库时,会出现以下场景的报错:
- 如果数据库没有会话,对于RDS SQL Server 2008、2012和2016版,是用镜像做的主备同步,直接使用
drop database
SQL语句删除数据库会存在以下报错。The database 'XX' is enabled for database mirroring. Database mirroring must be removed before you drop the database.
- 如果数据库没有会话,对于RDS SQL Server 2017,是用AlwaysOn做的主备同步,直接使用
drop database
SQL语句删除数据库会存在以下报错。The database 'XX' is currently joined to an availability group. Before you can drop the database, you need to remove it from the availability group.
- 对于RDS SQL Server 2008、2012、2016和2017版,如果数据库存在会话,直接使用
drop database
SQL语句删除数据库会存在以下报错。Cannot drop database "XX" because it is currently in use
问题原因
高可用版数据库采用镜像或AlwaysOn搭建的高可用架构,删除数据库需要先移除镜像或AlwaysOn,然后才能删除数据库。如果数据库存在会话,则需要先使用kill
命令结束会话,然后才能删除数据。
解决方案
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
请根据现场实际版本,执行以下操作:
- 对于RDS SQL Server2012及以上版本,请您先登录数据库,然后在数据库中执行以下SQL语句,删除数据库。
EXEC sp_rds_drop_database '[$Database]';
说明:
- [$Database]指的是需要删除的数据库名称。
- 上述命令会先移除高可用架构,并结束在该数据库上的会话连接,然后删除数据库。
- 对于RDS SQL Server2008版,请您先登录数据库,然后在数据库中执行以下操作:
- 如果存在以下报错,则需要执行
kill
命令,结束会话,然后再执行删除操作。Cannot drop database "XX" because it is currently in use
- 执行以下SQL语句,找到要删除数据库的会话的spid。
use master;
exec sp_who; - 执行以下命令,结束会话。
kill [$Spid];
说明:[$Spid]为上一步获取要删除数据库的会话的spid。
- 执行以下SQL语句,直接移除镜像。
ALTER DATABASE [$Database] SET PARTNER OFF;
然后执行以下SQL语句,删掉数据库。drop database [$Database];
- 执行以下SQL语句,找到要删除数据库的会话的spid。
- 如果不存在
Cannot drop database "XX" because it is currently in use
报错,则执行以下SQL语句,直接移除镜像。ALTER DATABASE [$Database] SET PARTNER OFF;
然后执行以下SQL语句,删掉数据库。drop database [$Database];
- 如果存在以下报错,则需要执行
适用于
- 云数据库RDS SQL Server版
说明:适用于高可用版本。
反馈
- 本页导读 (1)
文档反馈