ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# CREATE DATABASE文

> データベースを構成するためのデータベース・システム・ファイル、メタデータ定義、ユーザー・データを作成します。CREATE DATABASE文を使用すると、単一SQL文で新規データベースに対してすべてのデータ定義と権限定義を指定できます。（データベースには後で定義を追加することもできます。）適切なパフォーマンスとデータ整合性を保持する方法の詳細は、『Oracle Rdb7 Guide to Database Performance and Tuning』を参照してください。

> CREATE DATABASE文には、高い柔軟性を保つための様々な追加要素があります。CREATE DATABASE文ではその最も単純な形式で、データベース・システム・ファイルを作成し、その名前を指定し、データベースの物理特性を定義します。CREATE DATABASE文の追加要素を使用すると、次を指定することもできます。

> - CREATE DATABASEによって作成されたデータベースが複数ファイル（別個のデータベース・ルート・ファイルと記憶域データ・ファイル）か、単一ファイル（データベース・ルート・ファイルと記憶域データ・ファイルの結合）か。複数ファイルのデータベースには、ユーザー・データ用の記憶域は多数あり、すべてCREATE DATABASE文によって作成されたデータベース・ルート・ファイルとは区別されています。複数ファイルのデータベースには、パフォーマンスの向上のため、CREATE DATABASE文のCREATE STORAGE AREA句が含まれ、複数の記憶域ファイルが作成されます。
>   CREATE DATABASE文にCREATE STORAGE AREA句があるかどうかによって、データベースが単一ファイルか複数ファイルかを判断できます。複数ファイルのデータベースを作成するには、CREATE DATABASE文にCREATE STORAGE AREA句を指定する必要があります。単一ファイルのデータベースを作成する場合は、CREATE DATABASE文にCREATE STORAGE AREA句を指定しません。

> - システムのデフォルトをオーバーライドする、各種データベース・ルート・ファイル・パラメータの値。データベース・ルート・ファイル（.rdb）・パラメータは、データベース・ルート・ファイルの特性を示すものです。データベース・ルート・ファイル・パラメータにより、データベース全体が、単一ファイルのデータベースであるか、複数ファイルのデータベースであるかが決まります。

> - システムのデフォルトをオーバーライドする、記憶域パラメータの値。記憶域パラメータは、データベース記憶域ファイルの特性を示すものです。単一ファイルのデータベースでは、記憶域データ・ファイルはデータベース・ルート・ファイルと結合されるため、記憶域パラメータが単一の記憶域に適用されると、データベース全体に反映されます。複数ファイルのデータベースでは、記憶域パラメータが主記憶域RDB$SYSTEMのデフォルト、およびCREATE DATABASE文内のその後に続くすべてのCREATE STORAGE AREA句のデフォルトを指定します。

> - 任意の数のデータベース要素。データベース要素は、CREATE CATALOG文、CREATE STORAGE AREA句またはGRANT文です。CREATE STORAGE AREA句は複数ファイルのデータベース固有のものであるため、単一ファイルのデータベースを作成するCREATE DATABASE文に含めることはできません。複数ファイルのデータベースを作成するCREATE DATABASE文には、少なくとも1つのCREATE STORAGE AREA句を含める必要があります。
>   CREATE DATABASE文外部の同じ文とは異なり、データベース要素では文の終了記号は使用されません。CREATE DATABASE文は、最初に発生する文の終了文字により終了します。その後じゃ、CREATE文またはGRANT文はREATE DATABASE文の有効範囲外になります。

> - データベースのデフォルト・キャラクタ・セットおよび各国語キャラクタ・セット。識別子キャラクタ・セット、データベースのデフォルト・キャラクタ・セットおよび各国語キャラクタ・セットの詳細は、それぞれ第2.1.5項、第2.1.3項および第2.1.7項を参照してください。

## 環境

> CREATE DATABASE文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - SQLモジュールのプロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### ADJUSTABLE LOCK GRANULARITY IS ENABLED

> ### ADJUSTABLE LOCK GRANULARITY IS DISABLED

> データベース・システムが自動的に保持するデータベース・リソースでのロック数をできるかぎり最小化する機能を有効にまたは無効にします。デフォルトはENABLEDで、データベースに対するロックはより少なくなります。ただし、データベース・リソースの競合が大きい場合、ロックの自動調整はCPU排出になります。調節可能なロック粒度を無効にすることによって、このようなデータベースでのCPU使用量を抑えるため、より制約の強いロックにできます。

