ヘッダーをスキップ

Oracle Database SQLリファレンス
10g リリース2(10.2)

B19201-02
目次
目次
索引
索引

戻る 次へ

8 共通のSQL DDL句

この章では、複数のSQL文で使用されるSQLデータ定義句について説明します。

この章では、次の内容を説明します。


allocate_extent_clause

用途

allocate_extent_clause句を使用すると、データベース・オブジェクトの新しいエクステントを明示的に割り当てることができます。

この句を使用してエクステントを明示的に割り当てた場合、NEXTおよびPCTINCREASE記憶域パラメータの値は変更されません。したがって、Oracleデータベースで暗黙的に割り当てられる次のエクステントのサイズには影響ありません。NEXTおよびPCTINCREASE記憶域パラメータの詳細は、「storage_clause」を参照してください。

エクステントは次のSQL文で割り当てることができます。

構文

allocate_extent_clause::=

画像の説明

size_clause::=を参照)

セマンティクス

この項では、allocate_extent_clauseのパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらのパラメータを設定または再設定するSQL文の説明を参照してください。

同じ文でallocate_extent_clausedeallocate_unused_clauseを指定することはできません。

SIZE

エクステント・サイズをバイト単位で指定します。integerの値は0〜2147483647となります。これより大きいエクステント・サイズを指定するには、この範囲の整数とKMGまたはTを使用して、エクステント・サイズをKB、MB、GBまたはTB単位で指定します。

表、索引、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログでは、SIZEを指定しないと、Oracleデータベースではオブジェクトの記憶域パラメータの値に基づいてサイズが決定されます。ただし、クラスタの場合、クラスタの記憶域パラメータは評価されないため、デフォルト値を使用しない場合はSIZEを指定する必要があります。

DATAFILE 'filename'

新しいエクステントを割り当てるデータ・ファイルを、表、クラスタ、索引、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログの表領域から1つ指定します。DATAFILEを指定しないと、Oracleがデータ・ファイルを選択します。

INSTANCE integer

OracleをReal Application Clustersとあわせて使用する場合のみ、このパラメータを使用します。

INSTANCE integerを指定すると、指定したインスタンスに対応付けられた空きリスト・グループが新しいエクステントを使用できるようになります。インスタンス数が空きリスト・グループの最大数を超えた場合、指定したインスタンス数/最大数という除算が行われ、その余りから、使用する空きリスト・グループが識別されます。インスタンスは初期化パラメータINSTANCE_NUMBERの値で識別されます。

このパラメータを指定しない場合、表、クラスタ、索引、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログに領域が割り当てられますが、特定の空きリスト・グループからは割り当てられません。かわりにマスター空きリストが使用され、必要に応じて領域が割り当てられます。


注意:

自動セグメント領域管理の使用時は、allocate_extent_clauseINSTANCEパラメータを設定しても、指定したインスタンスに新しく割り当てられた領域が確保されない場合があります。これは、自動セグメント領域管理では、エクステントとインスタンス間の固定したアフィニティが保持されないためです。 


参照:

allocate_extent_clauseINSTANCEパラメータの設定の詳細は、『Oracle Database Oracle ClusterwareおよびOracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。 


constraint

用途

constraintを使用すると、整合性制約(データベース内の値を制限する規則)を定義できます。Oracleデータベースでは、6つの制約を作成し、それを2つの方法で宣言することができます。

次に、6つの整合性制約について簡単に説明します。詳細は、「セマンティクス」を参照してください。

制約は、次の2つの構文で定義できます。

NOT NULL制約は、表内に宣言する必要があります。その他のすべての制約は、表内または表外に宣言できます。

制約句は、次の文に指定できます。

ビュー制約

Oracleデータベースでは、ビュー制約を適用していません。ただし、実表に対する制約によってビューに制約を適用できます。

ビューには、一意制約、主キー制約および外部キー制約のみを指定でき、これらの制約はDISABL NOVALIDATEモードのみでサポートされています。オブジェクト列の属性にビュー制約を定義することはできません。

参照:

ビュー制約の詳細は、「ビュー制約」を参照してください。DISABLE NOVALIDATEモードの詳細は、「DISABLE句」を参照してください。 

前提条件

制約を定義する文を発行できる権限が必要です。

外部キー制約を作成する場合は、この条件に加えて、親表またはビューが自分のスキーマ内に設定されている必要があります。設定されていないかぎり、親表またはビューの参照キー列に対するREFERENCES権限が必要です。

構文

constraint::=

画像の説明

inline_constraint::=out_of_line_constraint::=inline_ref_constraint::=out_of_line_ref_constraint::=を参照)

inline_constraint::=

画像の説明

references_clause::=を参照)

out_of_line_constraint::=

画像の説明

references_clause::=constraint_state::=を参照)

inline_ref_constraint::=

画像の説明

references_clause::=constraint_state::=を参照)

out_of_line_ref_constraint::=

画像の説明

references_clause::=constraint_state::=を参照)

references_clause::=

画像の説明

constraint_state::=

画像の説明

using_index_clause::=exceptions_clause::=を参照)

using_index_clause::=

画像の説明

create_index::=index_properties::=を参照)

index_properties::=

画像の説明

(「CREATE INDEX」の項にあるglobal_partitioned_index::=local_partitioned_index::=index_attributes::=を参照。domain_index_clauseは、using_index_clauseでサポートされていません。)

index_attributes::=

画像の説明

physical_attributes_clause::=logging_clause::=、「CREATE INDEX」の項にあるkey_compression=を参照。parallel_clauseは、using_index_clauseでサポートされていません。)

exceptions_clause::=

画像の説明

セマンティクス

この項では、constraintのセマンティクスについて説明します。詳細は、表またはビューの制約を定義または再定義するSQL文の説明を参照してください。

Oracleデータベースでは、ユーザー定義オブジェクト、ネストした表、VARRAYREFまたはLOB型の列または属性に対して制約を使用することはできません。ただし、次の2つの例外があります。

CONSTRAINT constraint_name

制約名を指定します。この識別子を指定しない場合、SYS_Cnの形式で名前が生成されます。整合性制約の名前と定義は、USER_ALL_およびDBA_CONSTRAINTSデータ・ディクショナリ・ビュー(それぞれCONSTRAINT_NAME列およびSEARCH_CONDITION列)に格納されます。

参照:

データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。 

NOT NULL制約

NOT NULL制約は、列にNULLが含まれることを禁止します。NULLキーワード自体は、実際に整合性制約を定義するものではありませんが、これを指定すると、列にNULLが含まれることが許可されます。NOT NULLおよびNULLは、表内指定で定義する必要があります。NOT NULLまたはNULLを指定しない場合、NULLがデフォルトになります。

NOT NULL制約は、XMLType列およびVARRAY列で表内指定できる唯一の制約です。

NOT NULL制約を満たすには、表のすべての行がその列の値を持つ必要があります。


注意:

Oracleデータベースでは、すべてのキー列がNULLの表の行には索引を付けません(ただし、ビットマップ索引の場合を除きます)。このため、表のすべての行に索引を付けるには、1つ以上の索引キー列にNOT NULL制約を指定するか、ビットマップ索引を作成する必要があります。 


NOT NULL制約の制限事項:

NOT NULL制約には次の制限事項があります。

一意制約

一意制約は、列を一意キーとして指定します。複合一意キーは、列の組合せを一意キーとして指定します。一意制約を表内に定義する場合に必要となるのは、UNIQUEキーワードのみです。一意制約を表外に定義する場合は、1つ以上の列も指定する必要があります。複合一意キーは、表外に定義する必要があります。

一意制約を満たすには、表の中の2つの行が一意キーに対して同じ値を持たないようにする必要があります。ただし、単一の列で構成される一意キーの場合は、複数のNULLを持つことができます。複合一意キーを満たすには、表またはビューの2つの行がキー列に対して同じ組合せの値を持たないようにする必要があります。すべてのキー列に対してNULLを持つ行は、自動的にその制約を満たすことになります。ただし、1つ以上のキー列に対してNULLを持ち、その他のキー列に対して同じ組合せの値を持つ2つの行は、制約に違反します。

Oracleでは、1つ以上の列に一意制約を指定すると、暗黙的に一意キーに索引が作成されます。問合せのパフォーマンスを目的に一意性を定義する場合は、かわりにCREATE UNIQUE INDEX文を使用して明示的に一意索引を作成することをお薦めします。また、CREATE UNIQUE INDEX文で、条件付きの一意制約を定義する一意のファンクション索引を作成することもできます。詳細は、「ファンクション索引の使用による条件付き一意性の定義例:」を参照してください。

一意制約の制限事項:

一意制約には、次の制限事項があります。

主キー制約

主キー制約は、列を表またはビューの主キーとして指定します。複合主キーは、列の組合せを主キーとして指定します。主キー制約を表内に定義する場合に必要となるのは、PRIMARY KEYキーワードのみです。主キー制約を表外に定義する場合は、1つ以上の列も指定する必要があります。複合主キーは表外に定義する必要があります。

