ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 


CREATE SEQUENCE文

順序を作成します。順序は、複数のユーザーが一意の整数を生成するためのデータベース・オブジェクトです。順序を使用して、主キーの値を自動的に生成できます。

環境

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


形式





引数

CACHE numeric-value

NOCACHE

CACHE句は、Oracle Rdbで事前に割り当てられ、アクセスを迅速にするためにメモリーに保持される順序の値の数を指定します。数値には2〜2147483647の値を指定してください。

順序番号の一定のサイクルに収まる値を超える値はキャッシュできません。したがって、CACHE句に使用できる最大値は、次の式の結果値未満にする必要があります。


(MAXVALUE-MINVALUE)/ABS(INCREMENT)

SET FLAGSオプションのSEQ_CACHEを使用して、実行時のCACHEの設定をオーバーライドします。詳細は、「SET FLAGS文」を参照してください。

特定の順序のキャッシュは、順序からの番号の初回リクエスト時に、キャッシュが空であり、値がリクエストされた場合に、その順序から移入されます。システム障害の発生時や、キャッシュが解放された場合、フェッチされていない値は破棄されます。失われる値の最大数は、その時点のキャッシュ・サイズと等しくなります。これはCACHEまたはSET FLAGS SEQ_CACHEオプションで指定される値になります。

NOCACHE句では、その都度割り当てられる値を指定します。これは、Rbcルート・ファイルに対するI/OがCACHE値の使用時より大きくなります。

デフォルトでは、Oracle Rdbでは20の順序値をキャッシュします。

COMMENT IS 'string'

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

CYCLE

NOCYCLE

CYCLE句は、MINVALUEまたはMAXVALUEに達した後も、順序によって値の生成を継続することを指定します。昇順でMAXVALUEに達した後、順序はそのMINVALUEから再開されます。降順でMINVALUEに達した後、順序はそのMAXVALUEから再開されます。NOCYCLE句は、値が最小値または最大値に達した後は、順序によって生成を継続しないことを指定します。この制限を超えて順序を増やそうとすると、エラーが発生します。デフォルトはNOCYCLE句です。

INCREMENT BY numeric-value

順序の増分サイズおよび方向(昇順または降順)を指定します。この数値は-2147483648〜2147483647の(0を除く)範囲である必要があります。絶対値はMAXVALUEとMINVALUEの差異未満である必要があります。負の値によって降順が、正の値によって昇順が指定されます。デフォルトでは、数値は1です。

MAXVALUE numeric-value

NOMAXVALUE

MAXVALUE句は、順序によって生成される最大符号付きquadword(BIGINT)値を指定します。この数値は-9223372036854775808〜9223372036854775808の範囲である必要があります。MAXVALUEは、START WITH句で指定した値以上であり、MINVALUE句で指定した値を超えている必要があります。NOMAXVALUE句は、昇順の最大値を9223372036854775808(およびキャッシュ・サイズを加算)、および降順の最大値を-1に指定します。

デフォルトはNOMAXVALUE句です。

MAXVALUE TINYINT

MAXVALUE SMALLINT

MAXVALUE INTEGER

MAXVALUE BIGINT

SQLでは、数値ではなく、キーワードTINYINT、SMALLINT、INTEGERおよびBIGINTをMAXVALUEに使用できます。これにより、これらのデータ型で使用される順序の範囲設定が簡単になります。指定される値は、このデータ型に割当て可能な正の値の最大値になります。

MINVALUE numeric-value

NOMINVALUE

MINVALUE句は、順序によって生成される最小符号付きquadword(BIGINT)値を指定します。この数値は-9223372036854775808以上である必要があります。MINVALUEは、START WITH句で指定した値以下であり、MAXVALUE句で指定した値未満である必要があります。NOMINVALUE句は、昇順の最小値を1、降順の最小値を-9223372036854775808(およびキャッシュ・サイズを加算)に指定します。

デフォルトはNOMINVALUE句です。

