CREATE DATABASE (Transact-SQL)

新しいデータベースとデータベースを格納するファイルを作成するか、データベース スナップショットを作成するか、以前作成されたデータベースのデタッチされたファイルからデータベースをアタッチします。

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

構文

CREATE DATABASE database_name 
    [ ON 
        { [ PRIMARY ] [ <filespec> [ ,...n ] 
        [ , <filegroup> [ ,...n ] ] 
    [ LOG ON { <filespec> [ ,...n ] } ] }
    ] 
    [ COLLATE collation_name ]
    [ WITH <external_access_option> ]
]
[;]

To attach a database
CREATE DATABASE database_name 
    ON <filespec> [ ,...n ] 
    FOR { ATTACH [ WITH <service_broker_option> ]
        | ATTACH_REBUILD_LOG }
[;]

<filespec> ::= 
{
(
    NAME =logical_file_name,
    FILENAME = { 'os_file_name' | 'filestream_path' } 
        [ , SIZE =size [ KB | MB | GB | TB ] ] 
        [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
        [ , FILEGROWTH =growth_increment [ KB | MB | GB | TB | % ] ]
) [ ,...n ]
}

<filegroup> ::= 
{
FILEGROUP filegroup_name [ CONTAINS FILESTREAM ] [ DEFAULT ]
    <filespec> [ ,...n ]
}

<external_access_option> ::=
{
  [ DB_CHAINING { ON | OFF } ]
  [ , TRUSTWORTHY { ON | OFF } ]
}
<service_broker_option> ::=
{
    ENABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
}

Create a database snapshot
CREATE DATABASE database_snapshot_name 
    ON 
    (
        NAME = logical_file_name,
        FILENAME ='os_file_name' 
    ) [ ,...n ] 
    AS SNAPSHOT OF source_database_name
[;]

引数

  • database_name
    新規データベースの名前です。データベース名は、SQL Server のインスタンス内で一意であり、識別子のルールに従っている必要があります。

    ログ ファイルに論理名が指定されていない場合を除き、database_name には、最大 128 文字まで指定できます。ログ ファイルの論理名が指定されていない場合、SQL Server は、database_name にサフィックスを付加することにより、ログの logical_file_name および os_file_name を生成します。生成された論理ファイル名が 128 文字を超えないようにするため、database_name は 123 文字に制限されます。

    データ ファイル名が指定されていない場合、SQL Server では、logical_file_name および os_file_name の両方に database_name を使用します。既定のパスはレジストリから取得されます。既定のパスを変更するには、Management Studio の [サーバーのプロパティ] ([データベースの設定] ページ) を使用します。既定のパスを変更するには、SQL Server を再起動する必要があります。

  • ON
    データベースのデータ部分の格納に使用するディスク ファイル (データ ファイル) を明示的に定義するように指定します。プライマリ ファイル グループのデータ ファイルを定義する <filespec> 項目のコンマ区切りリストが続く場合は、ON にします。プライマリ ファイル グループ内のファイルのリストに続き、ユーザー ファイル グループおよびユーザー ファイル グループに属するファイルを定義する省略可能な <filegroup> 項目のコンマ区切りリストを記述できます。

  • PRIMARY
    関連付けられた <filespec> リストによってプライマリ ファイルを定義するように指定します。プライマリ ファイル グループ内の <filespec> エントリに最初に指定されたファイルが、プライマリ ファイルとなります。データベースはプライマリ ファイルを 1 つだけ保有することができます。詳細については、「ファイルとファイル グループのアーキテクチャ」を参照してください。

    PRIMARY を指定しないと、CREATE DATABASE ステートメントに記述された最初のファイルがプライマリ ファイルになります。

  • LOG ON
    データベース ログの格納に使用するディスク ファイル (ログ ファイル) を明示的に定義するように指定します。LOG ON に続けて、ログ ファイルを定義する <filespec> 項目のコンマ区切りリストを記述します。LOG ON が指定されていない場合、データベースのすべてのデータ ファイルのサイズの合計の 25%、または、512 KB のいずれか大きい方のサイズのログ ファイルが 1 つ自動的に作成されます。このファイルは既定のログ ファイルの場所に保存されます。この場所の詳細については、「データ ファイルとログ ファイルの既定の場所を表示または変更する方法 (SQL Server Management Studio)」を参照してください。

    LOG ON はデータベース スナップショットでは指定できません。

  • COLLATE collation_name
    データベースの既定の照合順序を指定します。照合順序名には、Windows 照合順序名または SQL 照合順序名を指定できます。指定しない場合は、データベースに SQL Server インスタンスの既定の照合順序が割り当てられます。照合順序名は、データベース スナップショットでは指定できません。

    照合順序名は、FOR ATTACH 句または FOR ATTACH_REBUILD_LOG 句と共に指定することはできません。アタッチされたデータベースの照合順序を変更する方法の詳細については、この Microsoft Web サイトを参照してください。

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

  • FOR ATTACH [ WITH <service_broker_option> ]
    既存のオペレーティング システム ファイルのセットをアタッチすることによりデータベースが作成されるように指定します。プライマリ ファイルを指定する <filespec> エントリが必要です。他に必要な <filespec> エントリは、データベースが最初に作成されたとき、または最後にアタッチされたときからパスが変わったファイルのエントリだけです。これらのファイルの <filespec> エントリを指定する必要があります。

    FOR ATTACH では、以下のことが必要です。

    • すべてのデータ ファイル (MDF および NDF) が有効であること

    • ログ ファイルが複数存在する場合は、これらがすべて使用可能であること

    読み取り/書き込みデータベースに現在利用できないログ ファイルが 1 つある場合、アタッチ操作の前に、ユーザーも、開かれたトランザクションもない状態でデータベースをシャットダウンすると、FOR ATTACH は自動的にログ ファイルを再構築し、プライマリ ファイルを更新します。これに対し、読み取り専用データベースの場合、プライマリ ファイルを更新できないため、ログは再構築されません。したがって、ログが利用できない読み取り専用データベースをアタッチする場合、ログ ファイルまたはファイルを FOR ATTACH 句に与える必要があります。

    注意

    新しいバージョンの SQL Server で作成したデータベースは、それ以前のバージョンでアタッチすることはできません。SQL Server 2008 にアタッチするには、ソース データベースが少なくともバージョン 80 (SQL Server 2000) である必要があります。互換性レベルが 80 に満たない SQL Server 2000 データベースまたは SQL Server 2005 データベースは、アタッチするときに互換性 80 に設定されます。

    SQL Server では、アタッチされるデータベースに含まれているフルテキスト ファイルも、すべてデータベースと共にアタッチされます。フルテキスト カタログの新しいパスを指定するには、フルテキストのオペレーティング システム ファイル名を除いて新しい場所を指定します。詳細については、「例」を参照してください。

    FOR ATTACH はデータベース スナップショットでは指定できません。

    データベースで Service Broker を使用する場合は、FOR ATTACH 句で WITH <service_broker_option> を使用します。

    • <service_broker_option>
      Service Broker のメッセージ配信と、データベースの Service Broker 識別子を制御します。Service Broker オプションは、FOR ATTACH 句が使用されている場合にのみ指定できます。

      • ENABLE_BROKER
        指定したデータベースに対して Service Broker を有効にします。つまり、メッセージ配信が開始され、sys.databases カタログ ビューで is_broker_enabled が TRUE に設定されます。データベースは、既存の Service Broker 識別子を保持します。

      • NEW_BROKER
        sys.databases と復元されたデータベースの両方に新しい service_broker_guid 値を作成し、すべてのメッセージ交換エンドポイントをクリーンアップして終了します。ブローカーは有効ですが、リモートのメッセージ交換エンドポイントにメッセージは送信されません。古い Service Broker 識別子を参照するルートは、新しい識別子を使用して作成し直す必要があります。

      • ERROR_BROKER_CONVERSATIONS
        データベースがアタッチまたは復元されていることを示すエラーと共に、すべてのメッセージ交換を終了します。ブローカーはこの操作が完了するまで無効になり、その後、有効になります。データベースは、既存の Service Broker 識別子を保持します。

      詳細については、「Service Broker の ID の管理」を参照してください。

    データベースをデタッチおよびアタッチするたびに設定されるファイル権限の詳細については、「データ ファイルとログ ファイルのセキュリティ保護」を参照してください。

    レプリケートされたデータベースをアタッチするとき、そのデータベースがデタッチではなくコピーされたものである場合は、次の点を考慮してください。

    • 元のデータベースと同じサーバー インスタンスおよびバージョンにデータベースをアタッチする場合は、必要な追加手順はありません。

    • 同じサーバー インスタンスのアップグレードされたバージョンにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_vupgrade_replication を実行してレプリケーションをアップグレードする必要があります。

    • バージョンに関係なく、別のサーバー インスタンスにデータベースをアタッチする場合は、アタッチ操作が完了した後、sp_removedbreplication を実行してレプリケーションを削除する必要があります。

      注意

      アタッチは vardecimal ストレージ形式で動作しますが、SQL Server データベース エンジンを SQL Server 2005 Service Pack 2 以上にアップグレードする必要があります。vardecimal ストレージ形式を使用するデータベースを以前のバージョンの SQL Server にアタッチすることはできません。vardecimal ストレージ形式の詳細については、「decimal データの可変長での格納」を参照してください。

    アタッチを使用してデータベースをアップグレードする方法については、「デタッチとアタッチを使用してデータベースをアップグレードする方法 (Transact-SQL)」を参照してください。

    セキュリティに関する注意セキュリティに関する注意

    不明なソースや信頼されていないソースからのデータベースはアタッチしないことをお勧めします。こうしたデータベースには、意図しない Transact-SQL コードを実行したり、スキーマまたは物理データベース構造を変更してエラーを発生させるような、悪意のあるコードが含まれている可能性があります。不明なソースや信頼されていないソースからのデータベースを使用する前には、非稼働サーバーにあるデータベースで DBCC CHECKDB を実行してください。また、ストアド プロシージャやその他のユーザー定義コードなど、データベースのコードを確認してください。

  • FOR ATTACH_REBUILD_LOG
    既存のオペレーティング システム ファイルのセットをアタッチすることによりデータベースを作成するように指定します。このオプションは読み取り/書き込みデータベースに限定されます。プライマリ ファイルを指定する <filespec> エントリが必要です。1 つ以上のトランザクション ログ ファイルが見つからない場合、ログ ファイルは再構築されます。ATTACH_REBUILD_LOG を指定すると、1 MB のログ ファイルが自動的に新規作成されます。このファイルは既定のログ ファイルの場所に保存されます。この場所の詳細については、「データ ファイルとログ ファイルの既定の場所を表示または変更する方法 (SQL Server Management Studio)」を参照してください。

    注意

    ログ ファイルが利用可能な場合は、データベース エンジンはログ ファイルを再構築せず、それらのファイルを使用します。

    FOR ATTACH_REBUILD_LOG では、以下のことが必要です。

    • データベースのクリーン シャットダウン

    • すべてのデータ ファイル (MDF および NDF) が有効であること

    重要な注意事項重要

    この操作により、連続したログ バックアップが中断されます。操作が完了したら、データベース全体のバックアップを行うことをお勧めします。詳細については、「BACKUP (Transact-SQL)」を参照してください。

    FOR ATTACH_REBUILD_LOG は、通常、大きなログのある読み取り/書き込みデータベースを、ほとんど読み取り操作に使用するか、読み取り操作のみに使用するため、元のデータベースほどログ領域を必要としない別のサーバーにコピーする場合に使用します。

    FOR ATTACH_REBUILD_LOG はデータベース スナップショットでは指定できません。

    データベースのアタッチおよびデタッチの詳細については、「データベースのデタッチとアタッチ」を参照してください。

  • <filespec>
    ファイル プロパティを制御します。

  • NAME logical_file_name
    ファイルの論理名を指定します。NAME は、FOR ATTACH 句の 1 つを指定する場合以外に、FILENAME が指定されるときに必要です。FILESTREAM ファイル グループの名前を PRIMARY にすることはできません。

    • logical_file_name
      ファイルを参照するときに SQL Server で使用される論理名です。Logical_file_name は、データベース内で一意であり、識別子の規則に従っている必要があります。この名前は、文字定数、UNICODE 定数、標準の識別子、区切られた識別子のいずれでもかまいません。
  • FILENAME { 'os_file_name' | 'filestream_path' }
    オペレーティング システムの (物理) ファイル名を指定します。

    • 'os_file_name'
      ファイルを作成する際にオペレーティング システムが使用するパスとファイル名です。ファイルは、SQL Server がインストールされているローカル サーバー、ストレージ エリア ネットワーク (SAN)、または、iSCSI ベースのネットワークのうちのいずれかのデバイスに存在する必要があります。指定したパスは、CREATE DATABASE ステートメントを実行する前に存在する必要があります。詳細については、「解説」の「データベース ファイルとファイル グループ」を参照してください。

      ファイルに対して UNC パスが指定されている場合、SIZE、MAXSIZE、および FILEGROWTH パラメーターは設定できません。

      ファイルが未処理のパーティション上にある場合、os_file_name には、未処理になっている既存のパーティションのドライブ文字のみを指定する必要があります。1 つの未処理のパーティションに作成できるのは 1 つのデータ ファイルだけです。

      ファイルが読み取り専用のセカンダリ ファイルであるか、データベースが読み取り専用である場合を除き、データ ファイルを圧縮ファイル システム上に置かないでください。ログ ファイルは、圧縮ファイル システム上に置くことはできません。詳細については、「読み取り専用のファイル グループと圧縮」を参照してください。

    • 'filestream_path'
      FILESTREAM ファイル グループの場合、FILENAME は FILESTREAM データが格納されるパスを参照します。最後のフォルダーまでのパスが存在する必要があり、最後のフォルダーは存在すべきではありません。たとえば、パス C:\MyFiles\MyFilestreamData を指定する場合は、ALTER DATABASE を実行するとき、C:\MyFiles は既に存在している必要がありますが、MyFilestreamData フォルダーは存在してはなりません。

      ファイル グループとファイル (<filespec>) は、同じステートメントで作成する必要があります。ファイル (<filespec>) は、FILESTREAM ファイル グループごとに 1 つしか指定できません。

      SIZE、MAXSIZE、FILEGROWTH の各プロパティは、FILESTREAM ファイル グループには適用されません。

  • SIZE size
    ファイルのサイズを指定します。

    os_file_name が UNC パスとして指定されている場合、SIZE を指定することはできません。SIZE は、FILESTREAM ファイル グループには適用されません。

    • size
      ファイルの初期サイズです。

      プライマリ ファイルに size が指定されていない場合、データベース エンジンは、model データベースのプライマリ ファイルのサイズを使用します。セカンダリ データ ファイルまたはログ ファイルが指定されているにもかかわらず、そのファイルに対して size が指定されていない場合、データベース エンジンは、そのファイルのサイズを 1 MB にします。なお、プライマリ ファイルに対して指定するサイズは、model データベースのプライマリ ファイルのサイズ以上である必要があります。

      サフィックスとして、KB、MB、GB、または TB を使用できます。既定値は MB です。整数を指定します。小数は含めないでください。Size は整数値です。2,147,483,647 を超える値に対しては、より大きな単位を使用してください。

  • MAXSIZE max_size
    ファイルのサイズの上限を指定します。os_file_name が UNC パスとして指定されている場合、MAXSIZE を指定することはできません。MAXSIZE は、FILESTREAM ファイル グループには適用されません。

    • max_size
      ファイルの最大サイズです。サフィックスとして、KB、MB、GB、および TB を使用できます。既定値は MB です。整数を指定します。小数を含めないでください。max_size を指定しない場合、ファイルはディスクがいっぱいになるまで拡張されます。Max_size は整数値です。2,147,483,647 を超える値に対しては、より大きな単位を使用してください。
  • UNLIMITED
    ディスクがいっぱいになるまでファイルを拡張するように指定します。SQL Server では、無制限に拡張するファイル固有のログの最大サイズは 2 TB で、データ ファイルの最大サイズは 16 TB です。

  • FILEGROWTH growth_increment
    ファイルを自動拡張するときの増加量を指定します。ファイルの FILEGROWTH の設定を MAXSIZE の設定より大きくすることはできません。os_file_name が UNC パスとして指定されている場合、FILEGROWTH を指定することはできません。FILEGROWTH は、FILESTREAM ファイル グループには適用されません。

    • growth_increment
      新しい領域が必要とされるたびにファイルに追加される領域の容量です。

      値は MB、KB、GB、TB または % の単位で指定できます。サフィックス MB、KB、または % を付けないで数値を指定した場合の既定値は MB です。% を指定すると、1 回の増加量は、増加時のファイル サイズに指定されたパーセンテージを掛けた値になります。指定されたサイズは、最も近い 64 KB 単位の値に切り上げられます。

      0 は、自動拡張がオフで、領域を追加できないことを示します。

      FILEGROWTH が指定されていない場合、既定値は、データ ファイルが 1 MB、ログ ファイルが 10% で、最小値は 64 KB になります。

      注意

      SQL Server では、データ ファイルの既定の拡張増加量が、10% から 1 MB に変更されました。ログ ファイルの既定値は 10% のままで、変更ありません。

  • <filegroup>
    ファイル グループ プロパティを制御します。ファイル グループは、データベース スナップショットでは指定できません。

  • FILEGROUP filegroup_name
    ファイル グループの論理名です。

    • filegroup_name
      filegroup_name はデータベース内で一意である必要があり、システムで提示された名前である PRIMARY や PRIMARY_LOG にすることはできません。この名前は、文字定数、UNICODE 定数、標準の識別子、区切られた識別子のいずれでもかまいません。名前は、識別子のルールに従っている必要があります。

    • CONTAINS FILESTREAM
      ファイル グループで FILESTREAM バイナリ ラージ オブジェクト (BLOB) をファイル システムに格納することを指定します。

    • DEFAULT
      指定されたファイル グループが、データベースの既定のファイル グループであることを指定します。

  • <external_access_option>
    データベースに対する外部アクセスを制御します。

    • DB_CHAINING { ON | OFF }
      ON を指定すると、データベースは複数データベースの組み合わせ所有権のソース データベースまたは対象データベースになることができます。

      OFF の場合、データベースは、複数データベースの組み合わせ所有権に参加することはできません。既定値は OFF です。

      重要な注意事項重要

      SQL Server のインスタンスでは、cross db ownership chaining サーバー オプションが 0 (OFF) の場合に、この設定が認識されます。cross db ownership chaining が 1 (ON) の場合は、このオプションの値にかかわらず、すべてのユーザー データベースが複数データベースの組み合わせ所有権に参加できます。このオプションは、sp_configure を使用して設定します。

      このオプションを設定するには、固定サーバー ロール sysadmin のメンバーシップが必要です。master、model、tempdb の各システム データベースでは、DB_CHAINING オプションを設定できません。

      詳細については、「所有権の継承」を参照してください。

    • TRUSTWORTHY { ON | OFF }
      ON に指定されている場合、権限借用のコンテキストを使用するデータベース モジュール (ビュー、ユーザー定義関数、ストアド プロシージャなど) は、データベース外のリソースにアクセスできます。

      OFF の場合、権限借用のコンテキスト内のデータベース モジュールは、データベース外のリソースにアクセスできません。既定値は OFF です。

      データベースがアタッチされている場合は常に、TRUSTWORTHY は OFF に設定されます。

      既定では、msdb データベースを除くすべてのシステム データベースで TRUSTWORTHY は OFF に設定されています。model および tempdb データベースでは、この値は変更できません。master データベースでは、TRUSTWORTHY オプションを ON に設定しないことをお勧めします。

      このオプションを設定するには、固定サーバー ロール sysadmin のメンバーシップが必要です。

  • database_snapshot_name
    新規データベース スナップショットの名前です。データベース スナップショット名は、SQL Server のインスタンス内で一意であり、識別子のルールに従っている必要があります。database_snapshot_name には、最大 128 文字まで指定できます。

  • ON ( NAME =logical_file_name, FILENAME = 'os_file_name') [ ,...n ]
    データベース スナップショットを作成するには、ソース データベースのファイルのリストを指定します。スナップショットが機能するためには、すべてのデータ ファイルは個別に指定する必要があります。ただし、データベース スナップショットにログ ファイルは指定できません。FILESTREAM ファイル グループは、データベース スナップショットではサポートされていません。CREATE DATABASE ON 句に FILESTREAM データ ファイルが含まれていると、ステートメントが失敗してエラーが発生します。

    NAME、FILENAME、およびそれらの値については、相当する <filespec> 値の説明を参照してください。

    注意

    データベース スナップショットを作成する場合、他の <filespec> オプションおよびキーワード PRIMARY は許可されません。

  • AS SNAPSHOT OF source_database_name
    作成されるデータベースが、source_database_name によって指定されたソース データベースのデータベース スナップショットであることを指定します。スナップショットとソース データベースは同じインスタンス上に存在する必要があります。

    詳細については、「解説」の「データベース スナップショット」を参照してください。

説明

master データベースは、ユーザー データベースが作成、変更、または削除されるたびにバックアップする必要があります。

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

1 つの CREATE DATABASE ステートメントを使用して、データベースおよび、データベースを格納するファイルを作成することができます。SQL Server では、次の手順を使用して CREATE DATABASE ステートメントを実装します。

  1. SQL Server で、model データベースのコピーを使用して、データベースとそのメタデータを初期化します。

  2. Service Broker GUID がデータベースに割り当てられます。

  3. 次に、データベース エンジンは、データベース内の領域の使用状況を記録する内部データが格納されるページを除いて、データベースの残りの部分に空のページを挿入します。詳細については、「データベース ファイルの初期化」を参照してください。

SQL Server の 1 つのインスタンス上で最大 32,767 個のデータベースを指定できます。

各データベースには、データベース内で特殊な操作を実行できる所有者が存在します。所有者はデータベースを作成するユーザーです。データベース所有者は、sp_changedbowner を使用して変更できます。

データベース ファイルとファイル グループ

すべてのデータベースには、プライマリ ファイルとトランザクション ログ ファイルという少なくとも 2 つのファイル、および、少なくとも 1 つのファイル グループがあります。各データベースに、最大 32,767 のファイルと 32,767 のファイル グループを指定できます。詳細については、「ファイルとファイル グループのアーキテクチャ」を参照してください。

データベースを作成する際に、データ ファイルのサイズは、データベースに記述されるデータの最大量を基に可能な限り大きく設定しておきます。詳細については、「ファイルとファイル グループを使用したデータベースの拡張の管理」を参照してください。

SQL Server データベース ファイルのストレージには、ストレージ エリア ネットワーク (SAN)、iSCSI ベースのネットワーク、または、ローカルにアタッチされたディスクを使用することをお勧めします。この構成により、SQL Server のパフォーマンスと信頼性を最適化することができるためです。

データベース スナップショット

CREATE DATABASE ステートメントを使用して、既存のデータベースであるソース データベースの読み取り専用の静的ビューであるデータベース スナップショットを作成できます。データベース スナップショットは、スナップショットが作成された時点で存在していたとおりのソース データベースと、トランザクション的に一貫性があります。ソース データベースは複数のスナップショットを持つことができます。

注意

データベース スナップショットを作成する際、CREATE DATABASE ステートメントは、ログ ファイル、オフライン ファイル、復元ファイル、および現存しないファイルを参照することはできません。

データベース スナップショットの作成に失敗すると、スナップショットは未確認となり、削除が必要となります。詳細については、「DROP DATABASE (Transact-SQL)」を参照してください。

各スナップショットは、削除されるまで、DROP DATABASE を使用して保持されます。

詳細については、「データベース スナップショット」および「データベース スナップショットの制限事項と要件」を参照してください。

データベース オプション

データベースを作成するたびに、いくつかのデータベース オプションが自動的に設定されます。これらのオプションとその既定の設定の一覧については、「データベース オプションの設定」を参照してください。これらのオプションは、ALTER DATABASE ステートメントを使用して変更できます。

model データベースと新しいデータベースの作成

model データベース内にあるすべてのユーザー定義のオブジェクトは、新しく作成されたすべてのデータベースにコピーされます。テーブル、ビュー、ストアド プロシージャ、データ型など、あらゆるオブジェクトを model データベースに追加し、新しく作成されるすべてのデータベースに含めることができます。

CREATE DATABASE database_name ステートメントがサイズ パラメーターを追加せずに指定されている場合、プライマリ データ ファイルは、model データベースのプライマリ ファイルと同じサイズになります。

FOR ATTACH が指定されていない限り、すべての新しいデータベースは、model データベースからデータベース オプションの設定を継承します。たとえば、auto shrink データベース オプションは、model データベースにおいても、作成するどの新規データベースにおいても、true に設定されます。model データベースのオプションを変更すると、これらの新しいオプション設定が、作成する新規データベースで使用されます。model データベースでの変更操作は、既存のデータベースには影響しません。CREATE DATABASE ステートメントで FOR ATTACH を指定すると、新しいデータベースは元のデータベースからデータベース オプションの設定を継承します。

データベース情報の表示

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

権限

CREATE DATABASE、CREATE ANY DATABASE、または ALTER ANY DATABASE の各権限が必要です。

SQL Server のインスタンス上のディスク使用量を管理するため、通常、データベースを作成する権限をいくつかのログイン アカウントに制限します。

データおよびログ ファイルに対する権限

SQL Server では、各データベースのデータ ファイルとログ ファイルに一定の権限が設定されます。次の操作がデータベースに適用されるたびに、次の権限が設定されます。

作成

変更して新しいファイルを追加

アタッチ

バックアップ

デタッチ

復元

この権限は、開く権限のあるディレクトリにファイルが存在する場合に、そのファイルが誤って書き換えられるのを防ぎます。詳細については、「データ ファイルとログ ファイルのセキュリティ保護」を参照してください。

注意

Microsoft SQL Server 2005 Express Edition では、データ ファイルとログ ファイルの権限は設定されません。

A. ファイルを指定せずにデータベースを作成する

次の例では、mytest データベースを作成し、対応するプライマリ ファイルおよびトランザクション ログ ファイルを作成します。ステートメントに <filespec> 項目が含まれていないため、データベースのプライマリ ファイルは、model データベースのプライマリ ファイルと同じサイズになります。トランザクション ログは、512 KB か、プライマリ データ ファイルの 25% のいずれか大きい方の値に設定されます。MAXSIZE が指定されていないため、ファイルはディスク上のすべての使用可能な領域いっぱいまで拡張することができます。この例では、mytest という名前のデータベースが既に存在する場合はそれを削除してから、mytest データベースを作成する方法も示します。

USE master;
GO
CREATE DATABASE mytest;
GO
-- Verify the database files and sizes
SELECT name, size, size*1.0/128 AS [Size in MBs] 
FROM sys.master_files
WHERE name = N'mytest';
GO

B. データ ファイルとトランザクション ログ ファイルを指定してデータベースを作成する

次の例では、Sales データベースを作成します。PRIMARY キーワードが使用されていないので、最初のファイル (Sales_dat) がプライマリ ファイルになります。Sales_dat ファイルの SIZE パラメーターに MB も KB も指定されていないため、ファイルは MB を使用し、メガバイト単位で割り当てられます。Sales_log ファイルは、SIZE パラメーターに MB サフィックスが明示的に指定されているため、メガバイト単位で割り当てられます。

USE master;
GO
CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
GO

C. 複数のデータ ファイルとトランザクション ログ ファイルを指定してデータベースを作成する

次の例では、3 つの 100-MB のデータ ファイルと 2 つの 100-MB のトランザクション ログ ファイルがある Archive データベースを作成します。プライマリ ファイルはリストの最初のファイルであり、PRIMARY キーワードによって明示的に指定されます。トランザクション ログ ファイルは、LOG ON キーワードに続けて指定されます。FILENAME オプションでファイルに使用される拡張子のうち、.mdf はプライマリ データ ファイルに、.ndf はセカンダリ データ ファイルに、.ldf はトランザクション ログ ファイルに、それぞれ使用されます。この例では、作成するデータベースは、master データベースと同じ場所ではなく D ドライブに格納します。

USE master;
GO
CREATE DATABASE Archive 
ON
PRIMARY  
    (NAME = Arch1,
    FILENAME = 'D:\SalesData\archdat1.mdf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch2,
    FILENAME = 'D:\SalesData\archdat2.ndf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch3,
    FILENAME = 'D:\SalesData\archdat3.ndf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)
LOG ON 
   (NAME = Archlog1,
    FILENAME = 'D:\SalesData\archlog1.ldf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
   (NAME = Archlog2,
    FILENAME = 'D:\SalesData\archlog2.ldf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20) ;
GO

D. ファイル グループのあるデータベースを作成する

次の例では、以下のファイル グループがある Sales データベースを作成します。

  • Spri1_dat ファイルおよび Spri2_dat ファイルのあるプライマリ ファイル グループ。これらのファイルの FILEGROWTH 増加量は、15% に指定されています。

  • SGrp1Fi1 ファイルおよび SGrp1Fi2 ファイルのある、SalesGroup1 というファイル グループ。

  • SGrp2Fi1 ファイルおよび SGrp2Fi2 ファイルのある、SalesGroup2 というファイル グループ。

この例では、データ ファイルとログ ファイルは、パフォーマンスを向上させるために別のディスクに格納します。

USE master;
GO
CREATE DATABASE Sales
ON PRIMARY
( NAME = SPri1_dat,
    FILENAME = 'D:\SalesData\SPri1dat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
( NAME = SPri2_dat,
    FILENAME = 'D:\SalesData\SPri2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
    FILENAME = 'D:\SalesData\SG1Fi1dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
    FILENAME = 'D:\SalesData\SG1Fi2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
    FILENAME = 'D:\SalesData\SG2Fi1dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
    FILENAME = 'D:\SalesData\SG2Fi2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = 'E:\SalesLog\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
GO

E. データベースをアタッチする

次の例では、例 D で作成された Archive データベースをデタッチしてから、FOR ATTACH 句を使用してこのデータベースをアタッチします。Archive は、複数のデータおよびログ ファイルを保有するように定義されています。しかし、ファイルの場所が作成時から変更されていないため、FOR ATTACH 句に指定する必要があるのは、プライマリ ファイルのみです。SQL Server 2005 以降では、アタッチされているデータベースの一部であるフルテキスト ファイルは、データベースと共にアタッチされます。

USE master;
GO
sp_detach_db Archive;
GO
CREATE DATABASE Archive
      ON (FILENAME = 'D:\SalesData\archdat1.mdf') 
      FOR ATTACH ;
GO

F. データベース スナップショットを作成する

次の例では、sales_snapshot0600 データベース スナップショットを作成します。データベース スナップショットは読み取り専用であるため、ログ ファイルは指定できません。構文に準拠して、ソース データベース内のすべてのファイルが指定され、ファイル グループは指定されません。

この例で使用するソース データベースは、例 D で作成された Sales データベースです。

USE master;
GO
CREATE DATABASE sales_snapshot0600 ON
    ( NAME = SPri1_dat, FILENAME = 'D:\SalesData\SPri1dat_0600.ss'),
    ( NAME = SPri2_dat, FILENAME = 'D:\SalesData\SPri2dt_0600.ss'),
    ( NAME = SGrp1Fi1_dat, FILENAME = 'D:\SalesData\SG1Fi1dt_0600.ss'),
    ( NAME = SGrp1Fi2_dat, FILENAME = 'D:\SalesData\SG1Fi2dt_0600.ss'),
    ( NAME = SGrp2Fi1_dat, FILENAME = 'D:\SalesData\SG2Fi1dt_0600.ss'),
    ( NAME = SGrp2Fi2_dat, FILENAME = 'D:\SalesData\SG2Fi2dt_0600.ss')
AS SNAPSHOT OF Sales ;
GO

G. データベースを作成し、照合順序名とオプションを指定する

次の例では、MyOptionsTest データベースを作成します。照合順序名が指定され、TRUSTYWORTHY および DB_CHAINING オプションが ON に設定されます。

USE master;
GO
IF DB_ID (N'MyOptionsTest') IS NOT NULL
DROP DATABASE MyOptionsTest;
GO
CREATE DATABASE MyOptionsTest
COLLATE French_CI_AI
WITH TRUSTWORTHY ON, DB_CHAINING ON;
GO
--Verifying collation and option settings.
SELECT name, collation_name, is_trustworthy_on, is_db_chaining_on
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO

H. 移動されたフルテキスト カタログをアタッチする

次の例では、フルテキスト カタログ AdvWksFtCat を AdventureWorks2008R2 のデータおよびログ ファイルと共にアタッチします。この例では、フルテキスト カタログは、既定の場所から新しい場所、c:\myFTCatalogs に移されます。データおよびログ ファイルは、それぞれの既定の場所に残ります。

USE master;
GO
--Detach the AdventureWorks2008R2 database
sp_detach_db AdventureWorks2008R2;
GO
-- Physically move the full text catalog to the new location.
--Attach the AdventureWorks2008R2 database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks2008R2 ON 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_Data.mdf'), 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_log.ldf'),
    (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
FOR ATTACH;
GO

I. 1 つの ROW ファイル グループと 2 つの FILESTREAM ファイル グループを指定してデータベースを作成する

次の例では、FileStreamDB データベースを作成します。データベースは、1 つの ROW ファイル グループと 2 つの FILESTREAM ファイル グループを使用して作成されます。各ファイル グループには、1 つのファイルが含まれます。

  • FileStreamDB_data には行データが含まれます。これには、既定のパスを指定した 1 つのファイル FileStreamDB_data.mdf が含まれます。

  • FileStreamPhotos には FILESTREAM データが含まれます。これには、C:\MyFSfolder\Photos にある 1 つの FILESTREAM データ コンテナー FSPhotos が含まれます。また、既定の FILESTREAM ファイル グループとしてマークします。

  • FileStreamResumes には FILESTREAM データが含まれます。これには、C:\MyFSfolder\Resumes にある 1 つの FILESTREAM データ コンテナー FSResumes が含まれます。

USE master;
GO
IF DB_ID (N'FileStreamDB') IS NOT NULL
DROP DATABASE FileStreamDB;
GO
-- Get the SQL Server data path.
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

 -- Execute the CREATE DATABASE statement.
EXECUTE ('CREATE DATABASE FileStreamDB
ON PRIMARY 
    (
    NAME = FileStreamDB_data 
    ,FILENAME = ''' + @data_path + 'FileStreamDB_data.mdf''
    ,SIZE = 10MB
    ,MAXSIZE = 50MB
    ,FILEGROWTH = 15%
    ),
FILEGROUP FileStreamPhotos CONTAINS FILESTREAM DEFAULT
    (
    NAME = FSPhotos
    ,FILENAME = ''C:\MyFSfolder\Photos''
-- SIZE, MAXSIZE, FILEGROWTH should not be specified here.
-- If they are specified an error will be raised.
    ),
FILEGROUP FileStreamResumes CONTAINS FILESTREAM
    (
    NAME = FileStreamResumes
    ,FILENAME = ''C:\MyFSfolder\Resumes''
    ) 
LOG ON
    (
    NAME = FileStream_log
    ,FILENAME = ''' + @data_path + 'FileStreamDB_log.ldf''
    ,SIZE = 5MB
    ,MAXSIZE = 25MB
    ,FILEGROWTH = 5MB
    )'
);
GO