> ### alias

> CREATE DATABASE文によって実行される明示的なデータベース宣言の別名を指定します。別名とは、後に続くSQL文に含まれるデータベースを識別するための、データベースを特定するアタッチの名前です。

> 注意 別名を使用してデータベースにアタッチした場合、そのデータベース内で要素名を修飾するには、その別名を後続の文で使用する必要があります。

> データベース・ルート・ファイル・パラメータからFILENAME引数を省略すると、データベース・ルート・ファイルのファイル名としても別名が使用され、現在のデフォルト・ディレクトリ内にルート・ファイルが作成されます。（ALIAS句にディスクまたはディレクトリ仕様を含めている場合は、SQLにより構文エラーが生成されます。）FILENAMEまたはALIAS引数を指定する必要があります。

> CREATE DATABASE文のスキーマ要素ではこの別名を使用する必要はありませんが、その他の別名は指定できません。

> ALIAS句はオプションです。対話型SQLおよびプリコンパイルされたプログラム内のデフォルトの別名は、RDB$DBHANDLEです。SQLモジュール言語では、デフォルトはモジュール・ヘッダーに指定された別名です。ALIAS句で明示的に指定するか、またはALIAS句を省略してデフォルトの別名を使用すると、そのデータベースがデフォルトのデータベースとして宣言されます。デフォルト・データベースを指定すると、デフォルト・データベースを参照するCREATE DATABASE文の外部の文では別名の使用が不要になります。

> デフォルトのデータベースがすでに宣言されており、ALIAS句にデフォルトの別名（またはすでに宣言された任意の別名）を指定する場合、その結果はCREATE DATABASE文を発行する環境によって異なります。

> - 対話型SQLでは、デフォルトのデータベース宣言をオーバーライドするかどうかを確認するプロンプトが表示されます。デフォルトの宣言を明示的にオーバーライドしないかぎり、CREATE DATABASE文は失敗します。

>       SQL> -- Assume a default database has been declared:
>       SQL> --
>       SQL> -- Now create a database without an alias.
>       SQL> -- SQL asks if you want to override the default:
>       SQL> CREATE DATABASE FILENAME test;
>       This alias has already been declared.
>       Would you like to override this declaration (No)? NO
>       %SQL-F-DEFDBDEC, A database has already been declared with the default
>       alias

> - 埋込みSQLまたはSQLモジュール言語内で、CREATE DATABASE文に宣言済の別名を指定すると、プログラムのプリコンパイル時またはモジュールのコンパイル時にエラーが生成されます。

> - 動的SQL内で宣言済の別名を指定すると、過去の宣言がオーバーライドされます。

> デフォルト・データベースの詳細は、第2.2.1項を参照してください。

> ### ALL AREAS

> すべての記憶域の作成と初期化を並行して実行するように指定します。

> すべての記憶域は非同期で作成されます。記憶域を多数作成すると、プロセスの割当て制限を超え、データベースの作成に失敗する場合があります。

> ### ALLOCATION IS number-pages

> 最初にデータベースに割り当てられたデータベースのページ数です。SQLによって自動的に割当てが拡張され、データのロードおよび後続の拡張が処理されます。ページは3グループに割り当てられます。25ページのALLOCATIONには、実際には27ページが割り当てられます。デフォルトは700ページです。大規模なデータベースをロードしている場合、割当てサイズを大きくすると、ファイルの断片化を防止できます。

> ### ALTER TRANSACTION MODES

> 事前に定義したモードまたはデフォルト・モードを有効なまま残し、指定したモードを有効にします。たとえば、無効化するトランザクション・モードがバッチ更新のみである場合、次の文を使用します。

>     SQL> CREATE DATABASE FILENAME mf_personnel
>     cont>   ALTER TRANSACTION MODES (NO BATCH UPDATE);

> 指定しない場合、デフォルトのトランザクション・モードはALLです。

> ### ASYNC BATCH WRITES ARE ENABLED

> ### ASYNC BATCH WRITES ARE DISABLED

> 非同期バッチ書込みを有効にするか無効にするかを指定します。

> 非同期バッチ書込みによって、変更されたデータ・ページのバッチをディスクに非同期で書き込むプロセスが許可されます（バッチ書込み操作の完了を待つ間、プロセスは停止しません）。非同期バッチ書込みによって、データ整合性が失われることなく更新アプリケーションのパフォーマンスが向上します。

