すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ApsaraDB RDS for SQL Serverインスタンスからデータベースを直接削除できない場合はどうすればよいですか。

最終更新日:Dec 12, 2024

このトピックでは、ApsaraDB RDS for SQL Serverインスタンスからデータベースを直接削除できない問題を解決する方法について説明します。

説明

以下の点にご注意ください。

  • Alibaba Cloudインスタンスの設定やデータの変更など、リスクの高い操作を実行する前に、インスタンスのディザスタリカバリ機能とフォールトトレランス機能を確認して、データのセキュリティを確保することを推奨します。

  • ECS (Elastic Compute Service) インスタンスやRDSインスタンスなどのインスタンスの設定またはデータを変更する前に、インスタンスのスナップショットを作成するか、バックアップを有効にすることを推奨します。 たとえば、RDSインスタンスのログバックアップを有効にできます。

  • Alibaba Cloud管理コンソールで機密情報に対する権限を付与した場合、または機密情報を送信した場合は、できるだけ早い機会に機密情報を変更することを推奨します。 機密情報には、ユーザー名とパスワードが含まれます。

問題の説明

RDSインスタンスからデータベースを削除すると、次のいずれかのエラーが発生します。

  • データベースにセッションが存在しない場合: DROP databaseステートメントを実行して、SQL Server 2008、SQL Server 2012、またはSQL Server 2016を実行し、ミラーリングテクノロジを使用してプライマリ /セカンダリ同期を実装するRDSインスタンスからデータベースを削除すると、次のエラーが発生します。

    The database 'XX' is enabled for database mirroring. Database mirroring must be removed before you drop the database.
  • データベースにセッションが存在しません: DROP databaseステートメントを実行して、SQL Server 2017を実行し、AlwaysOnを使用してプライマリ /セカンダリ同期を実装するRDSインスタンスからデータベースを削除すると、次のエラーが発生します。

    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.
  • セッションがデータベースに存在する場合: DROP databaseステートメントを実行して、SQL Server 2008、SQL Server 2012、SQL Server 2016、またはSQL Server 2017を実行するRDSインスタンスからデータベースを削除すると、次のエラーが発生します。

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

原因

RDSインスタンスはRDS High-availability Editionを実行し、ミラーリングまたはAlwaysOnベースの高可用性 (HA) アーキテクチャを使用します。 RDSインスタンスからデータベースを削除する場合は、データベースミラーリングまたはAlwaysOn可用性グループを削除する必要があります。 必要なデータベースにセッションが存在し、データベースを削除する場合は、データベースを削除する前にkillコマンドを実行してセッションを終了する必要があります。

解決策

説明

このソリューションは、RDS High-availability EditionでSQL Serverを実行するRDSインスタンスにのみ適用できます。 詳細については、「RDS High-availability Edition」をご参照ください。

SQL Server 2012以降

必要なデータベースにログインし、次の文を実行してデータベースを削除します。

EXEC sp_rds_drop_database '[$Database]';
説明
  • [$Database] は、削除するデータベースの名前を指定します。

  • 上記のステートメントは、HAアーキテクチャを削除し、データベース内のセッションを終了してからデータベースを削除するために使用されます。

SQL Server 2008

必要なデータベースにログインし、次の操作を実行します。

  • [Cannot drop database "XX" Cannot drop database because in use] というエラーメッセージが表示された場合は, killコマンドを実行してデータベースのセッションを終了し, データベースを削除してください。

    1. 次のステートメントを実行して、削除するデータベース内のセッションのプロセスID (PID) を取得します。

      使用マスター;
      EXEC sp_who; 
    2. 次のコマンドを実行してセッションを終了します。

      kill [$Spid];
      説明

      [$Spid] は、削除するデータベース内のセッションに必要なPIDを指定します。

    3. 次のステートメントを実行して、データベースミラーリングを直接削除します。

      ALTER DATABASE [$データベース] パートナーをオフに設定します。

      次の文を実行してデータベースを削除します。

      DROPデータベース [$データベース];
  • [Cannot drop database "XX" Cannot drop database "currently in use] エラーメッセージが表示されない場合は、次のステートメントを実行してデータベースミラーリングを直接削除します。

    ALTER DATABASE [$データベース] パートナーをオフに設定します。

    次の文を実行してデータベースを削除します。

    DROPデータベース [$データベース];

関連ドキュメント

ApsaraDB RDSコンソールまたはAPIを呼び出してデータベースを削除する方法の詳細については、「ApsaraDB RDSコンソールでデータベースを削除する」または「DeleteDatabase」をご参照ください。