主キー制約は、1つの宣言でNOT NULL制約と一意制約を組み合せたものです。このため、主キー制約を満たすには次の条件があります。

主キー制約の制限事項:

主キー制約には、次の制限事項があります。

外部キー制約

外部キー制約参照整合性制約ともいう)は、列を外部キーとして指定し、その外部キーと指定した主キーまたは一意キー(参照キー)との関係を設定します。複合外部キーは、列の組合せを外部キーとして指定します。

外部キーを持つ表またはビューをオブジェクトといい、参照キーを持つ表またはビューをオブジェクトといいます。外部キーと参照キーを、同一の表またはビューに設定することができます。この場合、親表と子表は同一の表になります。親表または親ビューのみを指定して、列名を指定しない場合、外部キーは自動的に親表または親ビューの主キーを参照します。外部キーと参照キーの対応する列は、同じ順序とデータ型で構成されている必要があります。

単一キー列の外部キー制約は、表内または表外に定義できます。複合外部キーと属性の外部キーは、表外に指定します。

複合外部キー制約を満たすには、複合外部キーが親表または親ビューの複合一意キーまたは複合主キーを参照するか、外部キーの1つ以上の列の値がNULLである必要があります。

外部キーと主キーの両方、または外部キーと一意キーの両方に、同一の列または列の組合せを指定できます。また、外部キーとクラスタ・キーの両方にも同じ列または列の組合せを指定できます。

1つの表またはビューで複数の外部キーを定義できます。また、1つの列が複数の外部キーを構成することもできます。

外部キー制約の制限事項:

外部キー制約には、次の制限事項があります。

references_clause

外部キー制約はreferences_clause構文を使用します。外部キー制約を表内に指定する場合に必要となるのは、references_clauseのみです。外部キー制約を表外に指定する場合は、FOREIGN KEYキーワードと1つ以上の列も指定する必要があります。

ON DELETE句

ON DELETE句を指定すると、参照主キーまたは参照一意キーの値を削除した場合に参照整合性がどのように自動処理されるかを指定できます。この句を指定しない場合、子表に依存する行を持つ親表の中の参照キーの値は削除できません。

ON DELETEの制限事項:

この句は、ビュー制約に対して指定できません。

参照:

「ON DELETEの例」 

CHECK制約

CHECK制約によって、表の各行に必要な条件を指定できます。制約を満たすためには、表のそれぞれの行が、その条件に対してTRUEまたは不明(NULLのため)のいずれかである必要があります。特定の行に対するCHECK制約条件が評価される場合、条件にある列名に、その行の列値が適用されます。

CHECK制約の表内指定と表外指定の構文は同じです。ただし、表内指定では現在定義されている列(または、オブジェクト列の場合は列の属性)のみを参照でき、表外指定では複数の列または属性を参照できます。

Oracleでは、CHECK制約の条件が相互に排他的かどうかは検証しません。このため、1つの列に対して複数のCHECK制約を作成する場合は、制約の用途が矛盾しないように注意する必要があります。また、条件の評価について特別な順序を想定しないでください。

参照:

 

CHECK制約の制限事項:

CHECK制約には、次の制限事項があります。

REF制約

REF制約を使用すると、REF型の列とそれが参照するオブジェクトとの関係を指定できます。

ref_constraint

REF制約は、ref_constraint構文を使用します。REF制約は表内または表外に定義します。表外指定の場合は、指定しているREF列または属性を指定する必要があります。

表内指定と表外指定のどちらでも、有効範囲制約、ROWID制約または参照整合性制約をREF列に定義できます。

REF列の有効範囲表または参照表が、主キーに基づくオブジェクト識別子を持っている場合、そのREF列はユーザー定義REFです。

参照:

 

REF列の有効範囲制約

表がREF列を持つ場合は、この列のそれぞれのREF値が別のオブジェクト表内の行を参照する場合があります。SCOPE句は、参照の有効範囲を1つの表scope_tableに制限します。REF列または属性の値はscope_table内のオブジェクトを指し、その場所にREF列と同じ型のオブジェクト・インスタンスが格納されます。

REF列内の参照の有効範囲を1つの表に制限する場合に、SCOPE句を指定します。この句を指定するには、scope_tableが自分のスキーマ内にあるか、またはscope_tableに対するSELECT権限またはSELECT ANY TABLEシステム権限が必要です。REF列ごとに有効範囲表を1つのみ指定できます。

有効範囲制約の制限事項:

有効範囲制約には、次の制限事項があります。

REF列のROWID制約

WITH ROWIDを指定して、ref_columnまたはref_attributeREFの値とともにROWIDを格納します。ROWIDとともにREF値を格納した場合、参照解除操作のパフォーマンスは向上しますが、使用する領域も多くなります。デフォルトのREF値の記憶域では、ROWIDは格納されません。

参照:

参照解除の例は、「DEREF」を参照してください。 

ROWID制約の制限事項:

ROWID制約には、次の制限事項があります。

REF列の参照整合性制約

ref_constraint構文のreferences_clauseを使用すると、外部キー制約をREF列に定義できます。また、この句はREF列や属性の有効範囲を参照表に暗黙的に制限します。ただし、REF列以外の外部キー制約が親表の実際の列を参照することに対し、REF列の外部キー制約は親表の暗黙のオブジェクト識別子を参照します。

制約名を指定しない場合、制約に対するシステム名がSYS_Cnという形式で生成されます。

範囲が限定されている既存のREF列に参照整合性制約を追加する場合、参照表は、REF列の有効範囲表と同じである必要があります。後で参照整合性制約を削除する場合、REF列の範囲が参照表に限定されたままになります。

他の型の列に対する外部キー制約と同様に、表内で宣言する場合に必要となるのはreferences_clauseのみです。表外で宣言する場合は、FOREIGN KEYキーワード、および1つ以上のREF列または属性も指定する必要があります。

参照:

オブジェクト識別子の詳細は、『Oracle Databaseアプリケーション開発者ガイド-オブジェクト・リレーショナル機能』を参照してください。 

REF列の参照整合性制約の制限事項:

REF列における外部キー制約には、次の追加の制限事項があります。

制約状態の指定

制約定義の一部として、制約が適用される方法およびタイミングを指定できます。

constraint_state

constraint_stateは、表内指定と表外指定の両方に使用できます。constraint_stateの句はどのような順序でも指定できますが、各句を指定できるのは1回のみです。

DEFERRABLE句

DEFERRABLEおよびNOT DEFERRABLEパラメータは、後続のトランザクションで、SET CONSTRAINT(S)文を使用して、トランザクションが終わるまで制約のチェックを遅延できるかどうかを指定します。この句を指定しない場合、NOT DEFERRABLEがデフォルトになります。

制約の遅延可能状態は変更できません。つまり、これらのパラメータのいずれかを指定したか、どちらも指定せずにNOT DEFERRABLE制約を暗黙的に有効にしたかによって、この句をALTER TABLE文に指定することができなくなります。制約を削除してから再作成する必要があります。

参照:

  • トランザクションに対する制約のチェックの設定の詳細は、「SET CONSTRAINT[S]」を参照してください。

  • 遅延制約の詳細は、『Oracle Database管理者ガイド』および『Oracle Database概要』を参照してください。

  • 「DEFERRABLE制約の例」

 

[NOT] DEFERRABLEの制限事項:

ビュー制約にはこれらのパラメータを指定できません。

INITIALLY句

INITIALLY句は、DEFERRABLE句が指定されている制約に対するデフォルトのチェック動作を指定します。INITIALLY設定は、後続のトランザクションにSET CONSTRAINT(S)文を指定することで上書きできます。

制約をNOT DEFERRABLEとして宣言した場合、この句は無効です。NOT DEFERRABLE制約は自動的にINITIALLY IMMEDIATEになり、INITIALLY DEFERREDに変更することはできないためです。

VALIDATE | NOVALIDATE

VALIDATEおよびNOVALIDATEの動作は、制約が明示的にまたはデフォルトで使用可能/使用禁止のどちらになっているかで異なります。詳細は、「ENABLE句」および「DISABLE句」を参照してください。

ENABLE句

表のデータに制約を適用するには、ENABLEを指定します。

一意制約または主キー制約を使用可能にした場合、キーに索引が存在しないと、一意索引が作成されます。KEEP INDEXを指定しないかぎり、その後で制約が使用禁止になった場合にこの索引は削除されます。そのため、制約が使用可能になるたびに索引が再作成されます。

索引の再作成を避け、余分な索引を削除するには、最初に使用禁止にした主キー制約および一意制約を新しく作成します。その後、一意でない索引を作成して(または、既存の一意でない索引を使用して)制約を適用してください。制約が使用禁止の場合、一意でない索引は削除されず、後続のENABLE操作が容易になります。

