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

ApsaraDB RDS:SQL 文を使用したデータベースの管理

最終更新日:Aug 12, 2025

このトピックでは、SQL コマンドを使用して ApsaraDB RDS for SQL Server インスタンスでデータベースを作成および削除する方法について説明します。 また、専用のストアドプロシージャを使用してデータベース名を変更する方法と、データベース管理中に禁止されているリスクの高い操作についても説明します。

前提条件

ApsaraDB RDS for SQL Server インスタンスは、SQL Server 2012 以降のバージョンを実行している必要があります。

データベースの作成

データベースを作成するには、次の文を実行します。

CREATE DATABASE TestDb
説明

RDS インスタンスでデータベースを作成すると、ファイルパスが自動的に生成されます。 ファイルパスを指定しないでください。

次の文を実行して、SQL Server インスタンスのすべてのデータベースのデータファイルとログファイルに関するパス情報をクエリできます。

SELECT db_name(database_id), physical_name
FROM sys.master_files;

データベースの削除

データベースを削除するには、次の文を実行します。

DROP DATABASE [TestDb]

データベースを削除する前にバックアップしていない場合は、次のエラーメッセージが表示されます。

DROP DATABASE [TestDb]
        -------------------------------------------------------------------------------------------------
        Kindly reminder:  <!-- 注意喚起 -->
            your database [TestDb] does not exist any backup set. <!-- データベース [TestDb] にはバックアップセットがありません。 -->
        -------------------------------------------------------------------------------------------------
Login User [Test11] has dropped database [TestDb] . <!-- ログインユーザー [Test11] がデータベース [TestDb] を削除しました。 -->

データベース名の変更

ApsaraDB RDS for SQL Server は、sp_rds_modify_db_name ストアドプロシージャを提供して、データベース名を安全に変更します。 このストアドプロシージャは追加の承認を必要とせず、標準アカウントで実行できます。

T-SQL コマンド

sp_rds_modify_db_name

サポートされている RDS インスタンス

  • High Availability (HA) シリーズ

  • クラスタ版

  • ベーシックシリーズ

説明

このストアドプロシージャは、データベースの名前を変更するために使用されます。 RDS High-availability Edition または RDS Cluster Edition を実行している RDS インスタンスでデータベースの名前を変更すると、RDS インスタンスとそのセカンダリインスタンス間のレプリケーション構成が自動的に再構築されます。 再構築プロセス中に、RDS インスタンスのデータがバックアップおよびリストアされます。 データベースが大量のストレージを占有している場合は、RDS インスタンスの使用可能なストレージが十分にあることを確認してください。

使用方法

USE db
GO
EXEC sp_rds_modify_db_name 'db','new_db'
GO
  • 最初のパラメーターは、データベースの元の名前を指定します。

  • 2 番目のパラメーターは、データベースの新しい名前を指定します。

データベース変更の制限

ほとんどのデータベース属性を変更できます。 以下の点に注意してください。

  • データベースを無効なファイルパスに移動しないでください。

    たとえば、次の文を実行しますが、文に無効なファイルパスを指定します。

    ALTER DATABASE [TestDb]MODIFY FILE( NAME = N'TestDb', FILENAME = N'E:\KKKK\DDD\DATA\TestDb.mdf' )

    次のエラーメッセージが表示されます。

    Msg 50000, Level 16, State 1, Procedure ******, Line 152  <!-- メッセージ 50000、レベル 16、状態 1、プロシージャ ******、行 152 -->
    The file path [  <!-- ファイルパス [  -->
    E:\KKKK\DDD\DATA\TestDb.mdf ] is invalid,please specify correct path folder [ E:\mmm\gggg\ ]. <!-- E:\KKKK\DDD\DATA\TestDb.mdf ] は無効です。正しいパスフォルダ [ E:\mmm\gggg\ ] を指定してください。 -->
    Msg 3609, Level 16, State 2, Line 2  <!-- メッセージ 3609、レベル 16、状態 2、行 2 -->
    The transaction ended in the trigger. The batch has been aborted. <!-- トリガーでトランザクションが終了しました。バッチは中止されました。 -->
  • 復元モデルを FULL 以外に設定しないでください。

    たとえば、次の文を実行して復元モデルを SIMPLE に設定します。

    ALTER DATABASE [TestDb]  --[TestDb] is the database name. <!-- [TestDb] はデータベース名です。 -->
    SET RECOVERY SIMPLE

    この操作により、データベースログチェーンが切断されます。 システムは復元モデルを FULL にリセットし、SIMPLE への変更を禁止し、次のエラーメッセージを返します。

    Msg 50000, Level 16, State 1, Procedure ******, Line 46  <!-- メッセージ 50000、レベル 16、状態 1、プロシージャ ******、行 46 -->
    Login User [Test11] can't change database [TestDb] recovery model. <!-- ログインユーザー [Test11] はデータベース [TestDb] の復元モデルを変更できません。 -->
    Msg 3609, Level 16, State 2, Line 2  <!-- メッセージ 3609、レベル 16、状態 2、行 2 -->
    The transaction ended in the trigger. The batch has been aborted. <!-- トリガーでトランザクションが終了しました。バッチは中止されました。 -->
    重要

    ログがいっぱいの場合は、縮小のためにログチェーンを切り捨てることしかできません。 データベースの復元モデルを SIMPLE に変更しないことをお勧めします。 データベースの復元モデルを SIMPLE に変更すると、データベースが属する RDS インスタンスのバックアップチェーンが切断され、バックアップチェーンが切断された時点で行われたすべてのリストアタスクが失敗します。 緊急時にデータベースの復元モードを SIMPLE に変更し、データベースログチェーンを切り捨てるには、上記のリスクを理解し、責任を負う必要があります。 上記の文を実行した後、表示されるエラーメッセージは無視できます。データベースログチェーンは切断されます。

  • データベースを OFFLINE に設定した後、ONLINE コマンドを直接実行しないでください。

    たとえば、次の文を実行してデータベースの状態を OFFLINE から ONLINE に変更します。

    USE [master]
      GO
      --set offline <!-- オフラインに設定 -->
      --ALTER DATABASE [TestDb]
      --SET OFFLINE
      --WITH ROLLBACK AFTER 0
      ALTER DATABASE [TestDb]
      SET ONLINE
    

    次のエラーメッセージが表示されます。

    Msg 5011, Level 14, State 9, Line 1  <!-- メッセージ 5011、レベル 14、状態 9、行 1 -->
    User does not have permission to alter database 'TestDb', the database does not exist, or the database is not in a state that allows access checks. <!-- ユーザーはデータベース 'TestDb' を変更する権限がありません。データベースが存在しないか、アクセスチェックを許可する状態ではありません。 -->
    Msg 5069, Level 16, State 1, Line 1  <!-- メッセージ 5069、レベル 16、状態 1、行 1 -->
    ALTER DATABASE statement failed. <!-- ALTER DATABASE 文が失敗しました。 -->

    データベースの状態を OFFLINE から ONLINE に変更するには、sp_rds_set_db_online ストアドプロシージャを実行します。

    EXEC sp_rds_set_db_online 'TestDb'