> デフォルトでは、バッチ書込みが有効です。非同期バッチ書込みを使用する場合の詳細は、『Oracle Rdb7 Guide to Database Performance and Tuning』を参照してください。

> 論理名RDM$BIND_ABW_ENABLEDを定義すると、非同期バッチ書込みを有効にできます。

> ### ASYNC PREFETCH IS ENABLED

> ### ASYNC PREFETCH IS DISABLED

> Oracle Rdbによって、プロセスが実際にページをリクエストする前に、フェッチによるページのディスクからの読込みを待機する時間を短縮するかどうかを指定します。

> プリフェッチによってパフォーマンスが大幅に向上しますが、不適切に使用するとリソースを過度に使用する可能性があります。非同期プリフェッチはデフォルトで有効です。非同期プリフェッチの詳細は、『Oracle Rdb7 Guide to Database Performance and Tuning』を参照してください。

> 論理名RDM$BIND_APF_ENABLEDを定義すると、非同期プリフェッチを有効にできます。

> ### BUFFER SIZE IS buffer-blocks BLOCKS

> SQLによってバッファごとに割り当てられるブロック数を指定します。ゼロより大きい符号なし整数を指定する必要があります。デフォルトのバッファ・サイズは、PAGE SIZE値の3倍です（デフォルトのPAGE SIZEが2の場合、6ブロック）。

> バッファ・サイズはグローバル・パラメータであり、ページごと（またはバッファごと）のブロック数はページごとに64ブロック未満に制限されます。ページ・サイズは複数ファイルのデータベースの記憶域ごとに異なり、ページ・サイズは各記憶域に格納されるレコードのサイズで決まります。

> バッファごとにブロック数を選択する場合は、バッファに収まる概算ページ数を選択します。つまり、複数ファイルのデータベースのすべての記憶域のすべてのページ・サイズで完全に割り切れるバッファ・サイズです。たとえば、記憶域が3つあり、ページ・サイズがそれぞれ2、3および4ブロックの場合、12ブロックのバッファ・サイズを選択するとバッファの使用が最適になります。反対に、バッファ・サイズとして8を選択すると、ページ・サイズが3の記憶域のバッファごとに2ブロックが無駄になります。Oracle Rdbによって、バッファに収まるできるかぎり多数のページ数が読み取られますが、この例ではバッファに3ブロックのページが2つ読み取られ、2つの無駄なブロックが残されます。

> ### CACHE USING row-cache-name

> 指定した行キャッシュを、データベース内のすべての記憶域のデフォルトとして割り当てます。各記憶域に格納される行は、それらが表データ、セグメント化された文字列データ、または索引ノードなどの特殊名行で構成されているかどうかに関係なく、すべてキャッシュされます。

> CREATE DATABASE文を終了する前に、行キャッシュを作成する必要があります。次に例を示します。

>     SQL> CREATE DATABASE FILENAME test_db
>     cont> ROW CACHE IS ENABLED
>     cont> CACHE USING test1
>     cont> CREATE CACHE test1
>     cont>    CACHE SIZE IS 100 ROWS
>     cont> CREATE STORAGE AREA area1;

> CREATE STORAGE AREA句の後にCACHE USING句を指定するか、後でデータベースおよび記憶域を変更して新規の行キャッシュを割り当てることにより、データベースのデフォルトの行キャッシュをオーバーライドできます。各記憶域に対して割り当てることができる行キャッシュは1つのみです。

> CACHE USING句もNO ROW CACHE句も指定しない場合、データベースのデフォルトはNO ROW CACHE句です。

> ### CARDINALITY COLLECTION IS ENABLED

> ### CARDINALITY COLLECTION IS DISABLED

> オプティマイザがカーディナリティの更新をシステム表内に記録するかどうかを指定します。有効にした場合、表に行が挿入または削除されると、オプティマイザによって表および非一意索引のカーディナリティが収集されます。カーディナリティの更新は、変更が十分に蓄積されている場合のコミット時、または切断時に実行されます。

> 頻繁に更新される環境では、カーディナリティ更新を無効にするほうが便利な場合があります。この機能を無効にする場合は、RMU Analyze Cardinalityコマンドを使用して手動でカーディナリティを管理する必要があるため、オプティマイザには見積り用に非常に正確な値を指定します。