VALIDATENOVALIDATEも指定しない場合、VALIDATEがデフォルトになります。

ENABLE NOVALIDATEからENABLE VALIDATEに単一制約状態を変更すると、パラレルで操作が実行できるため、読込み、書込みまたはその他のDDL操作が中断されません。

ENABLE句の制限事項:

使用禁止になっている一意キーまたは主キーを参照する外部キーを使用可能にすることはできません。

DISABLE句

整合性制約を使用禁止にする場合は、DISABLEを指定します。データ・ディクショナリでは、使用禁止になっている整合性制約は、使用可能な制約とともに表示されます。この句を指定せずに制約を作成した場合は、その制約は自動的に使用可能になります。

VALIDATENOVALIDATEも指定しない場合、NOVALIDATEがデフォルトになります。

一意索引を使用している一意制約または主キー制約を使用禁止にすると、一意索引は削除されます。その他の注意事項や制限事項は、「CREATE TABLE」の「enable_disable_clause」を参照してください。

RELY句

RELYおよびNORELYは、既存の制約を変更する場合のみ(つまり、ALTER TABLE ... MODIFY制約構文内でのみ)有効です。これらのパラメータは、クエリー・リライトでNOVALIDATEモードの制約を考慮するかどうかを指定します。RELYを指定すると、適用されていないクエリー・リライトに対するNOVALIDATEモードの既存の制約は、アクティブになります。その制約はNOVALIDATEモードであるため、適用されません。デフォルト値はNORELYです。

適用されない制約は、通常、マテリアライズド・ビューおよびクエリー・リライトにのみ有効です。QUERY_REWRITE_INTEGRITYモードに従って、クエリー・リライトは、VALIDATEモードの制約、またはRELYパラメータが設定されたNOVALIDATEモードの制約を使用して、結合情報を確認します。

RELY句の制限事項:

RELYには、遅延不可のNOT NULL制約を設定できません。

参照:

マテリアライズド・ビューおよびクエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 

索引による制約の適用

一意制約または主キー制約の状態を定義する場合は、制約の適用に使用する索引を指定すること、または制約の適用に使用する索引をOracleで自動作成することが可能です。

using_index_clause

using_index_clauseは、一意制約または主キー制約を使用可能にしている場合にのみ指定できます。using_index_clauseの句はどのような順序でも指定できますが、各句を指定できるのは1回のみです。

using_index_clauseの制限事項:

using_index_clauseには、次の制限事項があります。

制約の例外の処理

制約の状態を定義する場合は、制約に違反するすべての行のROWIDを格納する表を指定できます。

exceptions_clause

exceptions_clause構文を使用すると、例外の処理を定義できます。schemaを指定しない場合、自分のスキーマ内に例外表があるとみなされます。この句自体を指定しない場合、表の名前はEXCEPTIONSになります。EXCEPTIONS表または指定した表は、ローカル・データベースに存在する必要があります。

次のいずれかのスクリプトを使用して、EXCEPTIONS表を作成できます。

独自の例外表を作成する場合、これら2つのスクリプトのいずれかで規定される形式に従う必要があります。

ユニバーサルROWIDではなく、主キーに基づく索引構成表から例外を収集する場合、索引構成表ごとに別の例外表を作成し、主キー記憶域を確保する必要があります。スクリプトを変更および再発行することによって、別の名前の例外表を複数作成できます。

exceptions_clauseの制限事項:

exceptions_clauseには、次の制限事項があります。

ビュー制約

Oracleでは、ビュー制約を適用していません。ただし、ビューに対する操作には、基となる実表に定義されている整合性制約が適用されます。つまり、実表に対する制約によって、ビューに制約を適用できます。

ビュー制約の注意事項:

ビュー制約は表制約のサブセットで、次の制限事項があります。

一意キーの例

次の文は、サンプル表sh.promotionsを作成する文の例です。この文は制約を表内に定義し、promo_id列で一意キーを暗黙的に使用可能にします(この例では、他の制約は省略されています)。

CREATE TABLE promotions_var1
    ( promo_id         NUMBER(6)
                       CONSTRAINT promo_id_u  UNIQUE
    , promo_name       VARCHAR2(20)
    , promo_category   VARCHAR2(15)
    , promo_cost       NUMBER(10,2)
    , promo_begin_date DATE
    , promo_end_date   DATE
    ) ;

制約promo_id_uは、一意キーとしてpromo_id列を識別します。この制約によって、表に同じIDを持つ複数の販売促進の行が存在しないことが保証されます。ただし、識別子のない行は許可されます。

この制約を表外に定義して使用可能にすることもできます。

CREATE TABLE promotions_var2
    ( promo_id         NUMBER(6)
    , promo_name       VARCHAR2(20)
    , promo_category   VARCHAR2(15)
    , promo_cost       NUMBER(10,2)
    , promo_begin_date DATE
    , promo_end_date   DATE
    , CONSTRAINT promo_id_u UNIQUE (promo_id)
   USING INDEX PCTFREE 20
      TABLESPACE stocks
      STORAGE (INITIAL 8K  NEXT 6K) ); 

この文にはusing_index_clauseも含まれています。この句は、制約を使用可能にするために作成される索引の記憶特性を指定します。

複合一意キーの例

次の文は、oe.warehouses表のwarehouse_id列とwarehouse_name列を組み合せて複合一意キーを定義し、使用可能にします。

ALTER TABLE warehouses
   ADD CONSTRAINT wh_unq UNIQUE (warehouse_id, warehouse_name)
   USING INDEX PCTFREE 5
   EXCEPTIONS INTO wrong_id;

wh_unq制約によって、warehouse_idwarehouse_nameを組み合せた値が表の中に複数存在しないことが保証されます。

このADD CONSTRAINT句には、制約以外のプロパティも指定できます。

主キーの例

次の文は、サンプル表hr.locationsを作成する文の例です。locations_demo表を作成し、location_id列に主キーを定義して使用可能にします(この例では、hr.locations表の他の制約は省略されています)。

CREATE TABLE locations_demo
    ( location_id    NUMBER(4) CONSTRAINT loc_id_pk PRIMARY KEY
    , street_address VARCHAR2(40)
    , postal_code    VARCHAR2(12)
    , city           VARCHAR2(30)
    , state_province VARCHAR2(25)
    , country_id     CHAR(2)
    ) ;

表内に指定されているloc_id_pk制約は、location_id列をlocations_demo表の主キーとして識別します。この制約によって、表の中の複数の所在地が同一の所在地識別子を持つことはなく、かつ所在地識別子がNULLにならないことが保証されます。

この制約を表外に定義して使用可能にすることもできます。

CREATE TABLE locations_demo
    ( location_id    NUMBER(4) 
    , street_address VARCHAR2(40)
    , postal_code    VARCHAR2(12)
    , city           VARCHAR2(30)
    , state_province VARCHAR2(25)
    , country_id     CHAR(2)
    , CONSTRAINT loc_id_pk PRIMARY KEY (location_id));
NOT NULLの例

次の文は、(「主キーの例」で作成した)locations_demo表を変更し、country_id列にNOT NULL制約を定義して使用可能にします。

ALTER TABLE locations_demo
   MODIFY (country_id CONSTRAINT country_nn NOT NULL); 

制約country_nnによって、country_idがNULLの所在地の行が表にないことが保証されます。

複合主キーの例

次の文は、sh.salesサンプル表のprod_id列およびcust_id列を組み合せて複合主キーを定義します。

ALTER TABLE sales 
    ADD CONSTRAINT sales_pk PRIMARY KEY (prod_id, cust_id) DISABLE; 

この制約は、sales表の主キーとしてprod_id列とcust_id列の組合せを識別します。この制約によって、表の中の複数の行がprod_id列とcust_id列に同じの組合せの値を持たないことが保証されます。

この制約句(PRIMARY KEY)では、次の制約のプロパティも指定しています。

外部キー制約の例

次の文は、dept_20表を作成し、departments表のdepartment_id列の主キーを参照するdepartment_id列に、外部キーを定義して使用可能にします。

CREATE TABLE dept_20 
   (employee_id     NUMBER(4), 
    last_name       VARCHAR2(10), 
    job_id          VARCHAR2(9), 
    manager_id      NUMBER(4), 
    hire_date       DATE, 
    salary          NUMBER(7,2), 
    commission_pct  NUMBER(7,2), 
    department_id   CONSTRAINT fk_deptno 
                    REFERENCES departments(department_id) ); 

fk_deptno制約によって、dept_20表の従業員が属しているすべての部門がdepartments表に含まれることが保証されます。ただし、部門番号がNULL値の従業員(どの部門にも属さない従業員)がいてもかまいません。すべての従業員がいずれかの部門に割り当てられるようにするには、dept_20表のdepartment_id列に対して、REFERENCES制約の他にNOT NULL制約を作成します。

この制約を定義して使用可能にする前に、departments表のdepartment_id列を主キーまたは一意キーとして指定する制約を定義して使用可能にする必要があります。

