ALTER DATABASE (Transact-SQL)

データベース、またはそのデータベースに関連付けられているファイルおよびファイル グループを変更します。データベースに対するファイルやファイル グループの追加と削除、データベースおよびデータベースのファイルやファイル グループの属性の変更、データベースの照合順序の変更、データベース オプションの設定を行えます。データベース スナップショットは変更できません。レプリケーションに関連するデータベース オプションを変更するには、sp_replicationdboption を使用してください。

解説が長くなるため、ALTER DATABASE の構文は次の各トピックに分けて説明しています。

  • ALTER DATABASE
    このトピックでは、データベースの名前と照合順序を変更するための構文について説明します。

  • ALTER DATABASE の File および Filegroup オプション
    データベースのファイルおよびファイル グループを追加したり削除したりするための構文のほか、ファイルおよびファイル グループの属性を変更するための構文について説明します。

  • ALTER DATABASE の SET オプション
    ALTER DATABASE の SET オプションを使ってデータベースの属性を変更するための構文について説明します。

  • ALTER DATABASE データベース ミラーリング
    ALTER DATABASE のデータベース ミラーリングに関連した SET オプションの構文について説明します。

  • ALTER DATABASE 互換性レベル
    ALTER DATABASE のデータベース互換性レベルに関連した SET オプションの構文について説明します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

ALTER DATABASE database_name 
{
  | MODIFY NAME = new_database_name 
  | COLLATE collation_name
  | <file_and_filegroup_options>
  | <set_database_options>
}
[;]

<file_and_filegroup_options >::=
    <add_or_modify_files>::=
    <filespec>::= 
    <add_or_modify_filegroups>::=
    <filegroup_updatability_option>::=
<set_database_options>::=
    <optionspec>::= 
    <auto_option> ::= 
    <change_tracking_option> ::=
    <cursor_option> ::= 
    <database_mirroring_option> ::= 
    <date_correlation_optimization_option> ::=
    <db_encryption_option> ::=
    <db_state_option> ::=
    <db_update_option> ::=
    <db_user_access_option> ::=
    <external_access_option> ::=
    <parameterization_option> ::=
    <recovery_option> ::= 
    <service_broker_option> ::=
    <snapshot_option> ::=
    <sql_option> ::= 
    <termination> ::=

引数

  • database_name
    変更するデータベースの名前を指定します。

  • MODIFY NAME **=**new_database_name
    データベースの名前を、new_database_name で指定した名前に変更します。

  • COLLATE collation_name
    データベースの照合順序を指定します。collation_name には、Windows 照合順序名または SQL 照合順序名のいずれかを指定できます。指定しない場合は、データベースに SQL Server インスタンスの照合順序が割り当てられます。

    Windows 照合順序名および SQL 照合順序名の詳細については、「COLLATE (Transact-SQL)」を参照してください。

<file_and_filegroup_options >::=

詳細については、「ALTER DATABASE の File および Filegroup オプション (Transact-SQL)」を参照してください。

<set_database_options >::=

詳細については、「ALTER DATABASE の SET オプション (Transact-SQL)」を参照してください。

説明

データベースを削除するには、DROP DATABASE を使用します。

データベースのサイズを縮小するには、DBCC SHRINKDATABASE を使用します。

ALTER DATABASE ステートメントは自動コミット モード (既定のトランザクション管理モード) で実行する必要があり、明示的または暗黙的なトランザクション モードでは許可されません。詳細については、「トランザクションの自動コミット」を参照してください。

SQL Server 2005 以降では、データベース ファイルの状態 (オンラインかオフラインかなど) は、データベースの状態とは別に保持されます。詳細については、「ファイルの状態」を参照してください。ファイル グループ内のファイルの状態は、ファイル グループ全体の可用性を決定します。ファイル グループが使用可能であるためには、ファイル グループ内のすべてのファイルがオンラインであることが必要です。ファイル グループがオフラインの場合、SQL ステートメントでそのファイル グループにアクセスを試行するとエラーが発生します。SELECT ステートメントのクエリ プランを作成する場合、クエリ オプティマイザは、オフラインのファイル グループにある非クラスタ化インデックスやインデックス付きビューを回避します。これにより、これらのステートメントは正常に実行できます。ただし、オフラインのファイル グループに、対象テーブルのヒープやクラスタ化インデックスが含まれている場合には、SELECT ステートメントは失敗します。また、オフラインのファイル グループ内にある、インデックスを持つテーブルを変更する INSERT、UPDATE、または DELETE ステートメントは失敗します。