MINVALUE TINYINT

MINVALUE SMALLINT

MINVALUE INTEGER

MINVALUE BIGINT

SQLでは、数値ではなく、キーワードTINYINT、SMALLINT、INTEGERおよびBIGINTをMINVALUEに使用できます。これにより、これらのデータ型で使用される順序の範囲設定が簡単になります。指定される値は、このデータ型に割当て可能な負の値の最小値になります。

ORDER

NOORDER

ORDER句は、それぞれのリクエスト・プロセスに順序番号が必ず順に割り当てられることを指定します。つまり、正確なリクエスト履歴が保持されます。NOORDER句は、順序番号が必ずしもリクエストの順序で生成されないことを指定します。

デフォルトはNOORDER句です。

RANDOMIZE

NORANDOMIZE

RANDOMIZE句は、BIGINT値の最上位バイトにおいて、ランダムな値で順序番号が返されることを指定します。これによって、ランダムに配布される一意の値が生成されます。NORANDOMIZE句を指定すると、順序番号は同時に作成された他の値に近いものになります。

RANDOMIZE句の利点は、ソート索引の列を更新すると、その値が索引構造の様々な場所に記述されることです。これにより、索引の別の場所にある下位ノードを個別に更新できるため、大規模な索引への同時アクセスが向上します。一方、NORANDOMIZE句を指定した場合に順序番号(その他の順序に近い数値)が生成されると、同一または類似する索引ノードの索引が更新され、ソート索引の一部で競合が発生する場合があります。

順序に対して返されるBIGINT値のすべての値範囲が使用されます。このため、NOMAXVALUE句とNOMINVALUE句は順序定義に指定(またはデフォルト設定)する必要があります。BIGINT値の最上位ビットは、ランダムに生成された正の値に設定されます。生成された個別値は、最下位32ビットで返され、その独自性が保たれます。CYCLE句も指定する場合は、最下位32ビットのみが循環します。RDB$SEQUENCES表のRDB$NEXT_SEQUENCE_VALUE列で問合せを実行すると、NEXTVAL疑似列が参照されるまで最上位ビットは割り当てられないため、最下位ビットに生成された値のみが返されます。

RANDOMIZEを指定すると、ORDER、MAXVALUEまたはMINVALUEは指定できなくなります。デフォルトはNORANDOMIZE句です。

sequence-name

作成する順序の名前です。データベース内のすべての順序名で、またはマルチスキーマ・データベースを使用している場合のスキーマ内で一意の名前を使用します。有効なSQL名を使用します。

START WITH numeric-value

順序に使用する初期数値を指定します。この値は、他の順序属性句で指定される(またはデフォルト設定される)範囲内である必要があります。有効な値の範囲は-9223373036854775808〜9223372036854775807です。

これを削除すると、START WITH値が昇順の場合はMINVALUEの値、降順の場合はMAXVALUEの値にデフォルト設定されます。

STORED NAME IS stored-name

マルチスキーマ・データベースに作成した順序へのアクセスに使用される名前を指定します。ストアド名を使用すると、1つのデータベース内では複数のスキーマを認識しない、Oracle RMUなどのインタフェースを使用して、マルチスキーマ定義にアクセスできます。複数のスキーマに対応しないデータベース内では、順序のストアド名は指定できません。

WAIT

NOWAIT

DEFAULT WAIT

MEXTVALへの参照を使用する場合の待機状態を指定します。順序についてNEXTVALを参照するには、順序のその他のユーザーとの同期化が必要です。DEFAULT WAITを指定すると、現在のトランザクションの待機状態(WAITまたはNOWAIT)が使用されます。つまり、NOWAITトランザクション中は待機しません。

WAIT(デフォルト)を順序に指定すると、現在のトランザクションの待機状態の設定に関係なく、すべての同期化が次の値まで待機します。これは、アプリケーションでNOWAITトランザクションを使用している場合の推奨設定です。トランザクションまたはデータベースに定義された現在のWAITタイムアウト時間が使用されます。

