全部產品
Search
文件中心

ApsaraDB RDS:RDS SQL Server中無法直接刪除資料庫的處理方法

更新時間:Jul 24, 2024

本文介紹RDS SQL Server中無法直接刪除資料庫的處理方法。

說明

阿里雲提醒您:

  • 如果您對執行個體或資料有修改、變更等風險操作,務必注意執行個體的容災、容錯能力,確保資料安全。

  • 如果您對執行個體(包括但不限於ECS、RDS)等進行配置與資料修改,建議提前建立快照或開啟RDS記錄備份等功能。

  • 如果您在阿里雲平台授權或者提交過登入帳號、密碼等安全資訊,建議您及時修改。

問題描述

在RDS SQL Server執行個體中刪除資料庫時,會出現以下情境的報錯:

  • 如果資料庫沒有會話,對於RDS SQL Server 2008、2012和2016版本,是用鏡像做的主備同步,直接使用drop databaseSQL語句刪除資料庫會存在以下報錯。

    The database 'XX' is enabled for database mirroring. Database mirroring must be removed before you drop the database.
  • 如果資料庫沒有會話,對於RDS SQL Server 2017版本,是用AlwaysOn做的主備同步,直接使用drop databaseSQL語句刪除資料庫會存在以下報錯。

    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 databaseSQL語句刪除資料庫會存在以下報錯。

    Cannot drop database "XX" because it is currently in use

問題原因

高可用系列的資料庫採用鏡像或AlwaysOn搭建的高可用架構,刪除資料庫前需要先移除鏡像或AlwaysOn,然後才能刪除資料庫。此外,如果資料庫存在會話,則需要先使用kill命令結束會話,然後才能刪除資料庫。

解決方案

說明

本解決方案僅適用於高可用系列的RDS SQL Server執行個體

RDS SQL Server 2012及以上版本

請您先登入資料庫,然後在資料庫中執行以下SQL語句,刪除資料庫。

EXEC sp_rds_drop_database '[$Database]';
說明
  • [$Database]指需要刪除的資料庫名稱。

  • 上述命令會先移除高可用架構,並結束在該資料庫上的會話串連,然後刪除資料庫。

RDS SQL Server 2008版本

請您先登入資料庫,然後在資料庫中執行以下操作:

  • 如果存在Cannot drop database "XX" because it is currently in use報錯,則需要執行kill命令,結束會話,然後再執行刪除操作。

    1. 執行以下SQL語句,找到要刪除資料庫的會話的spid。

      USE master;
      EXEC sp_who;
    2. 執行以下命令,結束會話。

      kill [$Spid];
      說明

      [$Spid]為上一步擷取要刪除資料庫的會話的spid。

    3. 執行以下SQL語句,直接移除鏡像。

      ALTER DATABASE [$Database] SET PARTNER OFF;

      然後執行以下SQL語句,刪掉資料庫。

      DROP database [$Database];
  • 如果不存在Cannot drop database "XX" because it is currently in use報錯,則執行以下SQL語句,直接移除鏡像。

    ALTER DATABASE [$Database] SET PARTNER OFF;

    然後執行以下SQL語句,刪掉資料庫。

    DROP database [$Database];

相關操作

如需通過RDS控制台或API刪除資料庫,請參見通過RDS控制台刪除資料庫DeleteDatabase - 刪除資料庫