データベースが RESTORING 状態にある場合、大半の ALTER DATABASE ステートメントは失敗します。ただし、データベース ミラーリング オプションの設定は例外です。データベースが RESTORING 状態になるのは、アクティブな復元操作中や、バックアップ ファイルの破損によりデータベースまたはログ ファイルの復元操作が失敗した場合などです。詳細については、「バックアップの破損による SQL Server 復元エラーの対応」を参照してください。

SQL Server のインスタンスのプラン キャッシュは、次のいずれかのオプションを設定することにより消去されます。

OFFLINE

READ_WRITE

ONLINE

MODIFY FILEGROUP DEFAULT

MODIFY_NAME

MODIFY FILEGROUP READ_WRITE

COLLATE

MODIFY FILEGROUP READ_ONLY

READ_ONLY

 

プラン キャッシュが消去されると、後続のすべての実行プランが再コンパイルされ、場合によっては、クエリ パフォーマンスが一時的に急激に低下します。プラン キャッシュ内のキャッシュストアが消去されるたびに、"SQL Server は、一部のデータベース メンテナンス操作または再構成操作により、'%s' キャッシュストア (プラン キャッシュの一部) のキャッシュストア フラッシュを %d 個検出しました。" という情報メッセージが SQL Server エラー ログに記録されます。このメッセージは、キャッシュが 5 分以内にフラッシュされる場合に限り、その間隔でログに記録されます。

データベースの照合順序の変更

データベースに別の照合順序を適用する前に、次の条件が満たされているかどうかを確認してください。

  1. 現在データベースを使用しているのは、1 人だけである。

  2. データベースの照合順序に依存するスキーマ バインド オブジェクトがない。

    データベースの照合順序に依存する次のオブジェクトがデータベース内に存在する場合、ALTER DATABASEdatabase_nameCOLLATE ステートメントは失敗します。SQL Server は、ALTER アクションをブロックしている各オブジェクトに対してエラー メッセージを返します。

    • SCHEMABINDING を指定して作成されたユーザー定義関数およびビュー

    • 計算列

    • CHECK 制約

    • 既定のデータベース照合順序から継承した照合順序を持つ文字型列がテーブルにある場合に、そのテーブルを返すテーブル値関数

    非スキーマ バインド エンティティの依存関係情報は、データベースの照合順序が変更されると自動的に更新されます。詳細については、「SQL の依存関係について」を参照してください。

  3. データベースの照合順序の変更によって、データベース オブジェクトのシステム名に重複が発生しない。

    照合順序の変更によって名前が重複する場合、次の名前空間が原因でデータベースの照合順序の変更が失敗することがあります。

    • プロシージャ、テーブル、トリガ、ビューなどのオブジェクト名

    • スキーマ名

    • グループ、ロール、ユーザーなどのプリンシパル

    • システム データ型、ユーザー定義データ型などのスカラ データ型の名前

    • フルテキスト カタログ名

    • オブジェクト内の列名またはパラメータ名

    • テーブル内のインデックス名

    新しい照合順序によって名前が重複すると、変更操作が失敗し、SQL Server は重複が見つかった名前空間を示すエラー メッセージを返します。

データベース情報の表示

カタログ ビュー、システム関数、およびシステム ストアド プロシージャを使用して、データベース、ファイルおよびファイル グループについての情報を返すことができます。詳細については、「データベース メタデータの表示」を参照してください。

権限

データベースに対する ALTER 権限が必要です。

A. データベースの名前を変更する

次の例では、AdventureWorks データベースの名前を Northwind に変更します。

USE master;
GO
ALTER DATABASE AdventureWorks
Modify Name = Northwind ;
GO

B. データベースの照合順序を変更する

次の例では、SQL_Latin1_General_CP1_CI_AS 照合順序で testdb という名前のデータベースを作成した後、testdb データベースの照合順序を COLLATE French_CI_AI に変更します。

USE master;
GO

CREATE DATABASE testdb
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO

ALTER DATABASE testDB
COLLATE French_CI_AI ;
GO