NOWAITを順序に指定すると、現在のトランザクションの設定に関係なく、すべての同期化は次の値まで待機しません。


使用方法


例1: 順序の作成


SQL> -- This example creates a new sequence using the default
SQL> -- values for NOMINVALUE, NOMAXVALUE, INCREMENT BY 1, NOCYCLE,
SQL> -- and CACHE 20. The START WITH value is set to 147.
SQL> -- Allyn Stuart will be assigned an EMPLOYEE_ID value of 147.
SQL> -- Nick Jones will be assigned an EMPLOYEE_ID of 148.
SQL> --
SQL> CREATE SEQUENCE EMPID START WITH 00147;
SQL> -- Use NEXTVAL to fetch a sequence number for the primary key column.
SQL> INSERT INTO EMPLOYEES
cont> (EMPLOYEE_ID, LAST_NAME, FIRST_NAME)
cont> VALUES (EMPID.NEXTVAL, 'STUART', 'ALLYN')
cont> RETURNING EMPLOYEE_ID;
 EMPLOYEE_ID
 147
1 row inserted
SQL> -- Use CURRVAL to reuse the EMPLOYEE_ID value for the foreign key columns
SQL> -- in the associated tables.
SQL> INSERT INTO SALARY_HISTORY
cont> (EMPLOYEE_ID, SALARY_AMOUNT,SALARY_START, SALARY_END)
cont> VALUES (EMPID.CURRVAL, 35000, '6-FEB-1998', NULL)
cont> RETURNING EMPLOYEE_ID;
 EMPLOYEE_ID
 147
1 row inserted
SQL> INSERT INTO JOB_HISTORY
cont> (EMPLOYEE_ID, DEPARTMENT_CODE, JOB_START, JOB_END)
cont> VALUES (EMPID.CURRVAL, 'ENGR', '6-FEB-1998', NULL)
cont> RETURNING EMPLOYEE_ID;
 EMPLOYEE_ID
 147
1 row inserted
SQL> INSERT INTO EMPLOYEES
cont> (EMPLOYEE_ID, LAST_NAME, FIRST_NAME)
cont> VALUES (EMPID.NEXTVAL, 'JONES ', 'NICK ')
cont> RETURNING EMPLOYEE_ID;
 EMPLOYEE_ID
 148
1 row inserted


CREATE STORAGE AREA句

注意

CREATE STORAGE AREAは独立した文として発行できません。これは、CREATE DATABASE文またはIMPORT文の一部としてのみ使用できる句です。

また、記憶域はALTER DATABASE文のADD STORAGE AREA句を使用して作成できます。

複数ファイルのデータベースに追加記憶域を作成します。記憶域は、複数ファイルのデータベースの特定の表に関連付けられるデータ・ファイルおよびスナップショット・ファイルです。

CREATE STORAGE AREA句は、記憶域ファイルの名前を指定し、その物理特性を判断します。後続のCREATE STORAGE MAP文は、記憶域をデータベース内の特定の表に関連付けます。


環境

CREATE STORAGE AREA句は、CREATE DATABASE文またはIMPORT文でのみ使用できます。

形式







引数

ALLOCATION IS number-pages PAGES

最初に記憶域に割り当てられたデータベースのページ数です。Rdbでは、この割当てはSPAM(空き領域管理)ページなどの内部構造ページに対して自動的に拡張されます。たとえば、この例では25の割当てが27に増やされています。


