001[[TOP]]へ~
002-[[リファレンスガイド]]へ~
003--[[Firebird SQLリファレンス]]へ~
004 
005----
006*Firebird SQL リファレンス:CREATE DATABASE, DROP DATABASE, ALTER DATABASE [#c28c08e2]
007 
008#contents
009 
010----
011 
012&aname(create_databse);
013*CREATE DATABASE [#n0b67aef]
014 新しいデータベースを作成します。 SQL,DSQL,isql で使用できます。~
015 この文書は、公開されているIB6のSQLレファレンスを基とし、1.5.1までの各リリースノートにおける追加内容に関して反映・統合されています。~
016 (訳注:Firebirdでは、スキーマ機能は実装されていませんので、DATABASE を SCHEMA としても機能としては同じことになります。)
017 
018**構文 [#j48dcabc]
019 
020 CREATE {DATABASE | SCHEMA} 'filespec'
021    [USER 'username' [PASSWORD 'password']]
022    [PAGE_SIZE [=] int]
023    [LENGTH [=] int [PAGE[S]]]
024    [DEFAULT CHARACTER SET charset]
025    [<secondary_file>];
026 
027 <secondary_file> = FILE 'filespec' [<fileinfo>] [<secondary_file>]
028 
029 <fileinfo> = [LENGTH [=] int [PAGE[S]] | STARTING [AT [PAGE]] int }
030              [<fileinfo>]
031 
032※ DSQLで使用する場合、終端文字のセミコロンは不要です。 isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。
033~
034~
035|引数|説明|h
036|'filespec'|新しいデータベースファイルの指定。プラットフォームに依存した表現になります。|
037|USER 'username'|データベースファイルを作成するデータベースサーバ上で有効なユーザー名。パスワードとあわせてセキュリティデータベースと照合されます。|
038|~|・Windowsクライアントアプリケーションでは、サーバ接続時にユーザー名は必須です。|
039|~|・NT や NetWare?上で動作するクライアントアプリケーションでは、サーバ接続時にユーザー名は必須です。|
040|PASSWORD 'password'|データベースファイルを作成するデータベースサーバ上で有効なユーザー名。パスワードとあわせてセキュリティデータベースと照合されます。先頭8文字が使用されます。|
041|~|・Windowsクライアントアプリケーションでは、サーバ接続時にユーザー名は必須です。|
042|~|・NT や NetWare?上で動作するクライアントアプリケーションでは、サーバ接続時にユーザー名は必須です。|
043|PAGE_SIZE [=] int|データベースのページサイズをバイト数で指定します。デフォルトは4096で、1024,2048,4096,8192,16384が指定できます。|
044|DEFAULT CHARACTER SET charset|指定された名称のキャラクタセットをデータベースのデフォルトキャラクタセットにします。省略時のデフォルトは NONE です。|
045|FILE 'filespec'|(マルチファイルデータベース作成時に)複数の二次ファイルを作成するときの名前です。二次ファイルは、一次ファイルが満杯になった後に使用されます。データベース作成がリモートサーバに対して行われるときは、名前にノード名を含むことは出来ません。(訳注:つまり、複数のDBサーバに渡るマルチファイルデータベースは不可)|
046|STARTING [AT [PAGE]] int|二次ファイルの開始ページ番号を指定します。|
047|LENGTH [=] int [PAGE[S]]|一次ファイル、二次ファイルのデータベースファイルのページサイズを指定します。一次ファイルでのサイズ指定は、二次ファイルを指定している場合にのみ行います。|
048~
049**詳細の説明 [#udb950b3]
050 CREATE DATABASE により、新しいデータベースを作成します。空のデータベースを作成すると共に、ユーザーがデータベースを使用するために通常指定する、一次ファイル(プライマリファイル・主ファイル)を作成します。
051 (訳注:1.5以降ではデータベース名にエイリアスが使用できるので、必ずしも一次ファイルの名前を使用するとは限りません。)
052-ファイル構成
053 デフォルトでは、データベースはシングルファイル構成のデータベースを作成します。~
054~ 追加して二次ファイルの指定を行うことにより、マルチファイル構成のデータベースを作成出来ます。ただし、データベースがリモートなサーバ上で作成される場合、二次ファイルの名前にノード名を加えることは出来ません。~
055 
056-データベースページサイズ
057 ページサイズを増やすことにより、以下の理由によりパフォーマンスが向上させる可能性があります。~
058--インデックスの深さが小さくなり、速度が向上する可能性があります。
059--1つの行に大きなデータがある場合非常に有効です。
060--BLOBのデータが1ページに収まる場合、それはとても効率的に管理されます。
061~ただし、大部分のトランザクションが少量の列データを使用する場合には、小さいページサイズの方が有効な場合もあります。それは、少ないキャッシュメモリに多数の列データが存在可能となり、キャッシュが有効に働きやすくなるからです。~
062 
063--データベースの Dialect 値
064 作成時の Dialect 値は、それを行うクライアントの設定に依存します。~
065 例として、isql の場合は起動時に "-sql_dialect n" スイッチを指定、もしくは "SET SQL DIALECT n" コマンドを実行した後に CREATE DATABASE を実行します。~
066 基本的には 3 を指定してください。1などの値はレガシーなデータベースからの移行のために準備されています。~
067~
068※データベースのDialect値の変更は、gfixコマンドや IBConsole のプロパティダイアログにより行うことが出来ます。~
069 
070-データベースキャラクタセットの使用
071 DEFAULT CHARACTER SET を選択すると、コレーションオーダーに設定できるサブセットの指定が決定されます。コレーションオーダーの指定を行うと、それは SELECT, INSERT, UPDATE の列操作に影響を与えます。~
072 デフォルトキャラクタセットを指定しない場合、デフォルトを NONE と指定した場合と同じになります。キャラクタセットに NONE を指定するということは、列には「特定のキャラクタセットがない」と仮定されたことになります。その場合、格納や取り出すときにはオリジナルのデータがそのまま使用されます。 NONE を指定した列には、どのようなキャラクタセットのデータもロードできます。しかし、そのデータを NONE 以外のキャラクタセットを指定した列にロードすることは出来ません。それは、ソースからディストネーションに転送するときの文字変換が行われないためです。したがって、大抵の場合はエラーを発生させます。~
073 
074-システムテーブルの構成
075 データベースを作成した後に、テーブル、ビュー、インデックスそれにシステムビュー(トリガ、ジェネレータ、ストアドプロシージャ、UDFなど)の定義を行います。~
076''重要'' DSQL で CREATE DATABASE EXECUTE IMMEDIATE を実行する時は、データベースハンドルおよびトランザクション名が存在する場合、事前に 0 に初期化しなければなりません。~
077 
078-リードオンリーデータベース
079 データベース作成時には、常にリードライトモードで作成されます。リードオンリーモードに変更したい場合、バックアップを行った後、リストアで "-read_only" モードでリストアを実行するか、gfix を使用して "-mode read_only" によりモードを変更します。~
080 
081-ファイルサイズ
082 Firebird は、データベースエンジンやシステムの限界値に達するまで、「1つのデータベースを構成するファイル群」の最後となるファイルを動的に拡張します。これは、シングルファイルの場合はそのものが、マルチファイルの場合は最後に指定したファイルがその対象となります。そのため、''拡張対象となるファイルへのLENGTH によるサイズ指定は効果がありません。''~
083 Firebirdでは、1つのファイルのサイズは最大 64TByte に制限されています。~
084 実際のファイルサイズは、ページサイズ指定×ページ数となりますが、この量が作成時に最初に確保されるわけではありません。当面必要な量のみが確保され、数値は潜在的に使用する最大のサイズを表しています。ページサイズのデフォルトは4096 で、1024から最大16384まで指定できます。~
085 (訳注:isql の場合、"SHOW DATABASE"コマンドで、現在接続中のデータベースの情報が表示されますので、作成後に確認してみてください。)
086 
087**用例 [#e1e29281]
088-isqlで、カレントディレクトリにデータベースを作成します。
089 CREATE DATABASE 'employee.fdb' USER 'SYSDBA' PASSWORD 'masterkey';
090~
091-isqlで、"localhost" の "c:\fb\"ディレクトリに5ファイル構成のマルチファイルデータベースを作成します。キャラクタセットはシフトJISとしています。
092 CREATE DATABASE 'localhost:c:\fb\TESTDB.GDB'
093   USER 'TESTUSER' PASSWORD 'testpass'
094   PAGE_SIZE = 8192 LENGTH = 200000
095   DEFAULT CHARACTER SET SJIS_0208
096   FILE 'c:\fb\TESTDB1.GDB' LENGTH = 200000
097   FILE 'c:\fb\TESTDB2.GDB' LENGTH = 200000
098   FILE 'c:\fb\TESTDB3.GDB' LENGTH = 200000
099   FILE 'c:\fb\TESTDB4.GDB' LENGTH = 200000
100 ;
101※最後のファイルにもサイズを指定していますが、実際の効果はありません。
102~
103~
104-埋め込みSQLで、ページサイズ 8192 のデータベースを作成する例です。
105 EXEC SQL
106 CREATE DATABASE 'employee.fdb' PAGE_SIZE 8192;
107~
108-埋め込みSQLで、2ファイル構成のデータベースを作成する例です。デフォルトキャラクタセットページの指定も行っています。また、セカンダリの開始ページ数指定を使用しています。
109 EXEC SQL
110 CREATE DATABASE 'employee.fdb' DEFAULT CHARACTER SET EUCJ_0208
111   FILE 'employee2.fdb' STARTING AT PAGE 10001;
112 
113**参照 [#b9e5d7bd]
114 [[ALTER DATABSE>#alter_dataabse]] , [[DROP DATABASE>#drop_dataabse]]~
115~
116 さらに詳細が知りたい場合は、Data Definition Guide の secondary files, character set specification, acollation order および、Operations Guide の page size を参照して下さい。
117~
118~
119----
120~
121~
122&aname(drop_database);
123*DROP DATABASE [#gb19417a]
124 現在接続中のデータベースを削除します。isqlでのみ使用できます。
125 
126**構文 [#a47b1894]
127 DROP DATABASE;
128 
129**詳細の説明 [#ka3d89fc]
130 DROP DATABASE により、現在接続中のデータベースを完全に削除できます。つまり、すべての格納されたデータ、二次ファイル、シャドウ、ログファイルも削除されます。~
131 ''データベースシステムでは復旧することは出来なくなりますので注意してください。''~
132~
133 データベースの削除は、データベースの作成者(所有者)、SYSDBA ユーザーおよび OSのルート権限を持ったユーザーのみが可能です。
134 
135**用例 [#d4781259]
136 DROP DATABASE;
137 
138**参照 [#t121cad8]
139 [[ALTER DATABSE>#alter_dataabse]] , [[CREATE DATABASE>#create_dataabse]]~
140~
141~
142----
143~
144~
145&aname(alter_database);
146*ALTER DATABASE [#fbb3978e]
147 二次ファイルを現在のデータベースに追加します。 SQL, DSQL, isql で使用できます。~
148 (訳注:Firebirdでは、スキーマ機能は実装されていませんので、DATABASE を SCHEMA としても機能としては同じことになります。)
149 
150**構文 [#v085a7eb]
151 ALTER {DATABASE | SCHEMA} ADD <add_clause>;
152 
153 <add_clause> = FILE 'filespec' [<fileinfo>] [<add_clause>]
154 
155 <fileinfo> = LENGTH [=] int [PAGE[S]]
156            | STARTING [AT [PAGE]] int [<fileinfo>]
157※ DSQLで使用する場合、終端文字のセミコロンは不要です。 isql及びC/C++の埋め込みSQLでは行の終わりを示すために終端文字は必要です。
158 
159|引数|説明|h
160|SCHEMA|DATABASEの指定となんら変わりません。|
161|ADD FILE 'filespec'|二次ファイルとして追加するいくつかのファイル名指定します。リモートデータベースの場合には、ノード名の指定を含めることは出来ません。|
162|STARTING [AT [PAGE]] int|二次ファイルの開始ページ番号を指定します。|
163|LENGTH [=] int [PAGE[S]]|二次ファイルのデータベースファイルのページサイズを指定します。|
164 
165**詳細の説明 [#uaef8201]
166 ALTER DATABASE は、既存のデータベースに二次ファイルを追加します。二次ファイルの追加により、データベースに格納できるストレージを拡張できます。しかし、二次ファイルの指定には、ノードの指定を含むことは出来ません。~
167 ALTER DATABASE が実行できるのは、作成者(所有者)、SYSDBA ユーザーおよび OS のルート権限を所有しているユーザーのみです。
168 
169 ALTER DATABASE の実行には、排他的なデータベースアクセスが必要です。
170 
171※Firebirdはデータベースを構成するファイル群の最後のファイルのサイズを、限界値まで自動的に拡張します。そのため、最後となるファイルのサイズの指定を行っても効果はありません。
172 
173 ALTER DATABASE を使用して、既存のデータベースファイルを分割することは出来ません。例えば、既存データベースがすでに80,000ページ使用している時に "STARTING AT 50000" と指定して二次ファイルを追加しても、データベースエンジンは新しいファイルの開始ページを 80,001 からとします。(訳注:つまり、希望するサイズに達する前に、早めにファイル追加を行う必要があるということ。)~
174※既存ファイルの分割を行う場合は、バックアップ&リストアを行い、そのリストア時にファイルとサイズを指定することにより実現します。
175 
176**用例 [#q96d323a]
177 isql での使用例です。2つの二次ファイルを既存(かつ現在の)データベースに追加します。1つめの二次ファイル employee2.fdb の開始ページを 10,001 、長さを 10,000 としています。データベースエンジンは、一次ファイルの使用量が 10,001 を超えたときに二次ファイルの使用を始めます。
178 
179 ALTER DATABASE
180   ADD FILE 'employee2.fdb'
181   STARTING AT PAGE 10001 LENGTH 10000
182   ADD FILE 'employee3.fdb';
183 
184**参照 [#o51b05ca]
185 [[CREATE DATABSE>#create_dataabse]] , [[DROP DATABASE>#drop_dataabse]]
186 
187 これ以上の情報が知りたい場合は、Data Definition Guide の multi-file databases と Operations Guide の exclusive database access を参照して下さい。