> カーディナリティ収集はデフォルトで有効です。

> ### CARRY OVER LOCKS ARE ENABLED

> ### CARRY OVER LOCKS ARE DISABLED

> キャリーオーバー・ロックの最適化を有効または無効にします。デフォルトでは、キャリーオーバー・ロックは有効です。

> データベースにアタッチする一方で、プロセスには、アクティブなロック（データベースにアタッチされたロック）およびいくつかのキャリーオーバー・ロック（降格されていない以前のトランザクションで要求されたロック）がある場合があります。現在、キャリーオーバーとしてマークされているロックがトランザクションで必要になる場合、アクティブ・ロックに変更するとロックを再利用できます。ロック・リクエストや降格を実行せず、同じロックをアクティブからキャリーオーバー、キャリーオーバーからアクティブへと何度も変更できます。あるプロセスが同じ領域に繰り返しアクセスする場合、これによってロック・リクエスト回数は大幅に減少します。

> キャリーオーバー・ロック最適化の一環として、NOWAITトランザクションによりNOWAITロックが要求、取得、および保持されます。これにより、データベースにアクセスしている他のプロセスに対して、NOWAITトランザクションが存在し、そのためOracle Rdbによってすべてのキャリーオーバー・ロックが解除されるということが通知されます。NOWAITトランザクションが実行時に明らかに遅い場合は、ALTER DATABASE文またはCREATE DATABASE文にCARRY OVER LOCKS ARE DISABLEDを指定できます。

> この機能は、オンライン・データベース変更として使用できます。

> ### CHECKPOINT TIMED EVERY n SECONDS

> row-cache-options句に対し、行キャッシュ・サーバー（RCS）・プロセスによってチェックポイントが実行され、行キャッシュの内容がディスクに戻される頻度を指定します。RCSプロセスでは、FAST COMMIT句のチェックポイント頻度オプションは使用されません。

> RCSチェックポイントの実行頻度は、ノードの失敗の後のリカバリ操作中に、読み取る必要のある.aijファイルの数を決定する上で重要です。また、データベースに対してチェックポイントを実行する行キャッシュについて、マークされたレコードがデータベースにフラッシュ・バックされる頻度にも影響を及ぼします。デフォルトは15分（900秒）ごとです。

> ### CHECKPOINT UPDATED ROWS TO BACKING FILE

> ### CHECKPOINT UPDATED ROWS TO DATABASE

> ### CHECKPOINT ALL ROWS TO BACKING FILE

> すべての行キャッシュのチェックポイント操作中にデフォルトのソースおよびターゲットを指定します。ALL ROWSが指定された場合、各チェックポイント操作中に書き込まれるソース・レコードは行キャッシュの変更済および未変更の両方の行です。UPDATED ROWSが指定された場合、行キャッシュの変更済の行に対してのみ、毎回チェックポイントが実行されます。

> チェックポイント操作のターゲットがBACKING FILEである場合、RCSプロセスによってソース行キャッシュ・エントリがバッキング（.rdc）・ファイルに書き込まれます。バッキング・ファイルの作成には、行キャッシュLOCATION句、ALLOCATION句およびEXTENT句が使用されます。ノード障害からのリカバリ時に、データベース・リカバリ・プロセスにより行キャッシュをバッキング・ファイルにある行からメモリー内に再移入できます。

> ターゲットがDATABASEである場合は、更新済の行キャッシュ・エントリがデータベースに書き込まれます。行キャッシュLOCATION句、ALLOCATION句およびEXTENT句は無視されます。ノード障害からのリカバリ時に、データベース・リカバリ・プロセスでは行キャッシュのコンテンツにデータが存在しません。このため、行キャッシュをメモリー内に再移入できません。

> CREATE CACHE句、ADD CACHE句またはALTER CACHE句のLOCATION句が、このデータベース・レベルのCHECKPOINT句より優先されます。

> ### CHECKSUM CALCULATION IS ENABLED

> ### CHECKSUM CALCULATION IS DISABLED

> このオプションでは、ページを記憶域ファイルまたはスナップショット・ファイルから読み取る、またはファイルへ書き込む場合のページ・チェックサムの計算を有効または無効にできます。

> デフォルトはENABLEDです。

> 注意 チェックサム計算をデフォルトのまま有効にしておくことをお薦めします。