SQL> alter database filename MF_PERSONNEL
cont> add storage area DOC_EXAMPLE
cont>   page format is uniform
cont>   allocation 25;
SQL> attach 'filename MF_PERSONNEL';
SQL> show storage area DOC_EXAMPLE

     DOC_EXAMPLE
         Access is:      Read write
         Page Format:    Uniform
         Page Size:      2 blocks
         Area File:      USER_DISK:[DOC.DATABASES]DOC_EXAMPLE.RDA;1
         Area Allocation:          27 pages
         Extent:         Enabled
         Area Extent Minimum:      99 pages
         Area Extent Maximum:      9999 pages
         Area Extent Percent:      20 percent
         Snapshot File:  USER_DISK:[DOC.DATABASES]DOC_EXAMPLE.SNP;1
         Snapshot Allocation:      100 pages
         Snapshot Extent Minimum:  99 pages
         Snapshot Extent Maximum:  9999 pages
         Snapshot Extent Percent:  20 percent
         Locking is Row Level
         No Cache Associated with Storage Area
No database objects use Storage Area DOC_EXAMPLE

CACHE USING row-cache-name

指定した行キャッシュを指定の記憶域に割り当てます。この領域に格納される行はすべて、表データ、セグメント化された文字列データ、または索引ノードのなどの特殊な行で構成されているかどうかに関係なく、キャッシュ・サイズが適していればキャッシュされます。

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


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

各記憶域に対して割り当てることができる行キャッシュは1つのみです。

記憶域のデフォルトはNO ROW CACHEです。

CHECKSUM CALCULATION

SNAPSHOT CHECKSUM CALCULATION

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

デフォルトはENABLEDです。

注意

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

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

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

注意

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

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

EXTENT ENABLED

EXTENT DISABLED

エクステントを有効にまたは無効にします。エクステントのデフォルトはENABLEDです。

サイズが不適切な記憶域が作成され、エクステントが有効な場合は、混合ページ形式の記憶域にハッシュ索引を作成する際に、パフォーマンス上の問題が生じる場合があります。エクステントを無効にすると、この問題を早期に診断して修正し、パフォーマンスを向上させることができます。

EXTENT IS extent-pages PAGES

EXTENT IS (extension-options)

各記憶域ファイル・エクステントのページ数を指定します。SNAPSHOT EXTENT引数の説明も参照してください。

FILENAME file-spec

記憶域ファイルのファイル仕様を明示的に指定します。CREATE STORAGE AREA句では、ファイル拡張子.rdaの記憶域ファイル、ファイル拡張子.snpのスナップショット・ファイルの2つのファイルを作成します。FILENAME引数を省略すると、ファイル仕様のデフォルトは次のようになります。

ファイル仕様は、記憶域ファイルおよび(SNAPSHOT FILENAME引数を使用してスナップショット・ファイルの別のファイルを指定していなければ)記憶域ファイルを構成するスナップショット・ファイルの両方を使用します。CREATE STORAGE AREA句では、異なる拡張子のファイルを2つ作成できるため、ファイル仕様ではファイル拡張子を指定しないでください。

論理名は、ファイル仕様のすべてまたは一部に使用できます。

複数ファイルのデータベースには、ファイルを複数のディスクに配置できるという利点があります。記憶域ファイルを別のディスクに置く場合は、完全ファイル仕様でFILENAME引数を指定する必要があります。

ただし、記憶域を作成する主な目的が、記憶域ファイルを複数のディスクに分散させない場合でも、複数ファイルのデータベースの作成を選択できます。たとえば、複数ファイルのデータベースでは次のことが可能です。

INTERVAL IS number-data-pages

記憶域ファイルのSPAMページ間でのデータ・ページ数、および各SPAMページで管理されるデータ・ページの最大数を指定します。デフォルトのデータ・ページの最少の間隔は216です。各記憶域の最初のページはSPAMページです。SPAMページを必要とする記憶域ファイルのデータ・ページが十分な場合は、指定した間隔によって後続のSPAMページを挿入する場所が決まります。

PAGE FORMAT IS MIXEDを明示的に指定していない場合、INTERVAL記憶域パラメータは指定できません。

Oracle Rdbでは、ページごとのブロック数に基づいて最大INTERVALサイズが計算され、この値を超える場合はエラー・メッセージが返されます。たとえば、ページ・サイズが2ブロックの場合、最大INTERVALは4008ページになります。INTERVALを4009に設定して記憶域を作成しようとすると、次のエラー・メッセージが返されます。