制約が表内に定義されているため、この外部キー制約定義はFOREIGN KEY句を使用しません。また、この列には参照キーのデータ型が自動的に割り当てられるため、department_id列のデータ型は必要ありません。

制約定義によって親表と参照キーの列の両方が指定されます。参照キーは親表の主キーであるため、参照キーの列名の指定は任意です。

この外部キー制約を表外に定義することもできます。

CREATE TABLE dept_20 
   (employee_id     NUMBER(4), 
    last_name       VARCHAR2(10), 
    job_id          VARCHAR2(9), 
    manager_id      NUMBER(4), 
    hire_date       DATE, 
    salary          NUMBER(7,2), 
    commission_pct  NUMBER(7,2), 
    department_id, 
   CONSTRAINT fk_deptno 
      FOREIGN  KEY (department_id) 
      REFERENCES  departments(department_id) ); 

これらの外部キー定義は、両方ともON DELETE句を指定していないため、従業員がいる部門は削除できません。

ON DELETEの例

次の文では、dept_20表を作成し、2つの参照整合性制約を定義して使用可能にした後、ON DELETE句を使用します。

CREATE TABLE dept_20 
   (employee_id     NUMBER(4) PRIMARY KEY, 
    last_name       VARCHAR2(10), 
    job_id          VARCHAR2(9), 
    manager_id      NUMBER(4) CONSTRAINT fk_mgr
                    REFERENCES employees ON DELETE SET NULL, 
    hire_date       DATE, 
    salary          NUMBER(7,2), 
    commission_pct  NUMBER(7,2), 
    department_id   NUMBER(2)   CONSTRAINT fk_deptno 
                    REFERENCES departments(department_id) 
                    ON DELETE CASCADE ); 

最初のON DELETE句によって、従業員番号2332の上司がemployees表から削除された場合、その上司の部下だったdept_20表のすべての従業員のmanager_id値がNULLになります。

次のON DELETE句によって、departments表のdepartment_id値が削除されると、これに依存するdept_20表の行のdepartment_id値も同時に削除されます。たとえば、部門番号20がdepartments表から削除されると、部門番号20の全従業員がdept_20表から削除されます。

複合外部キー制約の例

次の文は、dept_20表のemployee_id列およびhire_date列を組み合せて外部キーを定義して使用可能にします。

ALTER TABLE dept_20
   ADD CONSTRAINT fk_empid_hiredate
   FOREIGN KEY (employee_id, hire_date)
   REFERENCES hr.job_history(employee_id, start_date)
   EXCEPTIONS INTO wrong_emp;

fk_empid_hiredate制約によって、dept_20表の中すべての従業員が、employees表に存在するemployee_idhire_dateの組合せを持つことが保証されます。この制約を定義して使用可能にする前に、employees表のemployee_id列とhire_date列の組合せを主キーまたは一意キーとして指定する制約を定義して使用可能にする必要があります。

EXCEPTIONS INTO句によって、制約に違反する行がdept_20表に含まれている場合、その行に関する情報がwrong_emp表に書き込まれます。wrong_emp例外表が存在しない場合、この文は正常に実行されません。

CHECK制約の例

次の文は、divisions表を作成し、その表の各列にcheck制約を定義します。

CREATE TABLE divisions  
   (div_no    NUMBER  CONSTRAINT check_divno
              CHECK (div_no BETWEEN 10 AND 99) 
              DISABLE, 
    div_name  VARCHAR2(9)  CONSTRAINT check_divname
              CHECK (div_name = UPPER(div_name)) 
              DISABLE, 
    office    VARCHAR2(10)  CONSTRAINT check_office
              CHECK (office IN ('DALLAS','BOSTON',
              'PARIS','TOKYO')) 
              DISABLE); 

列に定義されている各制約によって、列の値が次のように制限されます。

それぞれのCONSTRAINT句にDISABLE句が指定されているため、これらの制約は定義されるのみで、使用可能にはされません。

次の文は、dept_20表を作成し、CHECK制約を表外に定義して暗黙的に使用可能にします。

CREATE TABLE dept_20
   (employee_id     NUMBER(4) PRIMARY KEY, 
    last_name       VARCHAR2(10), 
    job_id          VARCHAR2(9), 
    manager_id      NUMBER(4), 
    salary          NUMBER(7,2), 
    commission_pct  NUMBER(7,2), 
    department_id   NUMBER(2),
    CONSTRAINT check_sal CHECK (salary * commission_pct <= 5000));

この制約は、不等式の条件を使用して、従業員の歩合総額(salarycommission_pctを掛けた金額)を5,000ドルに制限します。

この例の制約句には制約名が指定されていないため、制約の名前が自動的に生成されます。

次の文は、1つの主キー制約、2つの外部キー制約、1つのNOT NULL制約および2つのCHECK制約を定義して使用可能にします。

CREATE TABLE order_detail 
  (CONSTRAINT pk_od PRIMARY KEY (order_id, part_no), 
   order_id    NUMBER 
      CONSTRAINT fk_oid 
         REFERENCES oe.orders(order_id), 
   part_no     NUMBER 
      CONSTRAINT fk_pno 
         REFERENCES oe.product_information(product_id), 
   quantity    NUMBER 
      CONSTRAINT nn_qty NOT NULL 
      CONSTRAINT check_qty CHECK (quantity > 0), 
   cost        NUMBER 
      CONSTRAINT check_cost CHECK (cost > 0) ); 

この制約によって、表のデータに対して次の規則を適用できます。

この例は、制約句と列定義について、次の点についても示しています。

属性レベル制約の例

次の文は、students表のname列のfirst_name属性とlast_name属性の両方に対して値が存在することを保証します。

CREATE TYPE person_name AS OBJECT
   (first_name VARCHAR2(30), last_name VARCHAR2(30));
/

CREATE TABLE students (name person_name, age INTEGER,
   CHECK (name.first_name IS NOT NULL AND 
          name.last_name IS NOT NULL));
REF制約の例

次の例は、サンプル・スキーマのオブジェクト型であるcust_address_typの複製を作成し、SCOPE制約が指定されたREF列を含む表を作成します。

CREATE TYPE cust_address_typ_new AS OBJECT
    ( street_address     VARCHAR2(40)
    , postal_code        VARCHAR2(10)
    , city               VARCHAR2(30)
    , state_province     VARCHAR2(10)
    , country_id         CHAR(2)
    );
/
CREATE TABLE address_table OF cust_address_typ_new;

CREATE TABLE customer_addresses (
   add_id NUMBER, 
   address REF cust_address_typ_new
   SCOPE IS address_table);

次の例は、同じ表を作成しますが、親表のオブジェクト識別子列を参照するREF列に参照整合性制約が指定されています。

CREATE TABLE customer_addresses (
   add_id NUMBER,
   address REF cust_address_typ REFERENCES address_table);

次の例では、department_typ型およびdepartments_obj_t表(「オブジェクト表の作成例:」で作成)を使用します。この文を実行すると、有効範囲付きREFを持つ表が作成されます。

CREATE TABLE employees_obj
   ( e_name   VARCHAR2(100),
     e_number NUMBER,
     e_dept   REF department_typ SCOPE IS departments_obj_t );

次の文は、参照整合性制約が定義されているREF列を含む表を作成します。

CREATE TABLE employees_obj
   ( e_name   VARCHAR2(100),
     e_number NUMBER,
     e_dept   REF department_typ REFERENCES departments_obj_t);
明示的な索引の制御例

次の文は、Oracleが制約を適用する場合に使用する索引を、明示的に制御する一意制約または主キー制約を作成する別の方法を示します。

CREATE TABLE promotions_var3
    ( promo_id         NUMBER(6)
    , promo_name       VARCHAR2(20)
    , promo_category   VARCHAR2(15)
    , promo_cost       NUMBER(10,2)
    , promo_begin_date DATE
    , promo_end_date   DATE
    , CONSTRAINT promo_id_u UNIQUE (promo_id, promo_cost)
         USING INDEX (CREATE UNIQUE INDEX promo_ix1
            ON promotions_var3 (promo_id, promo_cost))
    , CONSTRAINT promo_id_u2 UNIQUE (promo_cost, promo_id) 
         USING INDEX promo_ix1);

この例は、1つの制約に対して1つの索引を作成し、その索引を使用して同じ文に別の制約を作成して使用可能にできることも示しています。

DEFERRABLE制約の例

次の文は、scores列にCHECK制約NOT DEFERRABLE INITIALLY IMMEDIATE(デフォルト)を使用したgames表を作成します。

CREATE TABLE games (scores NUMBER CHECK (scores >= 0));

次の文は、列に対する一意制約をINITIALLY DEFERRED DEFERRABLEとして定義します。

CREATE TABLE games
  (scores NUMBER, CONSTRAINT unq_num UNIQUE (scores)
   INITIALLY DEFERRED DEFERRABLE);