> 現在の技術では、チェックサム計算では検出できますが、他のハードウェア、ファームウェアまたはソフトウェアでは検出できないエラーが発生する場合があります。メモリー内またはディスク上でページが破損していて、検出されていない場合は、予期しないアプリケーション結果が生じ、データベースが破損する可能性があります。

> 次のような特定の状況を除き、チェックサム計算を実行することをお薦めします。

> - アプリケーションが安定しており、現行のハードウェアおよびソフトウェア構成で、長期にわたってエラーなしで実行されている場合。

> - 現行の構成で、最大CPU使用率に達している場合。チェックサム計算による実際のCPU使用率は、主にデータベース内のデータベース・ページのサイズによって異なります。データベース・ページのサイズが大きくなるほど、チェックサム計算でのCPU使用率は顕著になります。

> 注意 チェックサム計算によるCPU使用率の低下と、チェックサム計算を無効にした場合のデータベース整合性の損失の可能性の妥協点を慎重に検証することをお薦めします。

> Oracle Rdbでは、チェックサム計算を無効化し、後でエラーなしで再有効化できます。ただし、チェックサム計算が無効化されると、後でチェックサム計算が再有効化されても、破損ページが検出されない場合があります。

> ### CLEAN BUFFER COUNT IS buffer-count BUFFERS

> すぐに再使用が可能な状態が保持されるバッファの数を指定します。

> Oracle Rdbでは、置換のためのバッファの数は、プロセスのバッファ最低使用頻度キューの最後に保持されます。

> デフォルトは5バッファです。最小値は1、最大値はバッファ・プール・サイズと同じ大きさまで指定できます。

> 論理名RDM$BIND_CLEAN_BUF_CNTを定義すると、クリーン・バッファの数をオーバーライドできます。値の設定の詳細は、『Oracle Rdb7 Guide to Database Performance and Tuning』を参照してください。

> ### COLLATING SEQUENCE collation-name

> データベースのCHAR列およびVARCHAR列すべてに使用されるデフォルトの照合順番を指定します。後続のCREATE DOMAIN文で照合順番を指定しない場合は、デフォルトの照合順番が使用されます。

> 照合名はユーザーが選択します。この名前は、このデータベースでの操作用に、この照合順番を参照しているすべてのCOLLATING SEQUENCE句で使用する必要があります。

> ### COMMENT IS 'string'

> 照合順番に関するコメントを追加します。SQLでは、対話型SQLでのSHOW COLLATING SEQUENCE文の実行時にテキストが表示されます。コメントは一重引用符（'）で囲み、コメント内の複数の行はスラッシュ（/）で区切ります。

> ### COUNT IS n

> ロックの管理に使用されるページ・ロック・ツリーのレベル数を指定します。たとえば、COUNT IS 3を指定した場合は、ファンアウト要素は（10、100、1000）です。Oracle Rdbにより範囲が1000ページにロックされ、必要に応じて100、10、1ページと下方に調節されます。

> COUNT IS句が省略された場合、デフォルトは3です。nの値には、1〜8の範囲の値が可能です。

> ### create-cache-clause

> 詳細は、「CREATE CACHE句」を参照してください。

> ### create-catalog-statement

> 詳細は、「CREATE CATALOG文」を参照してください。

> CREATE DATABASE文でCREATE CATALOG文を指定する場合は、最初に同じCREATE DATABASE文でMULTISCHEMA IS ON句を指定します。

> CREATE CATALOG文は即時にコミットされ、ロールバックできません。CREATE CATALOG文を指定するには、次の条件がTRUEである必要があります。

> - データベースがマルチスキーマに対して有効であること。

> - アクティブなトランザクションがないこと。

> - カタログの別名がデータベースの別名と同じであること。

> マルチスキーマに対するデータベース有効化の詳細は、第2.2.11項を参照してください。

> ### create-collating-sequence-statement

> 詳細は、「CREATE COLLATING SEQUENCE文」を参照してください。

> CREATE DATABASE文に埋め込まれたCREATE DOMAIN文の照合順番を指定する場合は、最初に同じCREATE DATABASE文の中でCREATE COLLATING SEQUENCE文を指定する必要があります。

> ### create-domain-statement

> 詳細は、「CREATE DOMAIN文」を参照してください。