%RDB-E-BAD_DPB_CONTENT, invalid database parameters in the database parameter
block (DPB)
-RDMS-F-SPIMAX, spam interval of 4009 is more than the Rdb maximum of 4008
-RDMS-F-AREA_NAME, area NEW

領域管理パラメータの設定の詳細は、『Oracle Rdb7 Guide to Database Maintenance』を参照してください。

LOCKING IS ROW LEVEL

LOCKING IS PAGE LEVEL

ロックを記憶域のページレベルで行うか行レベルで行うかを指定します。この句では、レコードに対するロック・リクエストのレベルを指定します。記憶域の作成時にロック・レベルを指定すると、そのレベルがデータベース・デフォルト・ロック・レベルより優先されます。デフォルトはROW LEVELです。

同一の領域、および同一のページの多数のレコードにアクセスする場合、LOCKING IS PAGE LEVEL句により、トランザクション処理のために実行するロック操作数が減少します。ただし、ページのロックがCOMMIT/ROLLBACKまで保持されるため、これによって同時実行性が低下します。ページレベル・ロックは、実行時間が短く、かつ同一ページにある複数のデータベース・レコードにアクセスするトランザクションには非常に有効です。ただし、このような行ロックがない場合のデータの整合性を保証するには、トランザクションをCOMMITまたはROLLBACKで終了するまで、このようなページレベルのロックを保持する必要があります。

実行時間が長く、多数の行がロックされるようなトランザクションに対しては、LOCKING IS ROW LEVEL句を使用します。

LOCKING IS PAGE LEVEL句を使用すると、非同期システム・トラップのブロック数が減少するため、システム・リソースのレスポンス時間が短縮され、利用効率も向上します。ただし、ページ間競合が増加したり、デッドロックの可能性とトランザクション時間が増大するため、ロックが過剰に使用される場合があります。

RDB$SYSTEMまたはDEFAULT記憶域には、暗黙的、明示的を問わずページレベル・ロックは適用されません。これは、ページレベル・ロックのプロトコルでは、メタデータ・ユーザーが停止する場合があるためです。

単一ファイルのデータベースでは、ページレベル・ロックは指定できません。

MAXIMUM OF max-pages PAGES

各エクステントのページの最大数を指定します。デフォルトは9,999ページです。

MINIMUM OF min-pages PAGES

各エクステントのページの最小数を指定します。デフォルトは99ページです。

NO ROW CACHE

行キャッシュがデータベース内の指定した記憶域に割り当てられないことを指定します。CACHE USING句を指定した場合、NO ROW CACHE句は指定できません。

行キャッシュを記憶域に割り当てるか、データベースのデフォルトをオーバーライドする場合は、CACHE USING句を使用して記憶域を変更し、行キャッシュの名前を指定します。各記憶域に対して割り当てることができる行キャッシュは1つのみです。

PAGE FORMAT IS UNIFORM

PAGE FORMAT IS MIXED

記憶域のオンディスク構造を指定します。

統一および混合の記憶域の相対的なメリットとデメリットの詳細は、『Oracle Rdb7 Guide to Database Maintenance』を参照してください。

PAGE SIZE IS page-blocks BLOCKS

記憶域での各データ・ページのブロック・サイズです。ページ・サイズは512バイト・ブロックで割り当てられます。デフォルトは2ブロック(1024バイト)です。最大行が約950バイトを超える場合は、ページごとにブロックを追加で割り当て、行の断片化を防止します。ページ・サイズをバッファ・サイズより大きく指定すると、エラー・メッセージが返されます。

PERCENT GROWTH IS growth

各エクステントの拡張率(%)を指定します。デフォルトの拡張率は20%です。

SNAPSHOT ALLOCATION IS snp-pages PAGES

スナップショット・ファイルに割り当てられるページ数を指定します。