RDS SQL Server中無(wú)法直接刪除數(shù)據(jù)庫(kù)的處理方法
本文介紹RDS SQL Server中無(wú)法直接刪除數(shù)據(jù)庫(kù)的處理方法。
阿里云提醒您:
如果您對(duì)實(shí)例或數(shù)據(jù)有修改、變更等風(fēng)險(xiǎn)操作,務(wù)必注意實(shí)例的容災(zāi)、容錯(cuò)能力,確保數(shù)據(jù)安全。
如果您對(duì)實(shí)例(包括但不限于ECS、RDS)等進(jìn)行配置與數(shù)據(jù)修改,建議提前創(chuàng)建快照或開(kāi)啟RDS日志備份等功能。
如果您在阿里云平臺(tái)授權(quán)或者提交過(guò)登錄賬號(hào)、密碼等安全信息,建議您及時(shí)修改。
問(wèn)題描述
在RDS SQL Server實(shí)例中刪除數(shù)據(jù)庫(kù)時(shí),會(huì)出現(xiàn)以下場(chǎng)景的報(bào)錯(cuò):
如果數(shù)據(jù)庫(kù)沒(méi)有會(huì)話,對(duì)于RDS SQL Server 2008、2012和2016版本,是用鏡像做的主備同步,直接使用
drop database
SQL語(yǔ)句刪除數(shù)據(jù)庫(kù)會(huì)存在以下報(bào)錯(cuò)。The database 'XX' is enabled for database mirroring. Database mirroring must be removed before you drop the database.
如果數(shù)據(jù)庫(kù)沒(méi)有會(huì)話,對(duì)于RDS SQL Server 2017版本,是用AlwaysOn做的主備同步,直接使用
drop database
SQL語(yǔ)句刪除數(shù)據(jù)庫(kù)會(huì)存在以下報(bào)錯(cuò)。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.
對(duì)于RDS SQL Server 2008、2012、2016和2017版本,如果數(shù)據(jù)庫(kù)存在會(huì)話,直接使用
drop database
SQL語(yǔ)句刪除數(shù)據(jù)庫(kù)會(huì)存在以下報(bào)錯(cuò)。Cannot drop database "XX" because it is currently in use
問(wèn)題原因
高可用系列的數(shù)據(jù)庫(kù)采用鏡像或AlwaysOn搭建的高可用架構(gòu),刪除數(shù)據(jù)庫(kù)前需要先移除鏡像或AlwaysOn,然后才能刪除數(shù)據(jù)庫(kù)。此外,如果數(shù)據(jù)庫(kù)存在會(huì)話,則需要先使用kill
命令結(jié)束會(huì)話,然后才能刪除數(shù)據(jù)庫(kù)。
解決方案
本解決方案僅適用于高可用系列的RDS SQL Server實(shí)例。
RDS SQL Server 2012及以上版本
請(qǐng)您先登錄數(shù)據(jù)庫(kù),然后在數(shù)據(jù)庫(kù)中執(zhí)行以下SQL語(yǔ)句,刪除數(shù)據(jù)庫(kù)。
EXEC sp_rds_drop_database '[$Database]';
[$Database]
指需要?jiǎng)h除的數(shù)據(jù)庫(kù)名稱。上述命令會(huì)先移除高可用架構(gòu),并結(jié)束在該數(shù)據(jù)庫(kù)上的會(huì)話連接,然后刪除數(shù)據(jù)庫(kù)。
RDS SQL Server 2008版本
請(qǐng)您先登錄數(shù)據(jù)庫(kù),然后在數(shù)據(jù)庫(kù)中執(zhí)行以下操作:
如果存在
Cannot drop database "XX" because it is currently in use
報(bào)錯(cuò),則需要執(zhí)行kill
命令,結(jié)束會(huì)話,然后再執(zhí)行刪除操作。執(zhí)行以下SQL語(yǔ)句,找到要?jiǎng)h除數(shù)據(jù)庫(kù)的會(huì)話的spid。
USE master; EXEC sp_who;
執(zhí)行以下命令,結(jié)束會(huì)話。
kill [$Spid];
說(shuō)明[$Spid]
為上一步獲取要?jiǎng)h除數(shù)據(jù)庫(kù)的會(huì)話的spid。執(zhí)行以下SQL語(yǔ)句,直接移除鏡像。
ALTER DATABASE [$Database] SET PARTNER OFF;
然后執(zhí)行以下SQL語(yǔ)句,刪掉數(shù)據(jù)庫(kù)。
DROP database [$Database];
如果不存在
Cannot drop database "XX" because it is currently in use
報(bào)錯(cuò),則執(zhí)行以下SQL語(yǔ)句,直接移除鏡像。ALTER DATABASE [$Database] SET PARTNER OFF;
然后執(zhí)行以下SQL語(yǔ)句,刪掉數(shù)據(jù)庫(kù)。
DROP database [$Database];
相關(guān)操作
如需通過(guò)RDS控制臺(tái)或API刪除數(shù)據(jù)庫(kù),請(qǐng)參見(jiàn)通過(guò)RDS控制臺(tái)刪除數(shù)據(jù)庫(kù)或DeleteDatabase - 刪除數(shù)據(jù)庫(kù)。