[[TOP]]へ~
-[[リファレンスガイド]]へ~
--[[Firebird SQLリファレンス]]へ~

----
*Firebird SQL リファレンス:CREATE DATABASE, DROP DATABASE, ALTER DATABASE [#c28c08e2]

#contents

----

&aname(create_databse);
*CREATE DATABASE [#n0b67aef]
 新しいデータベースを作成します。 SQL,DSQL,isql で使用できます。~
 この文書は、公開されているIB6のSQLレファレンスを基とし、1.5.1までの各リリースノートにおける追加内容に関して反映・統合されています。~
 (訳注:Firebirdでは、スキーマ機能は実装されていませんので、DATABASE を SCHEMA としても機能としては同じことになります。)

**構文 [#j48dcabc]

 CREATE {DATABASE | SCHEMA} 'filespec'
    [USER 'username' [PASSWORD 'password']]
    [PAGE_SIZE [=] int]
    [LENGTH [=] int [PAGE[S]]]
    [DEFAULT CHARACTER SET charset]
    [<secondary_file>];

 <secondary_file> = FILE 'filespec' [<fileinfo>] [<secondary_file>]

 <fileinfo> = [LENGTH [=] int [PAGE[S]] | STARTING [AT [PAGE]] int }
              [<fileinfo>]

※ DSQLで使用する場合、終端文字のセミコロンは不要です。 isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。
~
~
|引数|説明|h
|'filespec'|新しいデータベースファイルの指定。プラットフォームに依存した表現になります。|
|USER 'username'|データベースファイルを作成するデータベースサーバ上で有効なユーザー名。パスワードとあわせてセキュリティデータベースと照合されます。|
|~|・Windowsクライアントアプリケーションでは、サーバ接続時にユーザー名は必須です。|
|~|・NT や NetWare?上で動作するクライアントアプリケーションでは、サーバ接続時にユーザー名は必須です。|
|PASSWORD 'password'|データベースファイルを作成するデータベースサーバ上で有効なユーザー名。パスワードとあわせてセキュリティデータベースと照合されます。先頭8文字が使用されます。|
|~|・Windowsクライアントアプリケーションでは、サーバ接続時にユーザー名は必須です。|
|~|・NT や NetWare?上で動作するクライアントアプリケーションでは、サーバ接続時にユーザー名は必須です。|
|PAGE_SIZE [=] int|データベースのページサイズをバイト数で指定します。デフォルトは4096で、1024,2048,4096,8192,16384が指定できます。|
|DEFAULT CHARACTER SET charset|指定された名称のキャラクタセットをデータベースのデフォルトキャラクタセットにします。省略時のデフォルトは NONE です。|
|FILE 'filespec'|(マルチファイルデータベース作成時に)複数の二次ファイルを作成するときの名前です。二次ファイルは、一次ファイルが満杯になった後に使用されます。データベース作成がリモートサーバに対して行われるときは、名前にノード名を含むことは出来ません。(訳注:つまり、複数のDBサーバに渡るマルチファイルデータベースは不可)|
|STARTING [AT [PAGE]] int|二次ファイルの開始ページ番号を指定します。|
|LENGTH [=] int [PAGE[S]]|一次ファイル、二次ファイルのデータベースファイルのページサイズを指定します。一次ファイルでのサイズ指定は、二次ファイルを指定している場合にのみ行います。|
~
**詳細の説明 [#udb950b3]
 CREATE DATABASE により、新しいデータベースを作成します。空のデータベースを作成すると共に、ユーザーがデータベースを使用するために通常指定する、一次ファイル(プライマリファイル・主ファイル)を作成します。
 (訳注:1.5以降ではデータベース名にエイリアスが使用できるので、必ずしも一次ファイルの名前を使用するとは限りません。)
-ファイル構成
 デフォルトでは、データベースはシングルファイル構成のデータベースを作成します。~
~ 追加して二次ファイルの指定を行うことにより、マルチファイル構成のデータベースを作成出来ます。ただし、データベースがリモートなサーバ上で作成される場合、二次ファイルの名前にノード名を加えることは出来ません。~

-データベースページサイズ
 ページサイズを増やすことにより、以下の理由によりパフォーマンスが向上させる可能性があります。~
--インデックスの深さが小さくなり、速度が向上する可能性があります。
--1つの行に大きなデータがある場合非常に有効です。
--BLOBのデータが1ページに収まる場合、それはとても効率的に管理されます。
~ただし、大部分のトランザクションが少量の列データを使用する場合には、小さいページサイズの方が有効な場合もあります。それは、少ないキャッシュメモリに多数の列データが存在可能となり、キャッシュが有効に働きやすくなるからです。~

--データベースの Dialect 値
 作成時の Dialect 値は、それを行うクライアントの設定に依存します。~
 例として、isql の場合は起動時に "-sql_dialect n" スイッチを指定、もしくは "SET SQL DIALECT n" コマンドを実行した後に CREATE DATABASE を実行します。~
 基本的には 3 を指定してください。1などの値はレガシーなデータベースからの移行のために準備されています。~
~
※データベースのDialect値の変更は、gfixコマンドや IBConsole のプロパティダイアログにより行うことが出来ます。~

-データベースキャラクタセットの使用
 DEFAULT CHARACTER SET を選択すると、コレーションオーダーに設定できるサブセットの指定が決定されます。コレーションオーダーの指定を行うと、それは SELECT, INSERT, UPDATE の列操作に影響を与えます。~
 デフォルトキャラクタセットを指定しない場合、デフォルトを NONE と指定した場合と同じになります。キャラクタセットに NONE を指定するということは、列には「特定のキャラクタセットがない」と仮定されたことになります。その場合、格納や取り出すときにはオリジナルのデータがそのまま使用されます。 NONE を指定した列には、どのようなキャラクタセットのデータもロードできます。しかし、そのデータを NONE 以外のキャラクタセットを指定した列にロードすることは出来ません。それは、ソースからディストネーションに転送するときの文字変換が行われないためです。したがって、大抵の場合はエラーを発生させます。~

-システムテーブルの構成
 データベースを作成した後に、テーブル、ビュー、インデックスそれにシステムビュー(トリガ、ジェネレータ、ストアドプロシージャ、UDFなど)の定義を行います。~
''重要'' DSQL で CREATE DATABASE EXECUTE IMMEDIATE を実行する時は、データベースハンドルおよびトランザクション名が存在する場合、事前に 0 に初期化しなければなりません。~

-リードオンリーデータベース
 データベース作成時には、常にリードライトモードで作成されます。リードオンリーモードに変更したい場合、バックアップを行った後、リストアで "-read_only" モードでリストアを実行するか、gfix を使用して "-mode read_only" によりモードを変更します。~

-ファイルサイズ
 Firebird は、データベースエンジンやシステムの限界値に達するまで、「1つのデータベースを構成するファイル群」の最後となるファイルを動的に拡張します。これは、シングルファイルの場合はそのものが、マルチファイルの場合は最後に指定したファイルがその対象となります。そのため、''拡張対象となるファイルへのLENGTH によるサイズ指定は効果がありません。''~
 Firebirdでは、1つのファイルのサイズは最大 64TByte に制限されています。~
 実際のファイルサイズは、ページサイズ指定×ページ数となりますが、この量が作成時に最初に確保されるわけではありません。当面必要な量のみが確保され、数値は潜在的に使用する最大のサイズを表しています。ページサイズのデフォルトは4096 で、1024から最大16384まで指定できます。~
 (訳注:isql の場合、"SHOW DATABASE"コマンドで、現在接続中のデータベースの情報が表示されますので、作成後に確認してみてください。)

**用例 [#e1e29281]
-isqlで、カレントディレクトリにデータベースを作成します。
 CREATE DATABASE 'employee.fdb' USER 'SYSDBA' PASSWORD 'masterkey';
~
-isqlで、"localhost" の "c:\fb\"ディレクトリに5ファイル構成のマルチファイルデータベースを作成します。キャラクタセットはシフトJISとしています。
 CREATE DATABASE 'localhost:c:\fb\TESTDB.GDB'
   USER 'TESTUSER' PASSWORD 'testpass'
   PAGE_SIZE = 8192 LENGTH = 200000
   DEFAULT CHARACTER SET SJIS_0208
   FILE 'c:\fb\TESTDB1.GDB' LENGTH = 200000
   FILE 'c:\fb\TESTDB2.GDB' LENGTH = 200000
   FILE 'c:\fb\TESTDB3.GDB' LENGTH = 200000
   FILE 'c:\fb\TESTDB4.GDB' LENGTH = 200000
 ;
※最後のファイルにもサイズを指定していますが、実際の効果はありません。
~
~
-埋め込みSQLで、ページサイズ 8192 のデータベースを作成する例です。
 EXEC SQL
 CREATE DATABASE 'employee.fdb' PAGE_SIZE 8192;
~
-埋め込みSQLで、2ファイル構成のデータベースを作成する例です。デフォルトキャラクタセットページの指定も行っています。また、セカンダリの開始ページ数指定を使用しています。
 EXEC SQL
 CREATE DATABASE 'employee.fdb' DEFAULT CHARACTER SET EUCJ_0208
   FILE 'employee2.fdb' STARTING AT PAGE 10001;

**参照 [#b9e5d7bd]
 [[ALTER DATABSE>#alter_dataabse]] , [[DROP DATABASE>#drop_dataabse]]~
~
 さらに詳細が知りたい場合は、Data Definition Guide の secondary files, character set specification, acollation order および、Operations Guide の page size を参照して下さい。
~
~
----
~
~
&aname(drop_database);
*DROP DATABASE [#gb19417a]
 現在接続中のデータベースを削除します。isqlでのみ使用できます。

**構文 [#a47b1894]
 DROP DATABASE;

**詳細の説明 [#ka3d89fc]
 DROP DATABASE により、現在接続中のデータベースを完全に削除できます。つまり、すべての格納されたデータ、二次ファイル、シャドウ、ログファイルも削除されます。~
 ''データベースシステムでは復旧することは出来なくなりますので注意してください。''~
~
 データベースの削除は、データベースの作成者(所有者)、SYSDBA ユーザーおよび OSのルート権限を持ったユーザーのみが可能です。

**用例 [#d4781259]
 DROP DATABASE;

**参照 [#t121cad8]
 [[ALTER DATABSE>#alter_dataabse]] , [[CREATE DATABASE>#create_dataabse]]~
~
~
----
~
~
&aname(alter_database);
*ALTER DATABASE [#fbb3978e]
 二次ファイルを現在のデータベースに追加します。 SQL, DSQL, isql で使用できます。~
 (訳注:Firebirdでは、スキーマ機能は実装されていませんので、DATABASE を SCHEMA としても機能としては同じことになります。)

**構文 [#v085a7eb]
 ALTER {DATABASE | SCHEMA} ADD <add_clause>;

 <add_clause> = FILE 'filespec' [<fileinfo>] [<add_clause>]

 <fileinfo> = LENGTH [=] int [PAGE[S]]
            | STARTING [AT [PAGE]] int [<fileinfo>]
※ DSQLで使用する場合、終端文字のセミコロンは不要です。 isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。

|引数|説明|h
|SCHEMA|DATABASEの指定となんら変わりません。|
|ADD FILE 'filespec'|二次ファイルとして追加するいくつかのファイル名指定します。リモートデータベースの場合には、ノード名の指定を含めることは出来ません。|
|STARTING [AT [PAGE]] int|二次ファイルの開始ページ番号を指定します。|
|LENGTH [=] int [PAGE[S]]|二次ファイルのデータベースファイルのページサイズを指定します。|

**詳細の説明 [#uaef8201]
 ALTER DATABASE は、既存のデータベースに二次ファイルを追加します。二次ファイルの追加により、データベースに格納できるストレージを拡張できます。しかし、二次ファイルの指定には、ノードの指定を含むことは出来ません。~
 ALTER DATABASE が実行できるのは、作成者(所有者)、SYSDBA ユーザーおよび OS のルート権限を所有しているユーザーのみです。

 ALTER DATABASE の実行には、排他的なデータベースアクセスが必要です。

※Firebirdはデータベースを構成するファイル群の最後のファイルのサイズを、限界値まで自動的に拡張します。そのため、最後となるファイルのサイズの指定を行っても効果はありません。

 ALTER DATABASE を使用して、既存のデータベースファイルを分割することは出来ません。例えば、既存データベースがすでに80,000ページ使用している時に "STARTING AT 50000" と指定して二次ファイルを追加しても、データベースエンジンは新しいファイルの開始ページを 80,001 からとします。(訳注:つまり、希望するサイズに達する前に、早めにファイル追加を行う必要があるということ。)~
※既存ファイルの分割を行う場合は、バックアップ&リストアを行い、そのリストア時にファイルとサイズを指定することにより実現します。

**用例 [#q96d323a]
 isql での使用例です。2つの二次ファイルを既存(かつ現在の)データベースに追加します。1つめの二次ファイル employee2.fdb の開始ページを 10,001 、長さを 10,000 としています。データベースエンジンは、一次ファイルの使用量が 10,001 を超えたときに二次ファイルの使用を始めます。

 ALTER DATABASE
   ADD FILE 'employee2.fdb'
   STARTING AT PAGE 10001 LENGTH 10000
   ADD FILE 'employee3.fdb';

**参照 [#o51b05ca]
 [[CREATE DATABSE>#create_dataabse]] , [[DROP DATABASE>#drop_dataabse]]

 これ以上の情報が知りたい場合は、Data Definition Guide の multi-file databases と Operations Guide の exclusive database access を参照して下さい。