deallocate_unused_clause

用途

deallocate_unused_clauseを使用すると、データベース・オブジェクト・セグメントの終わりにある未使用領域の割当てを明示的に解除し、解放された領域を表領域の他のセグメントで使用できるようになります。

未使用領域の割当ては、次の文で解除できます。

構文

deallocate_unused_clause::=

画像の説明

size_clause::=を参照)

セマンティクス

この項では、deallocate_unused_clauseのセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトに対してこの句を設定または再設定するSQL文の説明を参照してください。

同じ文でdeallocate_unused_clauseallocate_extent_clauseの両方を指定することはできません。

最高水位標を超える(データベース・ブロックがデータを受け取るためにフォーマットされていない)未使用領域のみ解放できます。未使用領域の割当て解除は、オブジェクトの終わりから開始し、オブジェクトの先頭にある最高水位標に向かって進行します。

エクステントが割当て解除の範囲内に完全に含まれる場合、エクステント全体が解放されて再利用可能となります。エクステントの一部が含まれる場合、最高水位標までのすでに使用されている部分がエクステントになり、残りの未使用領域が解放されて再利用可能になります。

割当てが解除される表領域のユーザー割当て制限は、解放される領域の量のみ増加します。

解放される領域の実際の量は、INITIALMINEXTENTSおよびNEXT記憶域パラメータによって異なります。これらのパラメータの詳細は、「storage_clause」を参照してください。

KEEP integer

割当て解除後に、データベース・オブジェクトのセグメントが保持する、最高水位標を超えるバイト数を指定します。


file_specification

用途

file_specification構文のいずれかを使用すると、ファイルをデータ・ファイルまたは一時ファイルとして指定できます。また、1つ以上のファイルのグループを1つのREDOログ・ファイル・グループとして指定することもできます。自動ストレージ管理ディスク・グループにファイルを格納する場合、そのファイルをディスク・グループ・ファイルとしても指定できます。

file_specificationは次の文に指定できます。

前提条件

ファイルを指定する文を発行する権限が必要です。

構文

file_specification::=

画像の説明

datafile_tempfile_spec::=

画像の説明

size_clause::=を参照)

redo_log_file_spec::=

画像の説明

size_clause::=を参照)

ASM_filename::=

画像の説明

fully_qualified_file_name::=

画像の説明

numeric_file_name::=

画像の説明

incomplete_file_name::=

画像の説明

alias_file_name::=

画像の説明

autoextend_clause::=

画像の説明

size_clause::=を参照)

maxsize_clause::=

画像の説明

size_clause::=を参照)

セマンティクス

この項では、file_specificationのセマンティクスについて説明します。詳細は、データ・ファイル、一時ファイル、REDOログ・ファイルまたは自動ストレージ管理ディスク・グループやディスク・グループ・ファイルを指定するSQL文の説明を参照してください。

datafile_tempfile_spec

データベース記憶域がファイル・システム内、RAWデバイス上または自動ストレージ管理ディスク・グループ内に存在する場合、この句を使用してデータ・ファイルと一時ファイルの属性を指定します。

redo_log_file_spec

データベース記憶域がファイル・システム内、RAWデバイス上または自動ストレージ管理ディスク・グループ内に存在する場合、この句を使用してREDOログ・ファイルの属性を指定します。

filename

filenameは、ファイル・システム内またはRAWデバイス上に格納されたファイルに使用します。filenameは、新しいファイルまたは既存のファイルを指定できます。新しいファイルを指定する場合、次のことに注意します。

既存のファイルを指定する場合は、データ・ファイル、一時ファイルまたはREDOログ・ファイル・メンバーの名前を指定します。filenameには、7ビットASCIIキャラクタ・セットまたはEBCDICキャラクタ・セットのシングルバイト文字のみを使用できます。マルチバイト文字は無効です。

REDOログ・ファイル・グループは、1つ以上のメンバー(コピー)で構成されます。filenameは、使用するオペレーティング・システムの表記規則に従って、完全な名前で指定する必要があります。

データベースがfilenameを解析する方法は、SIZE句およびREUSE句の指定によっても異なります。

ASM_filename

自動ストレージ管理ディスク・グループに格納されたファイルには、ASM_filenameの形式を使用します。この構文でデータ・ファイル、一時ファイルおよびREDOログ・ファイルを作成または参照できます。

すべてのASM_filename形式は、プラス記号(+)で始まりディスク・グループ名が続きます。すべての自動ストレージ管理ディスク・グループの名前を確認するには、V$ASM_DISKGROUPビューを問い合せます。

参照:

自動ストレージ管理の使用については、『Oracle Database管理者ガイド』を参照してください。 

fully_qualified_file_name

自動ストレージ管理ディスク・グループにファイルを作成する場合、そのファイルにはシステム生成の完全修飾された自動ストレージ管理ファイル名が付けられます。既存の自動ストレージ管理ファイルを参照する場合にのみ、この形式を使用できます。そのため、ファイル作成時にこの形式を使用する場合は、REUSEも指定する必要があります。

完全修飾された自動ストレージ管理ファイル名を確認するには、そのファイル・タイプに適切な動的パフォーマンス・ビュー(データ・ファイルではV$DATAFILE、制御ファイルではV$CONTROLFILEなど)を問い合せます。また、V$ASM_FILEビューを問い合せることによって、完全修飾された名前のfilenumberincarnation_numberの部分を取得できます。

表8-1    Oracleファイル・タイプと自動ストレージ管理ファイル・タイプ・タグ 
自動ストレージ管理
file_type
 
説明  自動ストレージ管理
file_type_tag
 
コメント 

CONTROLFILE 

制御ファイルとバックアップ制御ファイル 

Current

Backup 

DATAFILE 

データ・ファイルとデータ・ファイル・コピー 

tsname 

ファイルが追加される表領域です。 

ONLINELOG 

オンライン・ログ 

group_group# 

ARCHIVELOG 

アーカイブ・ログ 

thread_thread#_seq_sequence# 

TEMPFILE 

一時ファイル 

tsname 

ファイルが追加される表領域です。 

BACKUPSET 

データ・ファイルとアーカイブ・ログのバックアップ・ピース(データ・ファイルの増分バックアップ・ピース) 

hasspfile_timestamp 

hasspfileの値は、s(バックアップ・セットがspfileを含む)またはn(バックアップ・セットがspfileを含まない)のいずれかになります。 

PARAMETERFILE 

永続パラメータ・ファイル 

spfile 

DAATAGUARDCONFIG 

Data Guard構成ファイル 

db_unique_name 

サービス・プロバイダ名が設定されている場合、Data Guardはその名前を使用しようとします。設定されていない場合、タグのデフォルトはDRCnameです。 

FLASHBACK 

フラッシュバック・ログ 

log_log# 

CHANGETRACKING 

ブロック・チェンジ・トラッキング・データ 

ctf 

増分バックアップ中に使用されます。 

DUMPSET 

Data Pumpダンプ・セット 

user_obj#_file# 

ダンプ・セット・ファイルは、ユーザー名、ダンプ・セットが作成されたジョブ番号およびファイル番号をタグの一部としてエンコードします。 

XTRANSPORT 

データ・ファイル変換 

tsname 

AUTOBACKUP 

自動バックアップ・ファイル 

hasspfile_timestamp 

hasspfileの値は、s(バックアップ・セットがspfileを含む)またはn(バックアップ・セットがspfileを含まない)のいずれかになります。 

numeric_file_name

数値の自動ストレージ管理ファイル名は、一意のfilenumber.incarnation_number文字列のみが使用されることを除き、完全修飾されたファイル名に類似しています。既存のファイルを参照するためにのみ、この形式を使用できます。そのため、ファイル作成時にこの形式を使用する場合は、REUSEも指定する必要があります。

incomplete_file_name

不完全な自動ストレージ管理ファイル名は、ファイルの作成時にのみ使用されます。ディスク・グループ名のみを指定した場合、自動ストレージ管理ではそのファイル・タイプに適したデフォルトのテンプレートが使用されます。たとえば、CREATE TABLESPACE文でデータ・ファイルを作成する場合、自動ストレージ管理ではデフォルトのDATAFILEテンプレートを使用して自動ストレージ管理データ・ファイルが作成されます。ディスク・グループ名とテンプレートを指定した場合、自動ストレージ管理では指定したテンプレートを使用してファイルが作成されます。いずれの場合も、自動ストレージ管理によって完全修飾されたファイル名が作成されます。

template_name

テンプレートは、属性の名前付きコレクションです。テンプレートを作成して、ディスク・グループのファイルに適用できます。すべての自動ストレージ管理テンプレートの名前を確認するには、V$ASM_TEMPLATEデータ・ディクショナリ・ビューを問い合せます。自動ストレージ管理テンプレートを作成する手順は、「diskgroup_template_clauses」を参照してください。

templateは、ファイルの作成時にのみ指定できます。これは、ASM_filenameの構文図の不完全なファイル名形式および別名形式に示されています。

