Oracle Database SQL言語リファレンス 11g リリース1(11.1) E05750-03 |
|
この章では、複数のSQL文で使用されるSQLデータ定義句について説明します。
この章では、次の内容を説明します。
allocate_extent_clause
句を使用すると、データベース・オブジェクトの新しいエクステントを明示的に割り当てることができます。
この句を使用してエクステントを明示的に割り当てた場合、NEXT
およびPCTINCREASE
記憶域パラメータの値は変更されません。したがって、Oracle Databaseで暗黙的に割り当てられる次のエクステントのサイズには影響ありません。NEXT
およびPCTINCREASE
記憶域パラメータの詳細は、「storage_clause」を参照してください。
エクステントは次のSQL文で割り当てることができます。
ALTER
CLUSTER
(「ALTER CLUSTER」を参照)
ALTER
INDEX
: エクステントを索引、索引パーティションまたは索引サブパーティションに割り当てる場合(「ALTER INDEX」を参照)
ALTER
MATERIALIZED
VIEW
: エクステントをマテリアライズド・ビュー、そのパーティションまたはサブパーティションの1つ、あるいは索引構成マテリアライズド・ビューのオーバーフロー・セグメントに割り当てる場合(「ALTER MATERIALIZED VIEW」を参照)
ALTER
MATERIALIZED
VIEW
LOG
(「ALTER MATERIALIZED VIEW LOG」を参照)
ALTER
TABLE
: エクステントを表、表パーティション、表サブパーティション、索引構成表のマッピング表、索引構成表のオーバーフロー・セグメントまたはLOB記憶域セグメントに割り当てる場合(「ALTER TABLE」を参照)
(size_clause::=を参照)
この項では、allocate_extent_clause
のパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらのパラメータを設定または再設定するSQL文の説明を参照してください。
同じ文でallocate_extent_clause
とdeallocate_unused_clause
を指定することはできません。
エクステント・サイズをバイト単位で指定します。integer
の値は0〜2147483647となります。これより大きいエクステント・サイズを指定するには、この範囲の整数とK
、M
、G
またはT
を使用して、エクステント・サイズをKB、MB、GBまたはTB単位で指定します。
表、索引、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログでは、SIZE
を指定しないと、Oracle Databaseではオブジェクトの記憶域パラメータの値に基づいてサイズが決定されます。ただし、クラスタの場合、クラスタの記憶域パラメータは評価されないため、デフォルト値を使用しない場合はSIZE
を指定する必要があります。
新しいエクステントを割り当てるデータ・ファイルを、表、クラスタ、索引、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログの表領域から1つ指定します。DATAFILE
を指定しないと、Oracleがデータ・ファイルを選択します。
Oracle Real Application Clustersを使用する場合のみ、このパラメータを使用します。
INSTANCE
integer
を指定すると、指定したインスタンスに対応付けられた空きリスト・グループが新しいエクステントを使用できるようになります。インスタンス数が空きリスト・グループの最大数を超えた場合、指定したインスタンス数/最大数という除算が行われ、その余りから、使用する空きリスト・グループが識別されます。インスタンスは初期化パラメータINSTANCE_NUMBER
の値で識別されます。
このパラメータを指定しない場合、表、クラスタ、索引、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログに領域が割り当てられますが、特定の空きリスト・グループからは割り当てられません。かわりにマスター空きリストが使用され、必要に応じて領域が割り当てられます。
constraint
を使用すると、整合性制約(データベース内の値を制限する規則)を定義できます。Oracle Databaseでは、6つの制約を作成し、それを2つの方法で宣言することができます。
次に、6つの整合性制約について簡単に説明します。詳細は、「セマンティクス」を参照してください。
NOT
NULL
制約は、データベースの値がNULLになることを禁止します。
NOT
NULL
制約と一意制約を組み合せたものです。これにより、同じ列または列の組合せで、複数の行の値が同じにならないように、また値がNULLにならないようにします。
REF
列は、定義上は別のオブジェクト型またはリレーショナル表の中のオブジェクトを参照します。REF制約を使用すると、REF
列と参照先のオブジェクトの関係をさらに詳しく指定できます。
制約は、次の2つの構文で定義できます。
NOT
NULL
制約は、表内に宣言する必要があります。その他のすべての制約は、表内または表外に宣言できます。
制約句は、次の文に指定できます。
CREATE
TABLE
(「CREATE TABLE」を参照)
ALTER
TABLE
(「ALTER TABLE」を参照)
CREATE
VIEW
(「CREATE VIEW」を参照)
ALTER
VIEW
(「ALTER VIEW」を参照)
Oracle Databaseでは、ビュー制約を適用していません。ただし、実表に対する制約によってビューに制約を適用できます。
ビューには、一意制約、主キー制約および外部キー制約のみを指定でき、これらの制約はDISABL NOVALIDATE
モードのみでサポートされています。オブジェクト列の属性にビュー制約を定義することはできません。
制約を定義する文を発行できる権限が必要です。
外部キー制約を作成する場合は、この条件に加えて、親表またはビューが自分のスキーマ内に設定されている必要があります。設定されていないかぎり、親表またはビューの参照キー列に対するREFERENCES
権限が必要です。
(inline_constraint::=、out_of_line_constraint::=、inline_ref_constraint::=、out_of_line_ref_constraint::=を参照)
(references_clause::=を参照)
(references_clause::=、constraint_state::=を参照)
(references_clause::=、constraint_state::=を参照)
(references_clause::=、constraint_state::=を参照)
(using_index_clause::=、exceptions_clause::=を参照)
(create_index::=、index_properties::=を参照)
(global_partitioned_index::=、「CREATE
INDEX
」の項にあるlocal_partitioned_index::=、index_attributes::=を参照。INDEXTYPE
IS
...句は、制約を定義すると無効になります。)
(physical_attributes_clause::=、logging_clause::=、「CREATE
INDEX
」の項にあるkey_compression::=を参照。parallel_clause
は、using_index_clause
でサポートされていません。)
この項では、constraint
のセマンティクスについて説明します。詳細は、表またはビューの制約を定義または再定義するSQL文の説明を参照してください。
Oracle Databaseでは、ユーザー定義オブジェクト、ネストした表、VARRAY
、REF
またはLOB型の列または属性に対して制約を使用することはできません。ただし、次の2つの例外があります。
制約名を指定します。この識別子を指定しない場合、SYS_C
n
の形式で名前が生成されます。整合性制約の名前と定義は、USER_
、ALL_
およびDBA_CONSTRAINTS
データ・ディクショナリ・ビュー(それぞれCONSTRAINT_NAME
列およびSEARCH_CONDITION
列)に格納されます。
NOT
NULL
制約は、列にNULLが含まれることを禁止します。NULL
キーワード自体は、実際に整合性制約を定義するものではありませんが、これを指定すると、列にNULLが含まれることが許可されます。NOT
NULL
およびNULL
は、表内指定で定義する必要があります。NOT
NULL
またはNULL
を指定しない場合、NULL
がデフォルトになります。
NOT
NULL
制約は、XMLType
列およびVARRAY
列で表内指定できる唯一の制約です。
NOT
NULL
制約を満たすには、表のすべての行がその列の値を持つ必要があります。
NOT
NULL
制約には次の制限事項があります。
NULL
またはNOT
NULL
を指定できません。
NULL
またはNOT
NULL
を指定できません。そのかわりに、IS
[NOT
] NULL
条件でCHECK
制約を使用してください。一意制約は、列を一意キーとして指定します。複合一意キーは、列の組合せを一意キーとして指定します。一意制約を表内に定義する場合に必要となるのは、UNIQUE
キーワードのみです。一意制約を表外に定義する場合は、1つ以上の列も指定する必要があります。複合一意キーは、表外に定義する必要があります。
一意制約を満たすには、表の中の2つの行が一意キーに対して同じ値を持たないようにする必要があります。ただし、単一の列で構成される一意キーの場合は、複数のNULLを持つことができます。複合一意キーを満たすには、表またはビューの2つの行がキー列に対して同じ組合せの値を持たないようにする必要があります。すべてのキー列に対してNULLを持つ行は、自動的にその制約を満たすことになります。ただし、1つ以上のキー列に対してNULLを持ち、その他のキー列に対して同じ組合せの値を持つ2つの行は、制約に違反します。
Oracleでは、1つ以上の列に一意制約を指定すると、暗黙的に一意キーに索引が作成されます。問合せのパフォーマンスを目的に一意性を定義する場合は、かわりにCREATE UNIQUE INDEX
文を使用して明示的に一意索引を作成することをお薦めします。また、CREATE UNIQUE INDEX
文で、条件付きの一意制約を定義する一意のファンクション索引を作成することもできます。詳細は、「ファンクション索引の使用による条件付き一意性の定義例:」を参照してください。
一意制約には、次の制限事項があります。
LONG
、LONG
RAW
、VARRAY
、NESTED
TABLE
、OBJECT
、REF
、TIMESTAMP
WITH
TIME
ZONE
またはユーザー定義型を含むことができません。ただし、一意キーはTIMESTAMP
WITH
LOCAL
TIME
ZONE
の列を含むことができます。
主キー制約は、列を表またはビューの主キーとして指定します。複合主キーは、列の組合せを主キーとして指定します。主キー制約を表内に定義する場合に必要となるのは、PRIMARY
KEY
キーワードのみです。主キー制約を表外に定義する場合は、1つ以上の列も指定する必要があります。複合主キーは表外に定義する必要があります。
主キー制約は、1つの宣言でNOT
NULL
制約と一意制約を組み合せたものです。このため、主キー制約を満たすには次の条件があります。
主キー制約には、次の制限事項があります。
LONG
、LONG
RAW
、VARRAY
、NESTED
TABLE
、BFILE
、REF
、TIMESTAMP
WITH
TIME
ZONE
またはユーザー定義型を含むことができません。ただし、主キーはTIMESTAMP
WITH
LOCAL
TIME
ZONE
の列を含むことができます。
外部キー制約(参照整合性制約ともいう)は、列を外部キーとして指定し、その外部キーと指定した主キーまたは一意キー(参照キー)との関係を設定します。複合外部キーは、列の組合せを外部キーとして指定します。
外部キーを持つ表またはビューを子オブジェクトといい、参照キーを持つ表またはビューを親オブジェクトといいます。外部キーと参照キーを、同一の表またはビューに設定することができます。この場合、親表と子表は同一の表になります。親表または親ビューのみを指定して、列名を指定しない場合、外部キーは自動的に親表または親ビューの主キーを参照します。外部キーと参照キーの対応する列は、同じ順序とデータ型で構成されている必要があります。
単一キー列の外部キー制約は、表内または表外に定義できます。複合外部キーと属性の外部キーは、表外に指定します。
複合外部キー制約を満たすには、複合外部キーが親表または親ビューの複合一意キーまたは複合主キーを参照するか、外部キーの1つ以上の列の値がNULLである必要があります。
外部キーと主キーの両方、または外部キーと一意キーの両方に、同一の列または列の組合せを指定できます。また、外部キーとクラスタ・キーの両方にも同じ列または列の組合せを指定できます。
1つの表またはビューで複数の外部キーを定義できます。また、1つの列が複数の外部キーを構成することもできます。
外部キー制約には、次の制限事項があります。
LONG
、LONG
RAW
、VARRAY
、NESTED
TABLE
、BFILE
、REF
、TIMESTAMP
WITH
TIME
ZONE
またはユーザー定義型を含むことができません。ただし、主キーはTIMESTAMP
WITH
LOCAL
TIME
ZONE
の列を含むことができます。
AS
subquery
句を含むCREATE
TABLE
文には、外部キー制約を定義できません。そのかわりに、制約を指定せずに表を作成し、後でALTER
TABLE
文を使用してその制約を追加できます。
参照:
外部キー制約はreferences_clause
構文を使用します。外部キー制約を表内に指定する場合に必要となるのは、references_clause
のみです。外部キー制約を表外に指定する場合は、FOREIGN
KEY
キーワードと1つ以上の列も指定する必要があります。
ON
DELETE
句を指定すると、参照主キーまたは参照一意キーの値を削除した場合に参照整合性がどのように自動処理されるかを指定できます。この句を指定しない場合、子表に依存する行を持つ親表の中の参照キーの値は削除できません。
CASCADE
を指定します。
NULL
に変換する場合は、SET
NULL
を指定します。仮想列の値は直接更新できないため、仮想列に対してこの句を指定することはできません。仮想列が導出される値を更新する必要があります。
この句は、ビュー制約に対して指定できません。
CHECK制約によって、表の各行に必要な条件を指定できます。制約を満たすためには、表のそれぞれの行が、その条件に対してTRUE
または不明(NULLのため)のいずれかである必要があります。特定の行に対するCHECK制約条件が評価される場合、条件にある列名に、その行の列値が適用されます。
CHECK制約の表内指定と表外指定の構文は同じです。ただし、表内指定では現在定義されている列(または、オブジェクト列の場合は列の属性)のみを参照でき、表外指定では複数の列または属性を参照できます。
Oracleでは、CHECK制約の条件が相互に排他的かどうかは検証しません。このため、1つの列に対して複数のCHECK制約を作成する場合は、制約の用途が矛盾しないように注意する必要があります。また、条件の評価について特別な順序を想定しないでください。
CHECK制約には、次の制限事項があります。
WITH
CHECK
OPTION
句を使用してビューを定義することは可能です。これは、ビューにCHECK制約を指定することと同じです。
REF
制約を使用すると、REF
型の列とそれが参照するオブジェクトとの関係を指定できます。
REF
制約は、ref_constraint
構文を使用します。REF
制約は表内または表外に定義します。表外指定の場合は、指定しているREF
列または属性を指定する必要があります。
表内指定と表外指定のどちらでも、有効範囲制約、ROWID制約または参照整合性制約を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つのみ指定できます。
有効範囲制約には、次の制限事項があります。
VARRAY
列のREF
要素に対しては有効範囲制約を指定できません。
AS
subquery
を指定し、この副問合せがユーザー定義REF
データ型を戻す場合、この句を指定する必要があります。
REF
列から削除することはできません。
WITH
ROWID
を指定して、ref_column
またはref_attribute
のREF
の値とともにROWIDを格納します。ROWIDとともにREF
値を格納した場合、参照解除操作のパフォーマンスは向上しますが、使用する領域も多くなります。デフォルトのREF
値の記憶域では、ROWIDは格納されません。
ROWID制約には、次の制限事項があります。
VARRAY
列のREF
要素に対してはROWID制約を定義できません。
REF
列から削除することはできません。
REF
列または属性の範囲が限定される場合、この句は無視され、ROWIDはREF
とともには格納されません。
ref_constraint
構文のreferences_clause
を使用すると、外部キー制約をREF
列に定義できます。また、この句はREF
列や属性の有効範囲を参照表に暗黙的に制限します。ただし、REF
列以外の外部キー制約が親表の実際の列を参照することに対し、REF
列の外部キー制約は親表の暗黙のオブジェクト識別子を参照します。
制約名を指定しない場合、制約に対するシステム名がSYS_C
n
という形式で生成されます。
範囲が限定されている既存のREF
列に参照整合性制約を追加する場合、参照表は、REF
列の有効範囲表と同じである必要があります。後で参照整合性制約を削除する場合、REF
列の範囲が参照表に限定されたままになります。
他の型の列に対する外部キー制約と同様に、表内で宣言する場合に必要となるのはreferences_clause
のみです。表外で宣言する場合は、FOREIGN
KEY
キーワード、および1つ以上のREF
列または属性も指定する必要があります。
REF
列における外部キー制約には、次の追加の制限事項があります。
REF
列に参照整合性制約を追加する場合、有効範囲制約が暗黙的に追加されます。したがって、有効範囲制約に適用されるすべての制限事項は、この場合にも適用されます。
references_clause
内のオブジェクト名の後には列を指定できません。
制約定義の一部として、制約が適用される方法およびタイミングを指定できます。
constraint_state
は、表内指定と表外指定の両方に使用できます。constraint_state
の句を表示される順序(上から下)で指定します。いずれの句も複数回は指定できません。
DEFERRABLE
およびNOT
DEFERRABLE
パラメータは、後続のトランザクションで、SET
CONSTRAINT
(S
)文を使用して、トランザクションが終わるまで制約のチェックを遅延できるかどうかを指定します。この句を指定しない場合、NOT
DEFERRABLE
がデフォルトになります。
NOT
DEFERRABLE
を指定すると、後続のトランザクションで、SET
CONSTRAINT
[S
]句を使用して、トランザクションがコミットされるまでこの制約のチェックを遅延させることができません。NOT
DEFERRABLE
制約のチェックは、トランザクションの終わりまで遅延させることはできません。新しいNOT
DEFERRABLE
制約を宣言する場合、CREATE
TABLE
またはALTER
TABLE
文のコミット時にその制約が有効である必要があります。有効でない場合、これらの文は正常に実行されません。
DEFERRABLE
を指定すると、後続のトランザクションで、SET
CONSTRAINT
[S
]句を使用して、トランザクションがコミットされるまでこの制約のチェックを遅延させることができます。この設定によって、制約に違反する可能性のある変更をデータベースに行っている場合に、すべての変更が完了するまで、制約を一時的に使用禁止にすることが可能になります。
制約の遅延可能状態は変更できません。これらのパラメータのいずれを指定するか、どちらも指定せずにNOT
DEFERRABLE
制約を暗黙的に有効にするかに関係なく、この句をALTER
TABLE
文に指定することはできません。制約を削除してから再作成する必要があります。
参照:
|
ビュー制約にはこれらのパラメータを指定できません。
INITIALLY
句は、DEFERRABLE
句が指定されている制約に対するデフォルトのチェック動作を指定します。INITIALLY
設定は、後続のトランザクションにSET
CONSTRAINT
(S
)文を指定することで上書きできます。
INITIALLY
IMMEDIATE
を指定すると、この制約は後続の各SQL文の終わりでチェックされます。INITIALLY
を指定しない場合、INITIALLY
IMMEDIATE
がデフォルトになります。新しいINITIALLY
IMMEDIATE
制約を宣言する場合、CREATE
TABLE
またはALTER
TABLE
文のコミット時にその制約が有効である必要があります。有効でない場合、これらの文は正常に実行されません。
INITIALLY
DEFERRED
を指定すると、この制約は後続のトランザクションの終わりでチェックされます。
制約をNOT
DEFERRABLE
として宣言した場合、この句は無効です。NOT
DEFERRABLE
制約は自動的にINITIALLY
IMMEDIATE
になり、INITIALLY
DEFERRED
に変更することはできないためです。
VALIDATE
およびNOVALIDATE
の動作は、制約が明示的にまたはデフォルトで使用可能/使用禁止のどちらになっているかで異なります。詳細は、「ENABLE句」および「DISABLE句」を参照してください。
表のデータに制約を適用するには、ENABLE
を指定します。
一意制約または主キー制約を使用可能にした場合、キーに索引が存在しないと、一意索引が作成されます。KEEP INDEX
を指定しないかぎり、その後で制約が使用禁止になった場合にこの索引は削除されます。そのため、制約が使用可能になるたびに索引が再作成されます。
索引の再作成を避け、余分な索引を削除するには、最初に使用禁止にした主キー制約および一意制約を新しく作成します。その後、一意でない索引を作成して(または、既存の一意でない索引を使用して)制約を適用してください。制約が使用禁止の場合、一意でない索引は削除されず、後続のENABLE
操作が容易になります。
ENABLE
VALIDATE
を使用すると、すべての旧データと新データが制約に従うことを指定できます。制約が使用可能で、妥当性チェック済の場合は、すべてのデータが現在有効で、今後も有効であることが保証されます。整合性制約に違反する行が表にある場合、制約は使用禁止のままエラーを戻します。すべての行が制約に従っている場合、Oracleは制約を使用可能にします。新規データが整合性制約に違反する場合、その後の文は実行されず、整合性制約の違反を示すエラーが戻されます。
主キー制約をENABLE
VALIDATE
モードに設定すると、妥当性チェック・プロセスによって主キー列にNULLが含まれないことが検証されます。これによるオーバーヘッドを回避するには、データを列に入力する前およびこの表の主キー制約を使用可能にする前に、主キーの各列にNOT
NULL
のマークを付けます。
ENABLE
NOVALIDATE
を使用すると、制約データに対して新しく行うすべてのDML操作が制約に従うことが保証されます。表の既存データが制約に従っていることは保証されません。
VALIDATE
もNOVALIDATE
も指定しない場合、VALIDATE
がデフォルトになります。
ENABLE
NOVALIDATE
からENABLE
VALIDATE
に単一制約状態を変更すると、パラレルで操作が実行できるため、読込み、書込みまたはその他のDDL操作が中断されません。
使用禁止になっている一意キーまたは主キーを参照する外部キーを使用可能にすることはできません。
整合性制約を使用禁止にする場合は、DISABLE
を指定します。データ・ディクショナリでは、使用禁止になっている整合性制約は、使用可能な制約とともに表示されます。この句を指定せずに制約を作成した場合は、その制約は自動的に使用可能になります。
DISABLE
VALIDATE
は、制約を使用禁止にして制約の索引を削除しますが、制約は有効のままです。この機能を使用すると、大量のデータをロードでき、また索引用の領域が削減されるため、データ・ウェアハウスで非常に有効です。この設定を使用することで、ALTER
TABLE
文のexchange_partition_clause
またはSQL*Loaderを使用して、データを非パーティション表からパーティション表にロードすることもできます。他のSQL文を使用した表に対するすべての変更(挿入、更新および削除)は禁止されます。DISABLE
NOVALIDATE
は、Oracleによって制約がメンテナンスされないこと(使用禁止になっているため)、および制約が真であると保証されないこと(妥当性チェックが行われていないため)を示します。外部キー制約がDISABLE
NOVALIDATE
状態であっても、外部キーが参照している主キーを持つ表を削除できません。また、オプティマイザは、DISABLE
NOVALIDATE
状態でも制約を使用できます。
VALIDATE
もNOVALIDATE
も指定しない場合、NOVALIDATE
がデフォルトになります。
一意索引を使用している一意制約または主キー制約を使用禁止にすると、一意索引は削除されます。その他の注意事項や制限事項は、「CREATE
TABLE
」の「enable_disable_clause」を参照してください。
RELY
およびNORELY
は、既存の制約を変更する場合のみ(ALTER
TABLE
... MODIFY
制約構文内でのみ)有効です。これらのパラメータは、クエリー・リライトでNOVALIDATE
モードの制約を考慮するかどうかを指定します。RELY
を指定すると、適用されていないクエリー・リライトに対するNOVALIDATE
モードの既存の制約は、アクティブになります。その制約はNOVALIDATE
モードであるため、適用されません。デフォルト値はNORELY
です。
適用されない制約は、通常、マテリアライズド・ビューおよびクエリー・リライトにのみ有効です。QUERY_REWRITE_INTEGRITY
モードに従って、クエリー・リライトは、VALIDATE
モードの制約、またはRELY
パラメータが設定されたNOVALIDATE
モードの制約を使用して、結合情報を確認します。
RELY
には、遅延不可のNOT
NULL
制約を設定できません。
一意制約または主キー制約の状態を定義する場合は、制約の適用に使用する索引を指定すること、または制約の適用に使用する索引をOracleで自動作成することが可能です。
using_index_clause
は、一意制約または主キー制約を使用可能にしている場合にのみ指定できます。using_index_clause
の句はどのような順序でも指定できますが、各句を指定できるのは1回のみです。
schema
.index
を指定すると、指定した索引を使用して制約が適用されます。索引がない、または制約の適用に索引が使用できない場合、エラーが戻されます。
create_index_statement
を指定すると、索引が作成され、制約の適用に使用されます。索引が作成できない、または制約の適用に索引が使用できない場合、エラーが戻されます。
using_index_clause
には、次の制限事項があります。
NOT
NULL
、外部キーまたはCHECK制約には指定できません。
schema.index
)および作成(create_index_statement
)はできません。
index_attributes
のparallel_clause
は指定できません。
index_properties
のINDEXTYPE
IS
...句は、制約の定義では無効です。
参照:
NOSORT
とlogging_clause
の詳細は、「CREATE INDEX」を参照してください。
PCTFREE
パラメータ」および「storage_clause」を参照してください。
制約の状態を定義する場合は、制約に違反するすべての行のROWIDを格納する表を指定できます。
exceptions_clause
構文を使用すると、例外の処理を定義できます。schema
を指定しない場合、自分のスキーマ内に例外表があるとみなされます。この句自体を指定しない場合、表の名前はEXCEPTIONS
になります。EXCEPTIONS
表または指定した表は、ローカル・データベースに存在する必要があります。
次のいずれかのスクリプトを使用して、EXCEPTIONS
表を作成できます。
UTLEXCPT.SQL
は、物理ROWIDを使用します。そのため、行は、索引構成表からではなく従来表から収集されます(次の注意を参照)。
UTLEXPT1.SQL
は、ユニバーサルROWIDを使用します。そのため、行は、従来表と索引構成表の両方から収集されます。
独自の例外表を作成する場合、これら2つのスクリプトのいずれかで規定される形式に従う必要があります。
ユニバーサルROWIDではなく、主キーに基づく索引構成表から例外を収集する場合、索引構成表ごとに別の例外表を作成し、主キー記憶域を確保する必要があります。スクリプトを変更および再発行することによって、別の名前の例外表を複数作成できます。
exceptions_clause
には、次の制限事項があります。
データ・ウェアハウスのアプリケーションは、リレーショナル・スキーマ内の参照整合性制約を識別することによって、Oracle Database内の多次元データを認識します。これらの制約によって、表間の主キーと外部キーの関係が表されます。Oracle Databaseデータ・ディクショナリを問い合せることによって、アプリケーションはそのような制約を認識できるようになるため、データベース内の多次元データを認識できます。スキーマの複雑さまたはセキュリティ上の理由のため、ファクト表およびディメンション表にビューを定義する必要がある場合があります。Oracle Databaseには、これらのビューを制約する機能があります。ビュー間で制約を定義できるようにすることによって、実表制約をビューに伝播できます。これによって、ビューで提供される制限された環境でも、アプリケーションで多次元データを認識できるようにすることができます。
Oracleでは、ビュー制約を適用していません。ただし、ビューに対する操作には、基となる実表に定義されている整合性制約が適用されます。つまり、実表に対する制約によって、ビューに制約を適用できます。
ビュー制約は表制約のサブセットで、次の制限事項があります。
WITH
CHECK
OPTION
句を使用してビューを定義することは可能です。これは、ビューにCHECK制約を指定することと同じです。
DISABLE
NOVALIDATE
モードのみでサポートされています。他のモードは指定できません。ビュー制約を宣言する場合は、キーワードDISABLE
を指定する必要があります。NOVALIDATE
はデフォルトのため、明示的に指定する必要はありません。
RELY
およびNORELY
パラメータはオプションです。ビュー制約は適用されないため、通常はRELY
パラメータで指定し、より有効に使用します。RELY
またはNORELY
キーワードは、DISABLE
キーワードより前に指定する必要があります。詳細は、「RELY句」を参照してください。
INITIALLY
DEFERRED
またはDEFERRABLE
は指定できません。
using_index_clause
、exceptions_clause
句、またはreferences_clause
のON
DELETE
句は指定できません。
次の文は、サンプル表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_id
とwarehouse_name
を組み合せた値が表の中に複数存在しないことが保証されます。
このADD
CONSTRAINT
句には、制約以外のプロパティも指定できます。
USING
INDEX
句は、制約を使用可能にするために作成される索引の記憶特性を指定します。
EXCEPTIONS
INTO
句によって、制約に違反する行がwarehouses
表に含まれている場合、その行に関する情報がwrong_id
表に書き込まれます。wrong_id
例外表が存在しない場合、この文は正常に実行されません。
次の文は、サンプル表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));
次の文は、(「主キーの例」で作成した)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
句を指定していないため、従業員がいる部門は削除できません。
次の文では、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_id
とhire_date
の組合せを持つことが保証されます。この制約を定義して使用可能にする前に、employees
表のemployee_id
列とhire_date
列の組合せを主キーまたは一意キーとして指定する制約を定義して使用可能にする必要があります。
EXCEPTIONS
INTO
句によって、制約に違反する行がdept_20
表に含まれている場合、その行に関する情報がwrong_emp
表に書き込まれます。wrong_emp
例外表が存在しない場合、この文は正常に実行されません。
次の文は、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);
列に定義されている各制約によって、列の値が次のように制限されます。
check_divno
によって、部門番号は必ず10〜99の範囲内になります。
check_divname
によって、部門名はすべて大文字になります。
check_office
によって、事務所の所在地はDallas、Boston、ParisまたはTokyoのいずれかに制限されます。
それぞれの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));
この制約は、不等式の条件を使用して、従業員の歩合総額(salary
とcommission_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) );
この制約によって、表のデータに対して次の規則を適用できます。
pk_od
は、order_id
列とpart_no
列の組合せを表の主キーとして指定します。この制約を満たすためには、order_id
列およびpart_no
列の組合せが同じである行が、表内に2つあってはいけません。また、order_id
列およびpart_no
列では、行にNULLを入れることはできません。
fk_oid
は、サンプル・スキーマoe
内のorders
表にあるorder_id
列を参照する外部キーとして、order_id
列を指定します。order_detail
.order_id
列に追加されるすべての新しい値は、oe.orders.order_id
列にあらかじめ存在する必要があります。
fk_pno
は、oe
が所有するproduct_information
表にあるproduct_id
列を参照する外部キーとして、product_id
列を指定します。order_detail.product_id
列に追加されるすべての新しい値は、oe.product_information.product_id
列にあらかじめ存在する必要があります。
nn_qty
は、quantity
列に対してNULLを禁止します。
check_qty
によって、quantity
列の値は必ず0(ゼロ)より大きくなります。
check_cost
によって、cost列の値は必ず0(ゼロ)より大きくなります。
この例は、制約句と列定義について、次の点についても示しています。
pk_od
制約の表外定義が、列定義の前にあります。
quantity
列の定義はnn_qty
制約とcheck_qty
制約の両方の定義を含んでいます。
CHECK
制約を指定できます。複数のビジネス・ルールを適用する複雑な条件を持つ1つのCHECK
制約よりも、それぞれ1つのビジネス・ルールのみを適用する単純な条件を持つ複数のCHECK
制約を使用してください。矛盾している制約があると、その制約を識別するエラー・メッセージが戻されます。エラーが検出された制約が1つのビジネス・ルールのみを有効にする場合、このようなエラー・メッセージの方が、矛盾のあるビジネス・ルールを正確に識別できます。
次の文は、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));
次の例は、サンプル・スキーマのオブジェクト型である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つの索引を作成し、その索引を使用して同じ文に別の制約を作成して使用可能にできることも示しています。
次の文は、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
を使用すると、データベース・オブジェクト・セグメントの終わりにある未使用領域の割当てを明示的に解除し、解放された領域を表領域の他のセグメントで使用できるようになります。
未使用領域の割当ては、次の文で解除できます。
ALTER
CLUSTER
(「ALTER CLUSTER」を参照)
ALTER
INDEX
: 未使用領域の割当てを索引、索引パーティションまたは索引サブパーティションから解除する場合(「ALTER INDEX」を参照)
ALTER
MATERIALIZED
VIEW
: 未使用領域の割当てを索引構成マテリアライズド・ビューのオーバーフロー・セグメントから解除する場合(「ALTER MATERIALIZED VIEW」を参照)
ALTER
TABLE
: 未使用領域の割当てを表、表パーティション、表サブパーティション、索引構成表のマッピング表、索引構成表のオーバーフロー・セグメントまたはLOB記憶域セグメントから解除する場合(「ALTER TABLE」を参照)
(size_clause::=を参照)
この項では、deallocate_unused_clause
のセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトに対してこの句を設定または再設定するSQL文の説明を参照してください。
同じ文でdeallocate_unused_clause
とallocate_extent_clause
の両方を指定することはできません。
最高水位標を超える(データベース・ブロックがデータを受け取るためにフォーマットされていない)未使用領域のみ解放できます。未使用領域の割当て解除は、オブジェクトの終わりから開始し、オブジェクトの先頭にある最高水位標に向かって進行します。
エクステントが割当て解除の範囲内に完全に含まれる場合、エクステント全体が解放されて再利用可能となります。エクステントの一部が含まれる場合、最高水位標までのすでに使用されている部分がエクステントになり、残りの未使用領域が解放されて再利用可能になります。
割当てが解除される表領域のユーザー割当て制限は、解放される領域の量のみ増加します。
解放される領域の実際の量は、INITIAL
、MINEXTENTS
およびNEXT
記憶域パラメータによって異なります。これらのパラメータの詳細は、「storage_clause」を参照してください。
割当て解除後に、データベース・オブジェクトのセグメントが保持する、最高水位標を超えるバイト数を指定します。
KEEP
を指定しなかった場合に、最高水位標がINITIAL
およびMINEXTENTS
のサイズを超えると、最高水位標を超えるすべての未使用領域が解放されます。最高水位標がINITIAL
またはMINEXTENTS
のサイズより小さい場合は、MINEXTENTS
を超えるすべての未使用領域が解放されます。
KEEP
オプションを指定した場合、指定した量の領域が保持され、残りの領域のみが解放されます。このとき、残りのエクステント数がMINEXTENTS
より小さくなった場合、MINEXTENTS
はそのエクステント数に変更されます。また、初期エクステントがINITIAL
より小さくなった場合、INITIAL
がそのサイズに変更されます。
NEXT
記憶域パラメータの値は、割当て解除された最後のエクステントのサイズに設定されます。
file_specification
構文のいずれかを使用すると、ファイルをデータ・ファイルまたは一時ファイルとして指定できます。また、1つ以上のファイルのグループを1つのREDOログ・ファイル・グループとして指定することもできます。自動ストレージ管理ディスク・グループにファイルを格納する場合、そのファイルをディスク・グループ・ファイルとしても指定できます。
file_specification
は次の文に指定できます。
CREATE
CONTROLFILE
(「CREATE CONTROLFILE」を参照)
CREATE
DATABASE
(「CREATE DATABASE」を参照)
ALTER
DATABASE
(「ALTER DATABASE」を参照)
CREATE
TABLESPACE
(「CREATE TABLESPACE」を参照)
ALTER
TABLESPACE
(「ALTER TABLESPACE」を参照)
ALTER
DISKGROUP
(「ALTER DISKGROUP」を参照)
ファイルを指定する文を発行する権限が必要です。
(size_clause::=を参照)
(size_clause::=を参照)
(size_clause::=を参照)
(size_clause::=を参照)
この項では、file_specification
のセマンティクスについて説明します。詳細は、データ・ファイル、一時ファイル、REDOログ・ファイルまたは自動ストレージ管理ディスク・グループやディスク・グループ・ファイルを指定するSQL文の説明を参照してください。
データベース記憶域がファイル・システム内、RAWデバイス上または自動ストレージ管理ディスク・グループ内に存在する場合、この句を使用してデータ・ファイルと一時ファイルの属性を指定します。
データベース記憶域がファイル・システム内、RAWデバイス上または自動ストレージ管理ディスク・グループ内に存在する場合、この句を使用してREDOログ・ファイルの属性を指定します。
filename
は、ファイル・システム内またはRAWデバイス上に格納されたファイルに使用します。filename
は、新しいファイルまたは既存のファイルを指定できます。新しいファイルを指定する場合、次のことに注意します。
filename
とSIZE
句の両方を指定しないと、文は失敗します。サイズを指定せずにファイル名を指定すると、Oracleは既存のファイルを再利用し、ファイルが存在しない場合はエラーを戻そうとします。
filename
や残りの句は必須ではありません。この場合、Oracle Databaseによってファイルに一意の名前が作成され、そのファイルが次のいずれかの初期化パラメータで指定されるディレクトリに保存されます。
既存のファイルを指定する場合は、データ・ファイル、一時ファイルまたはREDOログ・ファイル・メンバーの名前を指定します。filename
には、7ビットASCIIキャラクタ・セットまたはEBCDICキャラクタ・セットのシングルバイト文字のみを使用できます。マルチバイト文字は無効です。
filenameには、パス接頭辞を含めることができます。パス接頭辞を指定しない場合は、データベースによってデフォルトの格納場所(プラットフォームによって異なる)のパス接頭辞が追加されます。
REDOログ・ファイル・グループは、1つ以上のメンバー(コピー)で構成されます。filename
は、使用するオペレーティング・システムの表記規則に従って、完全な名前で指定する必要があります。
データベースがfilename
を解析する方法は、SIZE
句およびREUSE
句の指定によっても異なります。
filename
のみを指定する場合、またはREUSE
句を指定してSIZE
句を指定しない場合、そのファイルはすでに存在している必要があります。
filename
の指定に、SIZE
句を指定して、REUSE
句を指定しない場合、そのファイルは新しいファイルである必要があります。
filename
の指定に、SIZE
句とREUSE
句の両方を指定する場合、そのファイルは新しいファイル、既存のファイルのどちらでもかまいません。ファイルがすでに存在している場合は、そのファイルが新しいサイズで再利用されます。また、ファイルが存在しない場合は、データベースはREUSE
キーワードを無視し、指定のサイズで新しいファイルを作成します。
Oracle Managed Filesの詳細は、『Oracle Databaseストレージ管理者ガイド』を参照してください。また、「データ・ファイルの指定例」および「ログ・ファイルの指定例」も参照してください。
参照:
自動ストレージ管理ディスク・グループに格納されたファイルには、ASM_filename
の形式を使用します。この構文でデータ・ファイル、一時ファイルおよびREDOログ・ファイルを作成または参照できます。
すべてのASM_filename
形式は、プラス記号(+)で始まりディスク・グループ名が続きます。すべての自動ストレージ管理ディスク・グループの名前を確認するには、V$ASM_DISKGROUP
ビューを問い合せます。
自動ストレージ管理ディスク・グループにファイルを作成する場合、そのファイルにはシステム生成の完全修飾された自動ストレージ管理ファイル名が付けられます。既存の自動ストレージ管理ファイルを参照する場合にのみ、この形式を使用できます。そのため、ファイル作成時にこの形式を使用する場合は、REUSE
も指定する必要があります。
db_name
は、DB_UNIQUE_NAME
初期化パラメータの値です。この名前はファイルが存在するデータベースの名前と同じです。ただし、プライマリ・データベースとスタンバイ・データベースの両方が存在する場合は、パラメータはこれらを区別して異なる値になります。
file_type
とfile_type_tag
は、データベース・ファイル・タイプです。表8-1に、すべてのファイル・タイプとそれに対応する自動ストレージ管理タグを示します。
filenumber
とincarnation_number
は、システム生成の識別子で、これによって一意性が保証されます。
完全修飾された自動ストレージ管理ファイル名を確認するには、そのファイル・タイプに適切な動的パフォーマンス・ビュー(データ・ファイルではV$DATAFILE
、制御ファイルではV$CONTROLFILE
など)を問い合せます。また、V$ASM_FILE
ビューを問い合せることによって、完全修飾された名前のfilenumber
とincarnation_number
の部分を取得できます。
数値の自動ストレージ管理ファイル名は、一意のfilenumber.incarnation_number
文字列のみが使用されることを除き、完全修飾されたファイル名に類似しています。既存のファイルを参照するためにのみ、この形式を使用できます。そのため、ファイル作成時にこの形式を使用する場合は、REUSE
も指定する必要があります。
不完全な自動ストレージ管理ファイル名は、ファイルの作成時にのみ使用されます。ディスク・グループ名のみを指定した場合、自動ストレージ管理ではそのファイル・タイプに適したデフォルトのテンプレートが使用されます。たとえば、CREATE
TABLESPACE
文でデータ・ファイルを作成する場合、自動ストレージ管理ではデフォルトのDATAFILE
テンプレートを使用して自動ストレージ管理データ・ファイルが作成されます。ディスク・グループ名とテンプレートを指定した場合、自動ストレージ管理では指定したテンプレートを使用してファイルが作成されます。いずれの場合も、自動ストレージ管理によって完全修飾されたファイル名が作成されます。
テンプレートは、属性の名前付きコレクションです。テンプレートを作成して、ディスク・グループのファイルに適用できます。すべての自動ストレージ管理テンプレートの名前を確認するには、V$ASM_TEMPLATE
データ・ディクショナリ・ビューを問い合せます。自動ストレージ管理テンプレートを作成する手順は、「diskgroup_template_clauses」を参照してください。
template
は、ファイルの作成時にのみ指定できます。これは、ASM_filename
の構文図の不完全なファイル名形式および別名形式に示されています。
template
を指定した場合、自動ストレージ管理では指定したテンプレートを使用してファイルが作成され、そのファイルに完全修飾されたファイル名が付けられます。
template
を指定した場合、自動ストレージ管理では指定したテンプレートを使用してファイルが作成され、そのファイルに完全修飾されたファイル名が付けられます。また、後でファイルの参照に使用できる別名も作成されます。指定した別名が既存のファイルを参照している場合は、REUSE
を指定しないかぎり、自動ストレージ管理ではテンプレートの指定が無視されます。別名は、自動ストレージ管理ファイルのわかりやすい名前です。ファイルの別名は、ファイルの作成または参照時に使用できます。ファイルの作成時にのみ、別名とともにテンプレートを指定できます。自動ストレージ管理ファイルの別名を確認するには、V$ASM_ALIAS
データ・ディクショナリ・ビューを問い合せます。
ファイルの作成時に別名を指定する場合、完全な別名を指定する手順は、「diskgroup_directory_clauses」および「diskgroup_alias_clauses」を参照してください。
ファイルのサイズをバイト単位で指定します。K
、M
、G
またはT
を使用して、KB、MB、GBまたはTB単位で指定することもできます。
SIZE
句を指定する必要があります。その他の表領域の場合、ファイルがすでに存在するとき、またはOracle Managed Filesを作成するときには、このパラメータを省略できます。
REUSE
は、既存ファイルの再利用を可能にします。
SIZE
を指定する場合)、または元のサイズのままとなります。
filename
を指定しないかぎり、REUSE
は指定できません。
既存のファイルが使用される場合は、そのファイルに入っていた内容は失われます。
autoextend_clause
はデータ・ファイルと一時ファイルに有効ですが、REDOログ・ファイルには有効ではありません。この句は、新しいデータ・ファイル、既存のデータ・ファイルまたは一時ファイルの自動拡張を使用可能または使用禁止にします。この句を指定しない場合、次のようになります。
ON
を指定すると、自動拡張を使用可能にします。
OFF
を指定すると、自動拡張を使用禁止にします。自動拡張を使用禁止にする場合は、NEXT
およびMAXSIZE
の値を0(ゼロ)に設定します。後続の文で自動拡張を使用可能に戻す場合は、これらの値を設定しなおす必要があります。
NEXT
句を使用すると、エクステントがさらに必要になった場合にデータ・ファイルに自動的に割り当てられるディスク領域の増分サイズを、バイト単位で指定できます。デフォルトのサイズは1データ・ブロックです。
MAXSIZE
句を使用すると、データ・ファイルの自動拡張で使用されるディスク領域の最大サイズを指定できます。
データ・ファイルまたは一時ファイルに割り当てられるディスク領域を制限しない場合は、UNLIMITED
句を使用します。
この句は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
を使用すると、データベース・オブジェクトの作成がREDOログ・ファイルに記録されるか(LOGGING
)、記録されないか(NOLOGGING
)を指定できます。
logging_clause
は次の文に指定できます。
CREATE
TABLE
およびALTER
TABLE
: 表、表のパーティションの1つ、LOBセグメント、または索引構成表のオーバーフロー・セグメントのログを記録する場合(「CREATE TABLE」および「ALTER TABLE」を参照)CREATE
INDEX
およびALTER
INDEX
: 索引または索引のパーティションの1つのログを記録する場合(「CREATE INDEX」および「ALTER INDEX」を参照)
CREATE
MATERIALIZED
VIEW
およびALTER
MATERIALIZED
VIEW
: マテリアライズド・ビュー、マテリアライズド・ビューのパーティションの1つまたはLOBセグメントのログを記録する場合(「CREATE MATERIALIZED VIEW」および「ALTER MATERIALIZED VIEW」を参照)
CREATE
MATERIALIZED
VIEW
LOG
およびALTER
MATERIALIZED
VIEW
LOG
: マテリアライズド・ビュー・ログまたはマテリアライズド・ビュー・ログのパーティションの1つのログを記録する場合(「CREATE MATERIALIZED VIEW LOG」および「ALTER MATERIALIZED VIEW LOG」を参照)
CREATE
TABLESPACE
およびALTER
TABLESPACE
: 表領域に作成されたすべてのオブジェクトに対するデフォルトのロギング特性を設定または変更する場合(「CREATE TABLESPACE」および「ALTER TABLESPACE」を参照)
次の操作にも、LOGGING
またはNOLOGGING
を指定できます。
この項では、logging_clause
のセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトに対してロギング特性を設定または再設定するSQL文の説明を参照してください。
LOGGING
を指定します。
NOLOGGING
を指定します。
FILESYSTEM_LIKE_LOGGING
句は、SecureFile LOBセグメントのログを記録する場合にのみ有効です。この設定は、BasicFile LOBには指定できません。メタデータ変更のログのみを記録する場合は、この設定を指定します。この設定は、障害からリカバリする平均時間を短縮するファイル・システムのメタデータ・ジャーナリングに似ています。SecureFile LOBに対するLOGGING
設定は、ファイル・システムのデータ・ジャーナリングに似ています。LOGGING
とFILESYSTEM_LIKE_LOGGING
の両方の設定によって、SecureFileを使用した完全なトランザクション・ファイル・システムが実現します。ロギング属性を指定しているオブジェクトが強制ロギング・モードのデータベースまたは表領域に存在している場合、そのデータベースまたは表領域が強制ロギング・モードから別のモードに変わるまで、NOLOGGING
設定は無視されます。
データベースをARCHIVELOG
モードで運用する場合、LOGGING
操作の前に取ったバックアップからのメディア・リカバリによって、オブジェクトが再作成されます。ただし、NOLOGGING
操作の前に取ったバックアップからのメディア・リカバリでは、オブジェクトは再作成されません。
NOLOGGING
モードでの操作で生成されるREDOログのサイズは、LOGGING
モードで生成されるログより非常に小さくなります。
NOLOGGING
モードでは、データの変更時に、(新しいエクステントをINVALID
としてマーク設定し、ディクショナリの変更を記録するために)最小限のログが記録されます。メディア・リカバリ中にNOLOGGINGが適用された場合、REDOデータのログ記録が中断されるため、エクステント無効化レコードでは、一定のブロック範囲に「論理的に無効」というマークが付きます。このため、損失してはならないデータベース・オブジェクトの場合は、NOLOGGING
操作の後にバックアップを取る必要があります。
NOLOGGING
は、LOGGING
をサポートする場所のサブセットのみでサポートされます。次の操作でのみ、NOLOGGING
モードがサポートされます。
INSERT
文またはMERGE
文のいずれかの結果として実行されるダイレクト・パス・インサート(シリアルまたはパラレル)。NOLOGGING
は、MERGE
文の結果として実行されるUPDATE
操作には適用できません。
CREATE
TABLE
...AS
SELECT
CREATE
TABLE
...LOB_storage_clause
...LOB_parameters
...NOCACHE
| CACHE
READS
ALTER
TABLE
...LOB_storage_clause
...LOB_parameters
...NOCACHE
| CACHE
READS
(新しく作成したLOB列のロギングを指定する場合)
ALTER
TABLE
... modify_LOB_storage_clause
... modify_LOB_parameters
...NOCACHE
| CACHE
READS
(既存のLOB列のロギングを変更する場合)
ALTER
TABLE
...MOVE
ALTER
TABLE
...(データ移動を伴うすべてのパーティション操作)
CREATE
INDEX
ALTER
INDEX
...REBUILD
ALTER
INDEX
...REBUILD
[SUB]PARTITION
ALTER
INDEX
...SPLIT
PARTITION
LOB以外のオブジェクトの場合、この句を指定しないと、オブジェクトが存在する表領域のロギング属性がオブジェクトのデフォルトのロギング属性になります。
LOBに対してこの句を省略した場合は、次のようになります。
CACHE
を指定した場合は、LOGGING
が使用されます(CACHE
NOLOGGING
は指定できないため)。
NOCACHE
またはCACHE
READS
を指定した場合は、表が存在する表領域の属性がデフォルトのロギング属性として使用されます。
NOLOGGING
は、内部に(行データとともに表に)格納されたLOBには適用されません。LOBに対するNOLOGGING
を4000バイト未満の値に指定し、STORAGE
IN
ROW
を使用禁止にしていなかった場合、NOLOGGING
の指定は無視され、LOBデータは他の表データと同様に扱われます。
parallel_clause
を使用すると、データベース・オブジェクト作成のパラレル化、およびその後のオブジェクトに対する問合せのデフォルトの並列度と、オブジェクトに対するDML操作の設定が可能になります。
parallel_clause
は次の文に指定できます。
CREATE
TABLE
: 表のパラレル化を設定する場合(「CREATE TABLE」を参照)
ALTER
TABLE
(「ALTER TABLE」を参照)
CREATE
CLUSTER
およびALTER
CLUSTER
: クラスタのパラレル化を設定または変更する場合(「CREATE CLUSTER」および「ALTER CLUSTER」を参照)
CREATE
INDEX
: 索引のパラレル化を設定する場合(「CREATE INDEX」を参照)
ALTER
INDEX
(「ALTER INDEX」を参照)
CREATE
MATERIALIZED
VIEW
: マテリアライズド・ビューのパラレル化を設定する場合(「CREATE MATERIALIZED VIEW」を参照)
ALTER
MATERIALIZED
VIEW
(「ALTER MATERIALIZED VIEW」を参照)
CREATE
MATERIALIZED
VIEW
LOG
: マテリアライズド・ビュー・ログのパラレル化を設定する場合(「CREATE MATERIALIZED VIEW LOG」を参照)
ALTER
MATERIALIZED
VIEW
LOG
(「ALTER MATERIALIZED VIEW LOG」を参照)
ALTER
DATABASE
... RECOVER
: データベースをリカバリする場合(「ALTER DATABASE」を参照)
ALTER
DATABASE
... standby_database_clauses
: スタンバイ・データベースに対する操作をパラレル化する場合(「ALTER DATABASE」を参照)
この項では、parallel_clause
のセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトまたは操作に対してパラレル化を設定または再設定するSQL文の説明を参照してください。
NOPARALLEL
を指定すると、シリアル実行が行われます。これはデフォルトです。
並列度を選択する場合は、PARALLEL
を指定します。並列度とは、すべての関係するインスタンスで使用可能なCPUの数に、初期化パラメータPARALLEL_THREADS_PER_CPU
の値を掛けたものです。
integer
には、パラレル操作で使用するパラレル・スレッド数である並列度を指定します。各パラレル・スレッドは、1、2個のパラレル実行サーバーを使用します。通常、最適な並列度が計算されるため、integer
に値を指定する必要はありません。
parallel_clause
には、次の注意事項があります。
UPDATE
またはDELETE
操作に対して、パラレル化はサポートされません。
parallel_clause
を指定する際に、表にLOB型またはユーザー定義オブジェクト型の列が含まれている場合、このLOB型またはオブジェクト型の列を変更する後続のINSERT
、UPDATE
、DELETE
およびMERGE
操作は、通知なしにシリアル実行されます。ただし、後続の問合せはパラレルで実行されます。
parallel_clause
の効果はパラレル・ヒントによって上書きされます。
CREATE
TABLE
... AS
SELECT
文は、パラレルで実行されます。ただし、リモート・オブジェクトはリモート・データベースにある必要があります。参照は、ローカル・データベースにあるオブジェクトにループバックできません。たとえば、ローカル・データベースのオブジェクトを指定するリモート・データベースのシノニムから参照することはできません。
physical_attributes_clause
を使用すると、PCTFREE
、PCTUSED
およびINITRANS
パラメータの値、および表、クラスタ、索引またはマテリアライズド・ビューの記憶特性を指定できます。
physical_attributes_clause
は次の文に指定できます。
CREATE
CLUSTER
およびALTER
CLUSTER
: クラスタおよびクラスタ内のすべての表の物理属性を設定または変更する場合(「CREATE CLUSTER」および「ALTER CLUSTER」を参照)
CREATE
TABLE
: 表、表パーティション、オブジェクト表のOIDINDEX
または索引構成表のオーバーフロー・セグメントの物理属性を設定する場合(「CREATE TABLE」を参照)
ALTER
TABLE
: 表の物理属性、将来追加される表パーティションのデフォルトの物理属性、または既存の表パーティションの物理属性を変更する場合(「ALTER TABLE」を参照)。次の制限があります。
CREATE
INDEX
: 索引または索引パーティションの物理属性を設定する場合(「CREATE INDEX」を参照)
ALTER
INDEX
: 索引の物理属性、将来追加される索引パーティションのデフォルトの物理属性、または既存の索引パーティションの物理属性を変更する場合(「ALTER INDEX」を参照)
CREATE
MATERIALIZED
VIEW
: マテリアライズド・ビュー、そのパーティションの1つ、またはマテリアライズド・ビューを保持するために生成される索引の物理属性を設定する場合(「CREATE MATERIALIZED VIEW」を参照)
ALTER
MATERIALIZED
VIEW
: マテリアライズド・ビューの物理属性、将来追加されるパーティションのデフォルトの物理属性、および既存のパーティション、またはマテリアライズド・ビューを保持するために作成される索引の物理属性を変更する場合(「ALTER MATERIALIZED VIEW」を参照)
CREATE
MATERIALIZED
VIEW
LOG
およびALTER
MATERIALIZED
VIEW
LOG
: マテリアライズド・ビュー・ログの物理属性を設定または変更する場合(「CREATE MATERIALIZED VIEW LOG」および「ALTER MATERIALIZED VIEW LOG」を参照)
(storage_clause::=を参照)
この項では、physical_attributes_clause
のパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらのパラメータを設定または再設定するSQL文の説明を参照してください。
データベース・オブジェクトの各データ・ブロック内で、オブジェクトの行を将来更新するために確保しておく領域の割合を表す整数値を指定します。PCTFREE
の値は、0〜99の値にする必要があります。値に0を指定した場合は、ブロック全体が一杯になるまで新しい行を挿入できます。デフォルト値は10です。10を指定した場合、既存の行に対して行われる更新用に各ブロックの10%が確保されるため、各ブロックでは最大90%まで表に新しい行を挿入できます。
PCTFREE
は、表、パーティション、クラスタ、索引、マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを作成および変更する文の中で同様に機能します。PCTFREE
とPCTUSED
の組合せによって、新しい行を既存のデータ・ブロックと新しいデータ・ブロックのどちらに挿入するかが決まります。「PCTFREEとPCTUSEDの連携」を参照してください。
索引を変更する場合、このパラメータは、modify_index_default_attrs
句およびsplit_partition_clause
にのみ指定できます。
使用済領域のうち、データベース・オブジェクトのデータ・ブロックごとに確保される最小限の割合を表す整数値を指定します。PCTUSED
は0〜99までの正の整数で指定し、デフォルト値は40です。
PCTUSED
は、表、パーティション、クラスタ、マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを作成および変更する文の中で同様に機能します。
PCTUSED
は、索引構成表には無効な表記憶特性です。
PCTFREE
およびPCTUSED
の合計は100以下である必要があります。PCTFREE
とPCTUSED
をともに使用して、データベース・オブジェクト内の領域を効果的に利用できます。「PCTFREEとPCTUSEDの連携」を参照してください。
PCTUSED
パラメータには、次の制限事項があります。
参照:
PCTUSED
およびPCTFREE
の各値によるパフォーマンスへの効果については『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。自動セグメント領域管理については「CREATE
TABLESPACE
」の「segment_management_clause」を参照してください。
新しく割り当てられたデータ・ブロックでは、挿入に使用できる領域は、ブロック・サイズからブロック・オーバーヘッドと空き領域(PCTFREE
)の合計を引いたものになります。既存のデータを更新する場合は、ブロック内の任意の利用可能な領域を使用できます。このため、更新によってブロックの利用可能な領域がPCTFREE
より小さくなる可能性があります。
データ・ブロックがPCTFREE
によって決定された制限に達すると、そのブロックの割合(パーセント)がパラメータPCTUSED
を下回るまで、ブロックに新しい行は挿入はできないとOracle Databaseによって判断されます。この値になるまで、Oracle Databaseでは、データ・ブロックにすでに含まれている行の更新にのみデータ・ブロックの空き領域が使用されます。ブロックは、使用済領域がPCTUSED
の値を下回ると、行挿入の対象となります。
データベース・オブジェクトに割り当てられた各データ・ブロックに割り当てられる、同時実行トランザクション・エントリの初期数を指定します。この値の範囲は1〜255で、デフォルト値は1ですが、次の例外があります。
通常、INITRANS
値は、変更せずにデフォルトのまま使用してください。
ブロックを更新するトランザクションごとに、ブロックのトランザクション・エントリが必要です。このパラメータを指定した場合、最小数の同時実行トランザクションでブロックを更新することができます。さらに、トランザクション・エントリを動的に割り当てるときのオーバーヘッドを回避できます。
INITRANS
パラメータは、表、パーティション、クラスタ、索引、マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを作成および変更する文の中で同様に機能します。
MAXTRANS
は、セグメント内の各データ・ブロックで実行可能な同時実行更新トランザクションの最大数を決定する以前のリリースのパラメータです。このパラメータは現在非推奨になっています。今回のリリースでは、Oracleは、ブロック内の未使用領域に応じて、任意のデータ・ブロックに対して最大255の同時実行更新トランザクションを自動的に許可します。
MAXTRANS
値が設定された既存のオブジェクトは、その設定を保持します。ただし、MAXTRANS
値を変更しようとすると、新しい指定は無視され、エラーを戻さずに値は255に置き換えられます。
storage_clause
によって、表、オブジェクト表OIDINDEX
、パーティション、LOBデータ・セグメントまたは索引構成表のオーバーフロー・データ・セグメントの記憶特性を指定できます。この句は、大規模な表のパフォーマンスに影響します。記憶域は、追加領域の動的割当てを最小限に抑えるように割り当てられます。詳細は、「storage_clause」を参照してください。
size_clause
を使用すると、すべての文にバイト、KB(K)、MB(M)、GB(G)、TB(T)、PB(P)、EB(E)の各単位でバイト数を指定して、ディスク容量またはメモリー容量を設定できます。
size_clause
を使用すると、バイト数を様々な単位で指定できます。単位の略語を指定しない場合、integer
はバイト単位で解釈されます。
storage_clause
を使用すると、Oracle Databaseによる永続的なデータベース・オブジェクトの格納方法を指定できます。一時セグメントの記憶域パラメータでは、常に、関連付けられた表領域のデフォルトの記憶域パラメータが使用されます。記憶域パラメータは、データベースのデータへのアクセス時間およびデータベース内での領域の効率的な利用に影響します。
クラスタ、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログ、ロールバック・セグメント、表、LOB、VARRAY、ネストした表またはパーティションを作成する場合、これらのオブジェクトに割り当てられるセグメントに、記憶域パラメータの値を指定できます。記憶域パラメータを指定しない場合、オブジェクトが存在する表領域に指定されている記憶域パラメータの値が使用されます。表領域に対して値を指定しなかった場合、データベースによってデフォルト値が使用されます。
クラスタ、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログ、ロールバック・セグメント、表、VARRAY、ネストした表またはパーティションを変更する場合、記憶域パラメータの値を変更できます。この値の変更は、それ以降のエクステントの割当てにのみ影響します。
storage_clause
はphysical_attributes_clause
の一部であるため、この句は、物理属性句を指定できる任意の文に指定できます(「physical_attributes_clause」を参照)。storage_clause
は次の文にも指定できます。
CREATE
CLUSTER
およびALTER
CLUSTER
: クラスタおよびクラスタ内のすべての表の記憶特性を設定または変更する場合(「CREATE CLUSTER」および「ALTER CLUSTER」を参照)
CREATE
INDEX
およびALTER
INDEX
: 表索引または索引パーティションに対して作成された索引セグメントまたは主キー制約または一意制約を適用するために使用される索引に対して作成された索引セグメントの記憶特性を設定または変更する場合(「CREATE INDEX」および「ALTER INDEX」を参照)
CREATE
TABLE
またはALTER
TABLE
のENABLE
... USING
INDEX
句: 主キー制約または一意制約を適用するためにシステムによって作成された索引の記憶特性を設定または変更する場合
CREATE
MATERIALIZED
VIEW
およびALTER
MATERIALIZED
VIEW
: マテリアライズド・ビュー、そのパーティションの1つ、またはマテリアライズド・ビューを保持するために生成される索引の記憶特性を設定または変更する場合(「CREATE MATERIALIZED VIEW」および「ALTER MATERIALIZED VIEW」を参照)
CREATE
MATERIALIZED
VIEW
LOG
およびALTER
MATERIALIZED
VIEW
LOG
: マテリアライズド・ビュー・ログの記憶特性を設定または変更する場合(「CREATE MATERIALIZED VIEW LOG」および「ALTER MATERIALIZED VIEW LOG」を参照)
CREATE ROLLBACK SEGMENT
およびALTER ROLLBACK SEGMENT
: ロールバック・セグメントの記憶特性を設定または変更する場合(「CREATE ROLLBACK SEGMENT」および「ALTER ROLLBACK SEGMENT」を参照)
CREATE
TABLE
およびALTER
TABLE
: クラスタ化されていない表またはそのパーティションまたはサブパーティションの1つのLOBまたはVARRAYデータ・セグメント、またはネストした表の記憶表の記憶特性を設定する場合(「CREATE TABLE」および「ALTER TABLE」を参照)
CREATE
TABLESPACE
およびALTER
TABLESPACE
: 表領域に作成されたすべてのオブジェクトに対するデフォルトの記憶特性を設定または変更する場合(「CREATE TABLESPACE」および「ALTER TABLESPACE」を参照) 表領域の記憶域パラメータに対する変更は、表領域に作成される新しいオブジェクトまたはセグメントに割り当てられる新しいエクステントにのみ影響します。
constraint
: 制約の適用に使用される索引(パーティション索引の場合は索引のパーティション)の記憶域を指定する場合(「constraint」を参照)
STORAGE
パラメータの値を変更する場合は、適切なCREATE
文またはALTER
文を使用するための権限が必要です。
(size_clause::=を参照)
(size_clause::=を参照)
この項では、storage_clause
のパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらの記憶域パラメータを設定または再設定するSQL文の説明を参照してください。
注意:
ローカル管理表領域の場合、 |
オブジェクトの第1エクステントのサイズを指定します。スキーマ・オブジェクトの作成時に、このエクステントに領域が割り当てられます。この句の詳細は、「size_clause」を参照してください。
ローカル管理表領域では、INITIAL
の値は、MINEXTENTS
、NEXT
およびPCTINCREASE
の値とともに、セグメントの初期サイズを決定するために使用されます。自動割当てエクステント管理の場合、データベースによって、初期セグメント・サイズを構成するエクステントのサイズが決定されます。均一エクステント管理の場合、エクステント数は、初期セグメント・サイズと表領域作成時に指定された均一エクステント・サイズで決定されます。たとえば、エクステントが1Mの均一なローカル管理表領域の場合、INITIAL
の値を5Mに指定すると、1Mのエクステントが5つ作成されます。
ディクショナリ管理表領域では、デフォルトの初期エクステント・サイズは5ブロックであり、後続のすべてのエクステントは5ブロックに丸められます。表領域作成時にMINIMUM
EXTENT
が指定された場合、エクステント・サイズはMINIMUM
EXTENT
の値に丸められます。
ALTER
文では、INITIAL
を指定できません。
オブジェクトに割り当てる次のエクステント・サイズをバイト単位で指定します。この句の詳細は、「size_clause」を参照してください。
ローカル管理表領域では、表領域が自動割当てエクステント管理用に設定されている場合、NEXT
のサイズはOracleによって決定されます。UNIFORM
表領域では、NEXT
のサイズは表領域作成時に指定された均一エクステント・サイズです。
ディクショナリ管理表領域では、デフォルトのサイズは5データ・ブロックです。最小のサイズは1データ・ブロックです。最大値は、ご使用のオペレーティング・システムによって異なります。5データ・ブロックより小さい値が指定された場合、データ・ブロック・サイズの一番近い倍数に丸められます。5データ・ブロックを超える値の場合は、断片化を最小限に抑える値に切り上げられます。
ローカル管理表領域では、初期セグメント・サイズを決定するためにセグメント作成時にPCTINCREASEの値が使用され、その後の領域割当て時にはこのパラメータは無視されます。
ディクショナリ管理表領域では、3番目以降の各エクステントが直前のエクステントに対して増加する割合(パーセント)を指定します。デフォルト値は50です。この場合、3番目以降のエクステントは、それぞれその直前のエクステントより50%ずつ大きくなります。最小値は0で、この場合、第2エクステント以降のエクステントのサイズはすべて同じになります。最大値は、ご使用のオペレーティング・システムによって異なります。計算された各エクステントのサイズは、データ・ブロック・サイズの一番近い倍数に丸められます。ALTER
文にPCTINCREASE
パラメータの値を指定してこの値を変更すると、この変更した値と直前に割り当てられたエクステントのサイズを使用して、次に割り当てるエクステントのサイズが計算されます。
ロールバック・セグメントにPCTINCREASE
は指定できません。ロールバック・セグメントでは、PCTINCREASE
の値は常に0(ゼロ)です。
ローカル管理表領域では、初期セグメント・サイズを決定するために、MINEXTENTS
の値がPCTINCREASE
、INITIAL
およびNEXT
の値とともに使用されます。
ディクショナリ管理表領域では、オブジェクトの作成時に割り当てられる合計エクステント数を指定します。最小値(デフォルト)は1です。この場合、第1エクステントのみが割り当てられます。ただし、ロールバック・セグメントの場合、最小値(デフォルト)は2です。最大値は、ご使用のオペレーティング・システムによって異なります。
MINEXTENTS
が使用されます。INITIAL
×MINEXTENTS
で算出されます。その後、この値は1に設定され、DBA_SEGMENTS
ビューに反映されます。
MINEXTENTS
は単純に、セグメントに割り当てる必要があるエクステントの最小数です。
MINEXTENTS
の値が1より大きい場合、INITIAL
、NEXT
およびPCTINCREASE
記憶域パラメータの値に基づいて、次のエクステントのサイズが計算されます。
ALTER
文にMINEXTENTS
の値を指定して変更する際は、現行の値より小さくすることはできますが、大きくすることはできません。MINEXTENTS
をより小さい値に再設定すると便利な場合があります。たとえば、TRUNCATE
... DROP
STORAGE
文の前で、TRUNCATE
操作の後もセグメントがエクステントの最小数を変更しない場合です。
MINEXTENTS
記憶域パラメータには、次の制限事項があります。
この記憶域パラメータは、ディクショナリ管理表領域のオブジェクトに対してのみ有効です。第1エクステントを含めて、Oracleがオブジェクトに割り当てることができるエクステントの総数を指定します。最小値は1です(最小値が常に2のロールバック・セグメントは除きます)。デフォルト値は、データ・ブロックのサイズによって異なります。
MAXEXTENTS
は、ローカル管理表領域に存在するオブジェクトに対しては無視されます。
必要に応じてエクステントが自動的に割り当てられるようにする場合に、UNLIMITED
を指定します。断片化を最小限に抑えるため、この設定をお薦めします。
ロールバック・セグメントにこの句は使用しないでください。この句をロールバック・セグメントに使用すると、長時間実行される特殊なDMLトランザクションによって、ディスクが一杯になるまで新しいエクステントが作成され続ける可能性があります。
MAXSIZE
句を使用すると、記憶域要素の最大サイズを指定できます。LOB記憶域では、MAXSIZE
を使用すると、次のようになります。
LOB_parameters
にRETENTION
MAX
を指定すると、指定されたサイズにLOBセグメントが拡張され、その後、UNDO領域から任意の領域を再利用できます。
LOB_parameters
にRETENTION
AUTO
、MIN
またはNONE
を指定すると、指定されたサイズはLOBセグメントのサイズの上限値となり、UNDOの保持においてその指定の影響はありません。
記憶域要素のディスク領域を制限しない場合は、UNLIMITED
句を使用します。この句は、LOB_parameters
でのRETENTION
MAX
の指定と同時には指定できません。両方を指定すると、RETENTION
AUTO
およびMAXSIZE
UNLIMITED
が使用されます。
セグメントを手動で領域管理する表領域の場合、セグメント内の挿入ポイント数を増やしてOLTPシステムの領域管理のパフォーマンスを向上させるために、FREELISTS
記憶域パラメータが使用されます。セグメントを自動的に領域管理する表領域の場合、変化するワークロードにデータベースが適応するため、このパラメータは無視されます。
セグメントを手動で領域管理する表領域の場合、表領域およびロールバック・セグメント以外のオブジェクトに対して、表、パーティション、クラスタまたは索引の各空きリスト・グループの空きリスト数を指定します。このパラメータの最小値(デフォルト)は1です。各空きリスト・グループには、空きリストが1つ割り当てられます。最大値は、データ・ブロックのサイズによって異なります。FREELISTS
に指定した値が大きすぎた場合、最大値を示すエラーが戻ります。
「LOB_parameters」のSECUREFILE
パラメータを指定している場合、この句は無効です。SECUREFILE
パラメータおよびFREELISTS
の両方を指定した場合、FREELISTS
の指定は無視されます。
表領域またはロールバック・セグメントを作成または変更するとき以外は、すべての文のstorage_clause
にFREELISTS
を指定できます。
セグメントを手動で領域管理する表領域の場合、Oracle Real Application Clusters環境でセグメント空き領域を静的にパーティション化するために、この記憶域パラメータの値が使用されます。このパーティション化によって、セグメント・メタデータがインスタンス間で転送されなくなり、領域の割当ておよび割当て解除のパフォーマンスが向上します。セグメントを自動的に領域管理する表領域の場合、インスタンス間ワークロードにOracleが動的に適応するため、このパラメータは無視されます。
セグメントを手動で領域管理する表領域の場合、作成するデータベース・オブジェクトに対する空きリスト・グループ数を指定します。このパラメータの最小値(デフォルト)は1です。Oracleは、Oracle Real Application Clusters(RAC)インスタンスのインスタンス番号を使用して、各インスタンスを空きリスト・グループにマップします。
1つの空きリスト・グループに、それぞれデータベース・ブロックを1つずつ使用します。したがって、次のことがいえます。
INITIAL
の値に指定していない場合、INITIAL
の値は必要な分だけ引き上げられます。
「LOB_parameters」のSECUREFILE
パラメータを指定している場合、この句は無効です。SECUREFILE
パラメータおよびFREELIST
GROUPS
の両方を指定した場合、FREELIST
GROUPS
の指定は無視されます。
FREELIST
GROUPS
パラメータは、CREATE
TABLE
、CREATE
CLUSTER
、CREATE
MATERIALIZED
VIEW
、CREATE
MATERIALIZED
VIEW
LOG
およびCREATE
INDEX
文でのみ指定できます。
BUFFER_POOL
句では、スキーマ・オブジェクト用のデフォルトのバッファ・プール(キャッシュ)を定義します。オブジェクトのすべてのブロックは、指定されたキャッシュに格納されます。
BUFFER_POOL
には、次の制限事項があります。
KEEP
を指定すると、ブロックがセグメントからKEEP
バッファ・プールへ移されます。KEEP
バッファ・プールに適切なサイズを維持すると、メモリーのスキーマ・オブジェクトが保持され、I/O操作を避けることができます。KEEP
は、表、クラスタ、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログに指定するNOCACHE
句より優先されます。
RECYCLE
を指定すると、ブロックがセグメントからRECYCLE
プールへ移されます。RECYCLE
プールに適切なサイズを指定すると、不要なキャッシュ領域が利用されず、デフォルト・プールがRECYCLE
プールであるオブジェクト数が削減されます。
デフォルトのバッファ・プールを識別する場合に、DEFAULT
を指定します。これは、KEEP
もRECYCLE
も指定しないオブジェクトのデフォルトです。
OPTIMAL
キーワードは、ロールバック・セグメントのみに指定します。ロールバック・セグメントの最適なサイズをバイト単位で指定します。この句の詳細は、「size_clause」を参照してください。
エクステントのデータがアクティブ・トランザクションで不要になった場合、Oracleは、そのエクステントの割当てを動的に解除することによって、指定されたロールバック・セグメントのサイズを維持します。ロールバック・セグメントのサイズの合計をOPTIMAL
値より小さくせずに、できるだけ多くのエクステントの割当てを解除します。
OPTIMAL
には、MINEXTENTS
、INITIAL
、NEXT
およびPCTINCREASE
パラメータで最初に割り当てた領域より小さい値を指定できません。最大値は、ご使用のオペレーティング・システムによって異なります。値は、データ・ブロック・サイズの一番近い倍数に丸められます。
ロールバック・セグメントに対する最適なサイズがないことを示す場合にNULL
を指定します。これは、ロールバック・セグメントのエクステントの割当てが解除されないことを示します。これはデフォルトの動作です。
この句は、表領域を作成する場合にのみ有効です。表領域全体を暗号化するには、ENCRYPT
を指定します。CREATE
TABLESPACE
文にENCRYPTION
句を指定する必要もあります。
次の文は、表の作成時に記憶域パラメータの値を指定します。
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
パラメータに指定した値に基づいて、次に示すとおり表に領域が割り当てられます。
MINEXTENTS
の値は1のため、表作成時にエクステントが1つ割り当てられます。
INITIAL
の値は100KBのため、第1エクステントのサイズは100KBになります。
NEXT
の値が50KBのため、第2エクステントのサイズは50KBになります。
PCTINCREASE
の値は5のため、第3エクステントの値は第2エクステントの5%増の52.5KBになります。このとき、データ・ブロック・サイズが2KBの場合は、値は丸められて52KBになります。これ以降、表データの増加に応じて、直前に割り当てられたエクステントのサイズより5%大きいサイズのエクステントが割り当てられます。
MAXEXTENTS
の値は50のため、表に割り当てられるエクステントの最大数は50になります。
|
Copyright © 1996, 2008, Oracle Corporation. All Rights Reserved. |
|