一般的なエラー

ネイティブ SQL の ALTER DATABASE コマンドまたは SSMS グラフィカルインターフェイスを使用して RDS SQL Server データベース名を変更するとエラーが発生しますか?

問題の説明

ネイティブ SQL ALTER DATABASE コマンドまたは SQL Server Management Studio (SSMS) グラフィカルユーザーインターフェイス (GUI) を使用して ApsaraDB RDS for SQL Server データベースの名前を変更しようとすると、エラーが発生します。 次のエラーメッセージが返されます。

  • ネイティブ SQL ALTER DATABASE コマンドからのエラー

    Msg 5011, Level 14, State 2, Line 4  <!-- メッセージ 5011、レベル 14、状態 2、行 4 -->
    User does not have permission to alter database 'jmdb01', the database does not exist, or the database is not in a state that allows access checks. <!-- ユーザーはデータベース 'jmdb01' を変更する権限がありません。データベースが存在しないか、アクセスチェックを許可する状態ではありません。 -->
    

    image

  • SSMS GUI からのエラー: db_name の名前を変更できません。

    image

原因

  • デフォルトでは、ApsaraDB RDS for SQL Server のユーザーアカウント (標準アカウントと特権アカウントを含む) には、master データベースに対する CREATE DATABASE 権限のみが付与されます。 この権限は、データベースの名前を変更するには不十分です。 そのため、ネイティブ SQL または SSMS GUI を使用してデータベースの名前を直接変更することはできません。

  • (推奨されません) システム管理者 (SA) 権限を有効にする ことで、データベースの名前を変更できます。 その後、SA 権限を持つアカウントを使用して、必要な権限を標準アカウントまたは特権アカウントに手動で付与できます。 権限は次のように説明されています。

    • master データベースに対する CREATE DATABASE 権限のみを持つアカウントは、どのデータベースの名前も変更できません。

    • インスタンスレベルの CREATE ANY DATABASE 権限を持つアカウントは、自分が所有するデータベースの名前を変更できます。 注: ユーザーは db_owner ロールのメンバーであるだけでなく、データベースの所有者である必要があります。 詳細については、「データベースのプロパティを変更する (詳細情報: db_owner)」をご参照ください。

    • インスタンスレベルの ALTER ANY DATABASE 権限を持つアカウントは、ALTER 権限を持つデータベースの名前を変更できます。

解決策

ApsaraDB RDS for SQL Server によって提供される sp_rds_modify_db_name ストアドプロシージャを使用して、データベース名を安全に変更します。 このプロシージャは追加の承認を必要とせず、標準アカウントで実行できます。

T-SQL コマンド

sp_rds_modify_db_name

サポートされている RDS インスタンス

  • High Availability (HA) シリーズ

  • クラスタ版

  • ベーシックシリーズ

説明

このストアドプロシージャは、データベースの名前を変更するために使用されます。 RDS High-availability Edition または RDS Cluster Edition を実行している RDS インスタンスでデータベースの名前を変更すると、RDS インスタンスとそのセカンダリインスタンス間のレプリケーション構成が自動的に再構築されます。 再構築プロセス中に、RDS インスタンスのデータがバックアップおよびリストアされます。 データベースが大量のストレージを占有している場合は、RDS インスタンスの使用可能なストレージが十分にあることを確認してください。

使用方法

USE db
GO
EXEC sp_rds_modify_db_name 'db','new_db'
GO
  • 最初のパラメーターは、データベースの元の名前を指定します。

  • 2 番目のパラメーターは、データベースの新しい名前を指定します。

関連情報