alias_file_name

別名は、自動ストレージ管理ファイルのわかりやすい名前です。ファイルの別名は、ファイルの作成または参照時に使用できます。ファイルの作成時にのみ、別名とともにテンプレートを指定できます。自動ストレージ管理ファイルの別名を確認するには、V$ASM_ALIASデータ・ディクショナリ・ビューを問い合せます。

ファイルの作成時に別名を指定する場合、完全な別名を指定する手順は、「diskgroup_directory_clauses」および「diskgroup_alias_clauses」を参照してください。

SIZE句

ファイルのサイズをバイト単位で指定します。KMGまたはTを使用して、KB、MB、GBまたはTB単位で指定することもできます。

REUSE

REUSEは、既存ファイルの再利用を可能にします。

REUSE句の制限事項:

filenameを指定しないかぎり、REUSEは指定できません。

既存のファイルが使用される場合は、そのファイルに入っていた内容は失われます。

参照:

「データ・ファイルの追加例」および「ログ・ファイルの追加例」を参照してください。 

autoextend_clause

autoextend_clauseはデータ・ファイルと一時ファイルに有効ですが、REDOログ・ファイルには有効ではありません。この句は、新しいデータ・ファイル、既存のデータ・ファイルまたは一時ファイルの自動拡張を使用可能または使用禁止にします。この句を指定しない場合、次のようになります。

ON

ONを指定すると、自動拡張を使用可能にします。

OFF

OFFを指定すると、自動拡張を使用禁止にします。自動拡張を使用禁止にする場合は、NEXTおよびMAXSIZEの値を0(ゼロ)に設定します。後続の文で自動拡張を使用可能に戻す場合は、これらの値を設定しなおす必要があります。

NEXT

NEXT句を使用すると、エクステントがさらに必要になった場合にデータ・ファイルに自動的に割り当てられるディスク領域の増分サイズを、バイト単位で指定できます。デフォルトのサイズは1データ・ブロックです。

MAXSIZE

MAXSIZE句を使用すると、データ・ファイルの自動拡張で使用されるディスク領域の最大サイズを指定できます。

UNLIMITED

データ・ファイルまたは一時ファイルに割り当てられるディスク領域を制限しない場合は、UNLIMITED句を使用します。

autoextend_clauseの制限事項:

この句はCREATE CONTROLFILE文のdatafile_tempfile_specの一部、またはALTER DATABASE CREATE DATAFILE句には指定できません。

ログ・ファイルの指定例

次の文は、payableという名前のデータベースを作成します。このデータベースには各グループにメンバーを2つ持つREDOログ・ファイル・グループが2つと、データ・ファイルが1つ設定されています。

CREATE DATABASE payable 
   LOGFILE GROUP 1 ('diska:log1.log', 'diskb:log1.log') SIZE 50K, 
           GROUP 2 ('diska:log2.log', 'diskb:log2.log') SIZE 50K 
   DATAFILE 'diskc:dbone.dat' SIZE 30M; 

LOGFILE句の最初のファイル指定は、REDOログ・ファイル・グループにGROUP 1の値を指定します。このグループには、'diska:log1.log'および'diskb:log1.log'というメンバーがあり、サイズはそれぞれ50KBです。

LOGFILE句の2番目のファイル指定は、REDOログ・ファイル・グループにGROUP 2の値を指定します。このグループには、'diska:log2.log'および'diskb:log2.log'というメンバーがあり、サイズはそれぞれ50KBです。

DATAFILE句のファイル指定では、'diskc:dbone.dat'という名前のデータ・ファイルが指定されています。このファイルのサイズは30MBです。

各ファイル指定はSIZEパラメータの値を指定し、REUSE句は指定していないため、指定のファイルがすでに定義されていることはありません。Oracleが新しくファイルを作成します。

ログ・ファイルの追加例

次の文は、2つのメンバーで構成される新しいREDOログ・ファイル・グループを、payableデータベースに追加します。

ALTER DATABASE payable 
   ADD LOGFILE GROUP 3 ('diska:log3.log', 'diskb:log3.log') 
   SIZE 50K REUSE; 

ADD LOGFILE句のファイル指定は、REDOログ・ファイル・グループにGROUP 3の値を指定します。このグループには、'diska:log3.log'および'diskb:log3.log'というメンバーがあり、サイズはそれぞれ50KBです。このファイル指定ではREUSE句が指定されているため、各メンバーはすでに存在している可能性があります(ただし、存在していなくてもかまいません)。

データ・ファイルの指定例

次の文は、stocksという名前の表領域を作成します。また、この表領域にはデータ・ファイルが3つあります。

CREATE TABLESPACE stocks 
   DATAFILE 'stock1.dat' SIZE 10M, 
            'stock2.dat' SIZE 10M,
            'stock3.dat' SIZE 10M; 

このデータ・ファイルのファイル指定は、'diskc:stock1.dat''diskc:stock2.dat'および'diskc:stock3.dat'という名前のファイルを指定します。

データ・ファイルの追加例

次の文は、stocks表領域を変更し、新しいデータ・ファイルを追加します。

ALTER TABLESPACE stocks 
   ADD DATAFILE 'stock4.dat' SIZE 10M REUSE; 

このファイル指定は、'stock4.dat'という名前のデータ・ファイルを指定します。このファイル名が存在しない場合、REUSEキーワードは無視されます。

完全修飾された自動ストレージ管理データ・ファイル名の使用例

次の文は、自動ストレージ管理を使用する際に、fully_qualified_file_name句を使用して、仮想データベースtestdbのデータ・ファイルをオンラインにする方法を示します。

ALTER DATABASE testdb 
   DATAFILE '+dgroup_01/testdb/datafile/system.261.1' ONLINE; 


logging_clause

用途

logging_clauseを使用すると、データベース・オブジェクトの作成がREDOログ・ファイルに記録されるか(LOGGING)、記録されないか(NOLOGGING)を指定できます。

logging_clauseは次の文に指定できます。

次の操作にも、LOGGINGまたはNOLOGGINGを指定できます。

構文

logging_clause::=

画像の説明

セマンティクス

この項では、logging_clauseのセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトに対してロギング特性を設定または再設定するSQL文の説明を参照してください。

データベース・オブジェクトの作成、およびその後のオブジェクトへの挿入をREDOログ・ファイルに記録する場合は、LOGGINGを指定します。

これらの操作を記録しない場合は、NOLOGGINGを指定します。

ロギング属性を指定しているオブジェクトが強制ロギング・モードのデータベースまたは表領域に存在している場合、そのデータベースまたは表領域が強制ロギング・モードから別のモードに変わるまで、NOLOGGING設定は無視されます。

データベースをARCHIVELOGモードで運用する場合、LOGGING操作の前に取ったバックアップからのメディア・リカバリによって、オブジェクトが再作成されます。ただし、NOLOGGING操作の前に取ったバックアップからのメディア・リカバリでは、オブジェクトは再作成されません。

NOLOGGINGモードでの操作で生成されるREDOログのサイズは、LOGGINGモードで生成されるログより非常に小さくなります。

NOLOGGINGモードでは、データの変更時に、(新しいエクステントをINVALIDとしてマーク設定し、ディクショナリの変更を記録するために)最小限のログが記録されます。メディア・リカバリ中にNOLOGGINGが適用された場合、REDOデータのログ記録が中断されるため、エクステント無効化レコードでは、一定のブロック範囲に「論理的に無効」というマークが付きます。このため、損失してはならないデータベース・オブジェクトの場合は、NOLOGGING操作の後にバックアップを取る必要があります。

NOLOGGINGは、LOGGINGをサポートする場所のサブセットのみでサポートされます。次の操作でのみ、NOLOGGINGモードがサポートされます。

DML:

DDL:

LOB以外のオブジェクトの場合、この句を指定しないと、オブジェクトが存在する表領域のロギング属性がオブジェクトのデフォルトのロギング属性になります。

LOBに対してこの句を省略した場合は、次のようになります。

NOLOGGINGは、行データとともにインラインに格納されたLOBに適用されません。つまり、LOBに対するNOLOGGINGを4000バイト未満の値に指定し、STORAGE IN ROWを使用禁止にしていなかった場合、NOLOGGINGの指定は無視され、LOBデータは他の表データと同様に扱われます。

参照:

ロギングおよびパラレルDMLの詳細は、『Oracle Database概要』および『Oracle Database管理者ガイド』を参照してください。 


parallel_clause

用途

parallel_clauseを使用すると、データベース・オブジェクト作成のパラレル化、およびその後のオブジェクトに対する問合せのデフォルトの並列度と、オブジェクトに対するDML操作の設定が可能になります。

parallel_clauseは次の文に指定できます。

構文

parallel_clause::=

画像の説明

セマンティクス

この項では、parallel_clauseのセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトまたは操作に対してパラレル化を設定または再設定するSQL文の説明を参照してください。


