问题描述
RDS SQL Server删除数据库,经常会遇到各种报错,如
1、The database '数据库名' is enabled for database mirroring. Database mirroring must be removed before you drop the database.
2、The database '数据库名' is currently joined to an availability group. Before you drop the databas, you need to remove it from the availability group.
3、Cannot drop database "数据库名" because it is currently in use.
4、Cannot drop the database '数据库名', because it does not exist or you do not have permission.
问题原因
常见原因(分别对应上述4个报错):
一、数据库正在使用,常见场景
1、镜像
2、AlwaysON
3、会话正在访问该库
二、数据库账号没有删库权限
解决方案
1. 非基础版
使用该命令删除数据库,该命令为阿里云官方存储过程,先移除镜像\AlwaysON\kill占用进程,然后再drop数据库。
exec sp_rds_drop_database 'database name';-- database name 换成需要删除的数据库名称
2.基础版
使用该命令删除数据库
DROP Database 'database name';-- database name 换成需要删除的数据库名称
3. 数据库正在使用中
i、查看当前使用的进程
select*from sys.sysprocesseswhere dbid = db_id('database name');-- database name 换成需要删除的数据库名称
ii、kill 掉使用进程
kill spid;-- spid 查到的spid 进程
iii、删除数据库
4.数据库账号没有删除权限
确认执行删库操作的数据库账号,拥有该库的所有者权限,如RDS控制台截图,
若无权限,可以通过“修改权限”授予账号数据库所有者权限,或者更换拥有该库所有者权限的账号删除
适用版本
RDS For SQL Server所有云盘版本实例。
RDS For SQL Server 本地盘版本实例,只能通过控制台或openapi删除。