> CREATE DATABASE文にCREATE DOMAIN文を埋め込む場合は、FROM path-name句は使用できません。ただし、CREATE DATABASE文の後には別のCREATE DOMAIN文を発行できます。CREATE DATABASE文では、ドメインを直接記述することもできます。

> 埋込みCREATE DOMAIN文の照合順番を指定する場合は、最初に同じCREATE DATABASE文の中でCREATE COLLATING SEQUENCE文を指定する必要があります。

> ### create-function-statement

> CREATE FUNCTION文。詳細は、「CREATE ROUTINE文」を参照してください。

> ### create-index-statement

> 詳細は、「CREATE INDEX文」を参照してください。

> ### create-module-statement

> 詳細は、「CREATE MODULE文」を参照してください。

> ### create-procedure-statement

> CREATE PROCEDURE文。詳細は、「CREATE ROUTINE文」を参照してください。

> ### create-schema-statement

> 詳細は、「CREATE SCHEMA文」を参照してください。

> 作成するスキーマは、そのスキーマを含むカタログとデータベースと別名が同一であるか、デフォルトの別名をカタログおよびデータベースで共有している必要があります。

> ### create-sequence-statement

> 詳細は、「CREATE SEQUENCE文」を参照してください。

> ### create-storage-area-clause

> 詳細は、「CREATE STORAGE AREA句」を参照してください。

> ### create-storage-map-statement

> 詳細は、「CREATE STORAGE MAP文」を参照してください。

> ### create-table-statement

> 詳細は、「CREATE TABLE文」を参照してください。

> CREATE DATABASE文にCREATE TABLE文を埋め込む場合は、FROM path-name句は使用できません。ただし、CREATE DATABASE文の後には別のCREATE TABLE文を発行できます。CREATE DATABASE文では、表を直接記述することもできます。

> CREATE DATABASE文の中のCREATE TABLE文は、作成前のドメインを示すこともできます。ただし、同一のCREATE DATABASE文にドメインに対するCREATE DOMAIN文が存在する必要があります。

> ### create-trigger-statement

> 詳細は、「CREATE TRIGGER文」を参照してください。

> ### create-view-statement

> 詳細は、「CREATE VIEW文」を参照してください。

> ### database-element

> データベース要素はCREATE STORAGE AREA句、（CREATE DOMAIN ... FROM path-nameおよびCREATE TABLE ... FROM path-nameを除く）CREATE文のいずれか、またはGRANT文です。

> ### DBKEY SCOPE IS ATTACH

> ### DBKEY SCOPE IS TRANSACTION

> 削除された行のデータベース・キーをSQLでいつ再使用できるかを制御します。この設定はデータベース・ルート・ファイル・パラメータではなく、CREATE DATABASE文によって実行される暗黙的データベース・アタッチの特性です。したがって、CREATE DATABASE文のDBKEY SCOPE句は、その文を入力したユーザーのセッションの間のみ実効性を持ちます。

> - デフォルトのDBKEY SCOPE IS TRANSACTIONの場合、元の行を削除したトランザクションがCOMMIT文で完了すると、ただちに削除された表の行のデータベース・キーをSQLで再使用（および新しく挿入された行を参照）できます。（元の行を削除したユーザーがROLLBACK文を入力すると、この行のデータベース・キーはSQLで再使用できなくなります。）
>   CREATE DATABASE文を入力したユーザーの接続中は、DBKEY SCOPE IS TRANSACTION句により、データベース・キーが特定のトランザクション内の同じ行のみを参照することが保証されます。

> - DBKEY SCOPE IS ATTACH句の場合、DBKEY SCOPE IS ATTACHによってアタッチされたすべてのユーザーがデータベースからデタッチされるまでは、SQLでデータベース・キーを再使用（および新しく挿入された行を参照）できません。
>   また、DBKEY SCOPE IS ATTACHを使用したアタッチによって、すべてのデータベース・ユーザーにこの特性を前提とすることを強制するために必要なステップは1つのみです。

> - DBKEY SCOPE IS ATTACHをサポートするために必要なオーバーヘッドによる記憶域領域の過度な消費を防止し、新規行を格納する際のパフォーマンス問題を防止するために、DBKEY SCOPE IS TRANSACTIONの使用をお薦めします。
>   CREATE DATABASE文を入力したユーザーの接続中は、DBKEY SCOPE IS ATTACH句により、ユーザーがデータベースからデタッチするまではデータベース・キーが同じ行を参照することが保証されます。