注意:

parallel_clause構文は、以前のリリースの構文にかわるものです。以前のリリースの構文は下位互換用にサポートされていますが、動作がわずかに異なることがあります。 


NOPARALLEL

NOPARALLELを指定すると、シリアル実行が行われます。これはデフォルトです。

PARALLEL

並列度を選択する場合は、PARALLELを指定します。並列度とは、すべての関係するインスタンスで使用可能なCPUの数に、初期化パラメータPARALLEL_THREADS_PER_CPUの値を掛けたものです。

PARALLEL integer

integerには、パラレル操作で使用するパラレル・スレッド数である並列度を指定します。各パラレル・スレッドは、1、2個のパラレル実行サーバーを使用します。通常、最適な並列度が計算されるため、integerに値を指定する必要はありません。

parallel_clauseの注意事項:

parallel_clauseには、次の注意事項があります。


physical_attributes_clause

用途

physical_attributes_clauseを使用すると、PCTFREEPCTUSEDおよびINITRANSパラメータの値、および表、クラスタ、索引またはマテリアライズド・ビューの記憶特性を指定できます。

physical_attributes_clauseは次の文に指定できます。

構文

physical_attributes_clause::=

画像の説明

storage_clause::=を参照)

セマンティクス

この項では、physical_attributes_clauseのパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらのパラメータを設定または再設定するSQL文の説明を参照してください。

PCTFREE integer

データベース・オブジェクトの各データ・ブロック内で、オブジェクトの行を将来更新するために確保しておく領域の割合を表す整数値を指定します。PCTFREEの値は、0〜99の値にする必要があります。値に0を指定した場合は、ブロック全体が一杯になるまで新しい行を挿入できます。デフォルト値は10です。10を指定した場合、既存の行に対して行われる更新用に各ブロックの10%が確保されるため、各ブロックでは最大90%まで表に新しい行を挿入できます。

PCTFREEは、表、パーティション、クラスタ、索引、マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを作成および変更する文の中で同様に機能します。PCTFREEPCTUSEDの組合せによって、新しい行を既存のデータ・ブロックと新しいデータ・ブロックのどちらに挿入するかが決まります。

PCTFREE句の制限事項:

索引を変更する場合、このパラメータは、modify_index_default_attrs句およびsplit_partition_clauseにのみ指定できます。

PCTUSED integer

使用済領域のうち、データベース・オブジェクトのデータ・ブロックごとに確保される最小限の割合を表す整数値を指定します。ブロックは、使用済領域がPCTUSEDの値を下回ると、行挿入の対象となります。PCTUSEDは0〜99までの正の整数で指定し、デフォルト値は40です。

PCTUSEDは、表、パーティション、クラスタ、マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを作成および変更する文の中で同様に機能します。

PCTUSEDは、索引構成表には無効な表記憶特性です。

PCTFREEおよびPCTUSEDの合計は100以下である必要があります。PCTFREEPCTUSEDをともに使用して、データベース・オブジェクト内の領域を効果的に利用できます。

PCTUSED句の制限事項:

このパラメータは、索引または索引構成表の索引セグメントには指定できません。

参照:

PCTUSEDおよびPCTFREEの各値によるパフォーマンスへの効果については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。 

INITRANS integer

データベース・オブジェクトに割り当てられた各データ・ブロックに割り当てられる、同時実行トランザクション・エントリの初期数を指定します。この値の範囲は1〜255で、デフォルト値は1ですが、次の例外があります。

通常、INITRANS値は、変更せずにデフォルトのまま使用してください。

ブロックを更新するトランザクションごとに、ブロックのトランザクション・エントリが必要です。トランザクション・エントリのサイズは、ご使用のオペレーティング・システムによって異なります。このパラメータを指定した場合、最小数の同時実行トランザクションでブロックを更新することができます。さらに、トランザクション・エントリを動的に割り当てるときのオーバーヘッドを回避できます。

INITRANSパラメータは、表、パーティション、クラスタ、索引、マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを作成および変更する文の中で同様に機能します。

MAXTRANSパラメータ

MAXTRANSは、セグメント内の各データ・ブロックで実行可能な同時実行更新トランザクションの最大数を決定する以前のリリースのパラメータです。このパラメータは現在使用されていません。今回のリリースでは、Oracleは、ブロック内の未使用領域に応じて、任意のデータ・ブロックに対して最大255の同時実行更新トランザクションを自動的に許可します。

MAXTRANS値が設定された既存のオブジェクトは、その設定を保持します。ただし、MAXTRANS値を変更しようとすると、新しい指定は無視され、エラーを戻さずに値は255に置き換えられます。

storage_clause

storage_clauseによって、表、オブジェクト表OIDINDEX、パーティション、LOBのデータ・セグメント、LOBの索引セグメントまたは索引構成表のオーバーフロー・データ・セグメントの記憶特性を指定できます。この句は、大規模な表のパフォーマンスに影響します。記憶域は、追加領域の動的割当てを最小限に抑えるように割り当てられます。詳細は、「storage_clause」を参照してください。


size_clause

用途

size_clauseを使用すると、すべての文にバイト、KB(K)、MB(M)、GB(G)、TB(T)、PB(P)、EB(E)の各単位でバイト数を指定して、ディスク容量またはメモリー容量を設定できます。

構文

size_clause::=

画像の説明

セマンティクス

size_clauseを使用すると、バイト数を様々な単位で指定できます。単位の略語を指定しない場合、integerはバイト単位で解釈されます。


注意:

バイトのすべての単位が常に適切であるとはかぎりません。状況依存の制限が適用されます。後者の場合、Oracleはエラー・メッセージを発行します。 



storage_clause

用途

storage_clauseを使用すると、データベース・オブジェクトの格納方法を指定できます。記憶域パラメータは、データベースのデータへのアクセス時間およびデータベース内での領域の効率的な利用に影響します。

参照:

記憶域パラメータの影響の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。 

クラスタ、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログ、ロールバック・セグメント、表またはパーティションを作成する場合、これらのオブジェクトに割り当てられるセグメントに、記憶域パラメータの値を指定できます。記憶域パラメータを指定しない場合、オブジェクトが存在する表領域に指定されている記憶域パラメータの値が使用されます。


注意:

ローカル管理表領域内のオブジェクトへの記憶域パラメータの指定は、下位互換性のためにサポートされています。ローカル管理表領域を使用している場合、ローカル管理表領域にオブジェクトを作成する際にこれらの記憶域パラメータを省略できます。 


クラスタ、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログ、ロールバック・セグメント、表またはパーティションを変更する場合、記憶域パラメータの値を変更できます。この値の変更は、それ以降のエクステントの割当てにのみ影響します。

storage_clausephysical_attributes_clauseの一部であるため、この句は、物理属性句を指定できる任意の文に指定できます(「physical_attributes_clause」を参照)。storage_clauseは次の文にも指定できます。

前提条件

STORAGEパラメータの値を変更する場合は、適切なCREATE文またはALTER文を使用するための権限が必要です。

構文

storage_clause::=

画像の説明

size_clause::=を参照)

セマンティクス

この項では、storage_clauseのパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらのパラメータを設定または再設定するSQL文の説明を参照してください。


注意:

ローカル管理表領域の場合、storage_clauseの解析方法は異なります。作成時には、MAXEXTENTSは無視され、他のパラメータ値を使用してセグメントの初期サイズが計算されます。詳細は、「CREATE TABLESPACE」を参照してください。 


参照:

「表の記憶域属性の指定例」 

INITIAL

オブジェクトの第1エクステントのサイズを指定します。スキーマ・オブジェクトの作成時に、このエクステントに領域が割り当てられます。この句の詳細は、「size_clause」を参照してください。

デフォルトのサイズは5データ・ブロックです。セグメントを手動で領域管理する表領域の場合、最小値は2データ・ブロック・サイズに指定した各空きリスト・グループの1データ・ブロック・サイズを加えた値になります。セグメントを自動的に領域管理する表領域の場合、最小値は5データ・ブロック・サイズになります。最大値は、ご使用のオペレーティング・システムによって異なります。空きリスト・グループの詳細は、「FREELIST GROUPS」を参照してください。

ディクショナリ管理表領域では、表領域の作成時にMINIMUM EXTENTが指定されている場合、INITIALの値は、必要に応じて指定したMINIMUM EXTENTのサイズに丸められます。MINIMUM EXTENTが指定されていない場合、その表領域に作成されるセグメントのINITIALエクステント・サイズは最小値(前述の説明を参照)、または要求されたサイズが5ブロックより大きい場合は、5ブロックの倍数に丸められます。

ローカル管理表領域では、INITIALの値と表領域に指定されたエクステント・サイズの両方に基づいてオブジェクトの第1エクステントが決定されます。たとえば、エクステントが5Mの均一なローカル管理表領域の場合、INITIAの値を1Mに指定すると、1Mのエクステントが5つ作成されます。

INITIALの制限事項:

ALTER文では、INITIALを指定できません。

NEXT

オブジェクトに割り当てる次のエクステント・サイズをバイト単位で指定します。この句の詳細は、「size_clause」を参照してください。

デフォルトのサイズは5データ・ブロックです。最小のサイズは1データ・ブロックです。最大値は、ご使用のオペレーティング・システムによって異なります。5データ・ブロックより小さい値が指定された場合、データ・ブロック・サイズの一番近い倍数に丸められます。5データ・ブロックを超える値の場合は、断片化を最小限に抑える値に切り上げられます。詳細は、『Oracle Database管理者ガイド』を参照してください。

NEXTパラメータの値を変更した場合(ALTER文で指定した場合)、次に割り当てられるエクステントのサイズは、直前に割り当てられたエクステントのサイズおよびPCTINCREASEパラメータの値とは関係なく、指定したサイズになります。

参照:

断片化の最小化の詳細は、『Oracle Database管理者ガイド』を参照してください。 

PCTINCREASE

3番目以降の各エクステントが、直前のエクステントに対して増加する割合(パーセント)を指定します。デフォルト値は50です。この場合、3番目以降のエクステントは、それぞれその直前のエクステントより50%ずつ大きくなります。最小値は0で、この場合、第2エクステント以降のエクステントのサイズはすべて同じになります。最大値は、ご使用のオペレーティング・システムによって異なります。

計算された各エクステントのサイズは、データ・ブロック・サイズの一番近い倍数に丸められます。

また、PCTINCREASEパラメータの値を変更した場合(ALTER文で指定した場合)、この変更した値と直前に割り当てられたエクステントのサイズを使用して、次に割り当てるエクステントのサイズが計算されます。


提案

すべてのエクステントを同じサイズにする場合は、PCTINCREASEの設定を0(ゼロ)にして、SMONバックグラウンド・プロセスによるエクステントの結合を回避します。通常、設定は0(ゼロ)にすることをお薦めします。そうすることで、断片化を最小限に抑え、処理中に一時セグメントの極端な拡大化を防ぐことができます。 


PCTINCREASEの制限事項:

ロールバック・セグメントにPCTINCREASEは指定できません。ロールバック・セグメントでは、PCTINCREASEの値は常に0(ゼロ)です。

MINEXTENTS

オブジェクトの作成時に割り当てられる合計エクステント数を指定します。このパラメータを使用した場合、使用可能な領域が連続していない場合でも、オブジェクト作成時にたくさんの領域を割り当てることができます。最小値(デフォルト)は1です。この場合、第1エクステントのみが割り当てられます。ただし、ロールバック・セグメントの場合、最小値(デフォルト)は2です。最大値は、ご使用のオペレーティング・システムによって異なります。

MINEXTENTSの値が1より大きい場合、INITIALNEXTおよびPCTINCREASE記憶域パラメータの値に基づいて、次のエクステントのサイズが計算されます。

ALTER文でMINEXTENTSの値を変更する場合、現行の値より小さくすることはできますが、大きくすることはできません。MINEXTENTSをより小さい値に再設定すると便利な場合があります。たとえば、TRUNCATE ... DROP STORAGE文の前で、TRUNCATE操作の後もセグメントがエクステントの最小数を変更しない場合です。

MINEXTENTSの制限事項:

ローカル管理表領域に存在するオブジェクトに対するMINEXTENTSの値は変更できません。

MAXEXTENTS

第1エクステントを含めて、Oracleがオブジェクトに割り当てることができるエクステントの総数を指定します。最小値は1です(最小値が常に2のロールバック・セグメントは除きます)。デフォルト値は、データ・ブロックのサイズによって異なります。

MAXEXTENTSの制限事項:

ローカル管理表領域に存在するオブジェクトに対するMAXEXTENTSの値は変更できません。

UNLIMITED

必要に応じてエクステントが自動的に割り当てられるようにする場合に、UNLIMITEDを指定します。断片化を最小限に抑えるため、この設定をお薦めします。

ロールバック・セグメントにこの句は使用しないでください。この句をロールバック・セグメントに使用すると、長時間実行される特殊なDMLトランザクションによって、ディスクが一杯になるまで新しいエクステントが作成され続ける可能性があります。


注意:

storage_clauseを指定せずに作成したロールバック・セグメントは、ロールバック・セグメントを作成した表領域の記憶域パラメータと同じ設定になります。MAXEXTENTS UNLIMITEDを指定して表領域を作成する場合、ロールバック・セグメントのデフォルトは同じ設定になります。 


FREELIST GROUPS

作成するデータベース・オブジェクトに対する空きリスト・グループ数を指定します。このパラメータの最小値(デフォルト)は1です。Oracleは、Real Application Clustersインスタンスのインスタンス番号を使用して、各インスタンスを空きリスト・グループにマップします。

1つの空きリスト・グループに、それぞれデータベース・ブロックを1つずつ使用します。したがって、次のことがいえます。

FREELIST GROUPSの制限事項:

FREELIST GROUPSパラメータは、CREATE TABLECREATE CLUSTERCREATE MATERIALIZED VIEWCREATE MATERIALIZED VIEW LOGおよびCREATE INDEX文でのみ指定できます。

参照:

インスタンスと空きリスト・グループの関連付けについては、『Oracle Database Oracle ClusterwareおよびOracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。 

FREELISTS

表領域およびロールバック・セグメント以外のオブジェクトについて、表、パーティション、クラスタまたは索引の各空きリスト・グループの空きリスト数を指定します。このパラメータの最小値(デフォルト)は1です。各空きリスト・グループには、空きリストが1つ割り当てられます。最大値は、データ・ブロックのサイズによって異なります。FREELISTSに指定した値が大きすぎた場合、最大値を示すエラーが戻ります。

オブジェクトが存在する表領域が自動セグメント領域管理モードの場合、FREELISTの設定は無視されます。データベースがこのモードで実行されている場合は、「LOB_storage_clause」FREEPOOLSパラメータを参照してください。

FREELISTSの制限事項:

表領域またはロールバック・セグメントを作成または変更するとき以外は、すべての文のstorage_clauseFREELISTSを指定できます。

BUFFER_POOL

BUFFER_POOL句では、スキーマ・オブジェクト用のデフォルトのバッファ・プール(キャッシュ)を定義します。オブジェクトのすべてのブロックは、指定されたキャッシュに格納されます。

BUFFER_POOLの制限事項:

BUFFER_POOLには、次の制限事項があります。

KEEP

KEEPを指定すると、ブロックがセグメントからKEEPバッファ・プールへ移されます。KEEPバッファ・プールに適切なサイズを維持すると、メモリーのスキーマ・オブジェクトが保持され、I/O操作を避けることができます。KEEPは、表、クラスタ、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログに指定するNOCACHE句より優先されます。

RECYCLE

RECYCLEを指定すると、ブロックがセグメントからRECYCLEプールへ移されます。RECYCLEプールに適切なサイズを指定すると、不要なキャッシュ領域が利用されず、デフォルト・プールがRECYCLEプールであるオブジェクト数が削減されます。

DEFAULT

デフォルトのバッファ・プールを識別する場合に、DEFAULTを指定します。これは、KEEPRECYCLEも指定しないオブジェクトのデフォルトです。

参照:

複数のバッファ・プールの使用方法については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。 

OPTIMAL

OPTIMALキーワードは、ロールバック・セグメントのみに指定します。ロールバック・セグメントの最適なサイズをバイト単位で指定します。この句の詳細は、「size_clause」を参照してください。

エクステントのデータがアクティブ・トランザクションで不要になった場合、Oracleは、そのエクステントの割当てを動的に解除することによって、指定されたロールバック・セグメントのサイズを維持します。ロールバック・セグメントのサイズの合計をOPTIMAL値より小さくせずに、できるだけ多くのエクステントの割当てを解除します。

OPTIMALには、MINEXTENTSINITIALNEXTおよびPCTINCREASEパラメータで最初に割り当てた領域より小さい値を指定できません。最大値は、ご使用のオペレーティング・システムによって異なります。値は、データ・ブロック・サイズの一番近い倍数に丸められます。

NULL

ロールバック・セグメントに対する最適なサイズがないことを示す場合にNULLを指定します。これは、ロールバック・セグメントのエクステントの割当てが解除されないことを示します。これはデフォルトの動作です。

表の記憶域属性の指定例

次の文は、表の作成時に記憶域パラメータの値を指定します。

CREATE TABLE divisions 
    (div_no     NUMBER(2), 
     div_name   VARCHAR2(14), 
     location   VARCHAR2(13) ) 
     STORAGE  ( INITIAL 100K  NEXT     50K 
                MINEXTENTS 1  MAXEXTENTS 50  PCTINCREASE 5); 

STORAGEパラメータに指定した値に基づいて、次に示すとおり表に領域が割り当てられます。


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引