Oracle Database SQL言語リファレンス 11g リリース1(11.1) E05750-03 |
|
この章では、次のSQL文について説明します。
CREATE
SYNONYM
文を使用すると、シノニムを作成できます。シノニムとは、表、ビュー、順序、演算子、プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビュー、Javaクラス・スキーマ・オブジェクト、ユーザー定義オブジェクト型および別のシノニムに付ける別名です。シノニムによってシノニムのターゲット・オブジェクトへの依存関係が設定され、ターゲット・オブジェクトが変更または削除されるとシノニムも無効になります。
シノニムによって、データの独立性および位置の透過性を実現できます。シノニムを使用した場合、どのユーザーが表やビューを所有しているか、どのデータベースに表やビューが格納されているかに関係なく、アプリケーションは機能します。ただし、シノニムはデータベース・オブジェクトに対する権限にかわるものではありません。シノニムを使用するユーザーに対して、適切な権限をあらかじめ付与しておく必要があります。
シノニムを参照できるDML文は、SELECT
、INSERT
、UPDATE
、DELETE
、FLASHBACK
TABLE
、EXPLAIN
PLAN
およびLOCK
TABLE
です。
シノニムを参照できるDDL文は、AUDIT
、NOAUDIT
、GRANT
、REVOKE
およびCOMMENT
です。
自分のスキーマ内にプライベート・シノニムを作成する場合は、CREATE
SYNONYM
システム権限が必要です。
他のユーザーのスキーマ内にプライベート・シノニムを作成する場合は、CREATE
ANY
SYNONYM
システム権限が必要です。
パブリック・シノニムを作成する場合は、CREATE
PUBLIC
SYNONYM
システム権限が必要です。
OR
REPLACE
を指定すると、既存のシノニムを再作成できます。この句を使用すると、既存のシノニムの定義をはじめに削除しなくても、その定義を変更できます。
OR
REPLACE
句は、依存表または依存する有効なユーザー定義オブジェクト型を持つ型シノニムに対して使用できません。
PUBLIC
を指定すると、パブリック・シノニムを作成できます。パブリック・シノニムには、すべてのユーザーがアクセスできます。ただし、シノニムを使用するには、基礎となるオブジェクトに対する適切な権限が必要です。
オブジェクトの先頭にスキーマ名が指定されておらず、オブジェクトの後にデータベース・リンクが指定されていない場合のみ、オブジェクトへの参照を変換するときに、パブリック・シノニムが使用されます。
この句を指定しない場合、シノニムはプライベートです。プライベート・シノニム名は、スキーマ内で一意である必要があります。プライベート・シノニムに所有者以外のユーザーがアクセスできるのは、基礎となるデータベース・オブジェクトに対する適切な権限がユーザーにあり、シノニム名とともにスキーマを指定する場合のみです。
パブリック・シノニムには、次の注意事項があります。
シノニムを含めるスキーマを指定します。schema
を省略した場合、自分のスキーマ内にシノニムが作成されます。PUBLIC
を指定した場合、スキーマは指定できません。
作成するシノニムの名前を指定します。
シノニムを作成するオブジェクトを指定します。シノニムを作成するスキーマ・オブジェクトには、次のものがあります。
スキーマ・オブジェクトは、現在存在している必要はなく、スキーマ・オブジェクトへのアクセス権限も必要ありません。
スキーマ・オブジェクトは、パッケージに含めることはできません。
オブジェクトが含まれているスキーマを指定します。オブジェクトにschema
を指定しなかった場合、そのスキーマ・オブジェクトは自分のスキーマ内にあるとみなされます。
リモート・データベース上のプロシージャやファンクションに対するシノニムを作成する場合、このCREATE
文でschema
を指定する必要があります。または、オブジェクトが存在するデーターベースにローカル・パブリック・シノニムを作成することもできます。ただし、その後は、プロシージャやファンクションの後続のコールすべてにデータベース・リンクを組み込む必要があります。
データベース・リンクを完全に指定するか、またはデータベース・リンクの一部を指定すると、スキーマ・オブジェクトが格納されているリモート・データベース上のオブジェクトのシノニムを作成できます。dblink
を指定して、schema
を省略した場合、シノニムは、データベース・リンクで指定されたスキーマ内のオブジェクトを参照します。リモート・データベースのオブジェクトが含まれているスキーマを指定することをお薦めします。
dblink
を省略した場合、オブジェクトがローカル・データベース上にあるものとみなされます。
dblink
は、Javaクラス・シノニムに対して指定できません。
参照:
|
次の文は、スキーマhr
内の表locations
に対してシノニムoffices
を定義します。
CREATE SYNONYM offices FOR hr.locations;
次の文は、remote
データベース上のスキーマhr
内のemployees
表に対してパブリック・シノニムを作成します。
CREATE PUBLIC SYNONYM emp_table FOR hr.employees@remote.us.example.com;
別のスキーマ内に基礎となるオブジェクトが含まれている場合は、基礎となるオブジェクトと同じ名前をシノニムに指定することもできます。
Oracle Databaseは、オブジェクトの参照を、パブリック・シノニム・レベルで変換する前に、スキーマ・レベルで変換しようとします。たとえば、スキーマoe
とsh
の両方にcustomers
という名前の表が存在するとします。次の例では、ユーザーSYSTEM
が、oe.customers
に対してcustomers
という名前のパブリック・シノニムを作成します。
CREATE PUBLIC SYNONYM customers FOR oe.customers;
ユーザーsh
が次の文を発行すると、sh.customers
から行数が戻されます。
SELECT COUNT(*) FROM customers;
oe.customers
から行数を取得するには、ユーザーsh
は、customers
の前にスキーマ名を指定する必要があります(ユーザーsh
は、oe.customers
に対するSELECT権限も必要です)。
SELECT COUNT(*) FROM oe.customers;
ユーザーhr
のスキーマにcustomers
という名前のオブジェクトは存在しないが、hr
がoe.customers
に対するSELECT権限を持つ場合、hr
は、パブリック・シノニムcustomers
を使用して、oe
のスキーマ内のcustomers
表にアクセスできます。
SELECT COUNT(*) FROM customers;
CREATE
TABLE
文を使用すると、次の型の表を作成できます。
オブジェクト型を作成しておき、リレーショナル表の作成時に列の中でそのオブジェクト型を使用することもできます。
副問合せを指定しない場合、データを含まない表が作成されます。INSERT
文を使用した場合、表に行を追加できます。表を作成した後、ALTER
TABLE
文でADD
句を指定すると、追加する列、パーティションおよび整合性制約を定義できます。ALTER
TABLE
文でMODIFY
句を指定すると、既存の列またはパーティションの定義を変更できます。
参照:
|
自分のスキーマ内にリレーショナル表を作成する場合は、CREATE
TABLE
システム権限が必要です。他のユーザーのスキーマ内に表を作成する場合は、CREATE
ANY
TABLE
システム権限が必要です。また、表が含まれるスキーマの所有者は、表を格納するため表領域への割当て制限またはUNLIMITED
TABLESPACE
システム権限が必要です。
これらの表権限に加え、オブジェクト表またはオブジェクト型の列が存在するリレーショナル表を作成する場合は、表の所有者に、表が参照するすべての型にアクセスするためのEXECUTE
オブジェクト権限が付与されているかまたはEXECUTE
ANY
TYPE
システム権限が付与されている必要があります。これらの権限は、ロールを介して取得するのではなく、明示的に付与される必要があります。
さらに、表の所有者が表へのアクセス権限を他のユーザーに付与する場合、所有者には、参照する型に対するWITH
GRANT
OPTION
付きのEXECUTE
オブジェクト権限またはWITH
ADMIN
OPTION
付きのEXECUTE
ANY
TYPE
システム権限が必要です。これらの権限を持っていない場合、表の所有者は、表へのアクセス権限を他のユーザーに付与できません。
一意キー制約または主キー制約を有効にする場合は、表に索引を作成するための権限が必要です。Oracle Databaseでは、表を含むスキーマにおいて、一意キーまたは主キーの列に索引を作成するため、この権限が必要になります。
外部表を作成する場合は、適切なオペレーティング・システム・ディレクトリに対する、オペレーティング・システムの読取り権限および書込み権限が必要です。外部データが存在するオペレーティング・システム・ディレクトリに対応するデータベース・ディレクトリ・オブジェクトに対するREAD
オブジェクト権限が必要です。また、opaque_format_spec
でログ・ファイルまたは不良ファイルを指定する場合、またはAS
subquery
句を指定してデータベース表から外部表にデータをアンロードする場合、ファイルが格納されるデータベース・ディレクトリに対するWRITE
オブジェクト権限が必要です。
(relational_table::=、object_table::=、XMLType_table::=を参照)
(relational_properties::=、physical_properties::=、table_properties::=を参照)
(object_table_substitution::=、object_properties::=、oid_clause::=、oid_index_clause::=、physical_properties::=、table_properties::=を参照)
(XMLType_storage::=、XMLSchema_spec::=、XMLType_virtual_columns::=、oid_clause::=、oid_index_clause::=、physical_properties::=、table_properties::=を参照)
(column_definition::=、virtual_column_definition::=、constraint::=、supplemental_logging_props::=を参照)
(encryption_spec::=、constraint::=を参照)
(constraint::=を参照)
(constraint::=、supplemental_logging_props::=を参照)
(physical_attributes_clause::=を参照)
(segment_attributes_clause::=、table_compression::=、index_org_table_clause::=、external_table_clause::=を参照)
(physical_attributes_clause::=、logging_clause::=を参照)
(storage_clause::=を参照)
(column_properties::=、table_partitioning_clauses::=、parallel_clause::=、enable_disable_clause::=、row_movement_clause::=、flashback_archive_clause::=、subquery::=を参照)
(object_type_col_properties::=、nested_table_col_properties::=、varray_col_properties::=、LOB_storage_clause::=、LOB_partition_storage::=、XMLType_column_properties::=を参照)
(substitutable_column_clause::=、object_properties::=、physical_properties::=、column_properties::=を参照)
(substitutable_column_clause::=、varray_storage_clause::=を参照)
(LOB_parameters::=を参照)
(LOB_storage_parameters::=を参照)
(LOB_parameters::=、storage_clause::=を参照)
(LOB_deduplicate_clause::=、LOB_compression_clause::=、encryption_spec::=、logging_clause::=を参照)
(LOB_storage_clause::=、varray_col_properties::=、LOB_partitioning_storage::=を参照)
(XMLType_storage::=、XMLSchema_spec::=を参照)
(LOB_parameters::=を参照)
(mapping_table_clauses::=、key_compression::=、index_org_overflow_clause::=を参照)
(segment_attributes_clause::=を参照)
(external_data_properties::=を参照)
(opaque_format_spec
: この句は、ORACLE_LOADER
およびORACLE_DATAPUMP
アクセス・ドライバのすべてのアクセス・パラメータを指定します。これらのパラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。)
(range_partitions::=、hash_partitions::=、list_partitions::=、reference_partitioning::=、composite_range_partitions::=、composite_list_partitions::=およびsystem_partitioning::=を参照)
(range_values_clause::=、table_partition_description::=を参照)
(individual_hash_partitions::=、hash_partitions_by_quantity::=を参照)
(partitioning_storage_clause::=を参照)
(list_values_clause::=、table_partition_description::=を参照)
(reference_partition_desc::=を参照)
(table_partition_description::=を参照)
(subpartition_by_range::=、subpartition_by_list::=、subpartition_by_hash::=、range_partition_desc::=を参照)
(subpartition_by_range::=、subpartition_by_list::=、subpartition_by_hash::=、list_partition_desc::=を参照)
(reference_partition_desc::=を参照)
(range_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=を参照)
(list_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=を参照)
(range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=を参照)
(range_values_clause::=、partitioning_storage_clause::=を参照)
(list_values_clause::=、partitioning_storage_clause::=を参照)
(partitioning_storage_clause::=を参照)
(segment_attributes_clause::=、table_compression::=、key_compression::=、LOB_storage_clause::=、varray_col_properties::=を参照)
(table_compression::=を参照)
(using_index_clause::=を参照。exceptions_clause
は、CREATE
TABLE
文ではサポートされていません。)
(create_index::=、index_properties::=を参照)
(「CREATE
INDEX
」の項にあるglobal_partitioned_index::=とlocal_partitioned_index::=、およびindex_attributes::=を参照。domain_index_clause
およびXMLIndex_clause
は、using_index_clause
ではサポートされていません。)
(physical_attributes_clause::=、logging_clause::=、key_compression::=を参照。parallel_clause
は、using_index_clause
ではサポートされていません。)
GLOBAL
TEMPORARY
を指定すると、表が一時的で、適切な権限を持つすべてのセッションからその定義が参照できることを指定できます。一時表のデータは、データを表に挿入するセッションでのみ参照できます。
初めて一時表を作成した時点では、その表のメタデータはデータ・ディクショナリに格納されますが、表データの領域は割り当てられません。表セグメントの領域は、その表に初めてDML操作を実行したときに割り当てられます。一時表の定義は、標準的な表の定義と同じように維持されますが、表に含まれる表セグメントとデータは、セッション固有またはトランザクション固有のデータのいずれかになります。表セグメントとデータがセッション固有であるか、トランザクション固有であるかは、ON COMMITキーワードで指定します。
セッションがバインドされていない場合にのみ、一時表でDDL操作(ALTER
TABLE
、DROP
TABLE
、CREATE
INDEX
など)を実行できます。セッションを一時表にバインドするには、一時表でINSERT
操作を実行します。セッションを一時表からアンバインドするには、TRUNCATE
文を発行するか、セッションを終了します。また、トランザクション固有の一時表からアンバインドするには、COMMIT
またはROLLBACK
文を発行します。
一時表には、次の制限事項があります。
LOB_storage_clause
のTABLESPACE
、storage_clause
またはlogging_clause
は指定できません。
UPDATE
、DELETE
およびMERGE
はサポートされていません。
nested_table_col_properties
またはparallel_clause
は指定できません。
segment_attributes_clause
は、TABLESPACE
のみです。
表を含めるスキーマを指定します。schema
を省略した場合、自分のスキーマ内に表が作成されます。
作成する表またはオブジェクト表の名前を指定します。
リレーショナル表のコンポーネントを指定します。
列の性質を定義できます。
表の列の名前を指定します。
AS
subquery
を指定する場合、索引構成表を作成しないかぎり、column
およびdatatype
を省略できます。索引構成表の作成時にAS
subquery
を指定する場合は、column
を指定し、datatype
を省略する必要があります。
表の列の絶対最大数は1000です。オブジェクト表、またはオブジェクトの列、ネストした表、VARRAYまたはREF
型のリレーショナル表を作成する場合、制限の1000列までをカウントする有効な非表示列を作成して、ユーザー定義型の列をリレーショナル列にマップします。
列のデータ型を指定します。
表の列のデータ型には、次の注意事項があります。
AS
subquery
を指定する場合、datatype
を省略できます。索引構成表を作成してAS
subquery
を指定する場合は、データ型を省略する必要があります。
datatype
を省略できます。Oracle Databaseでは、参照整合性制約の参照キーに対応する列のデータ型が列に自動的に割り当てられます。
LONG
列を持つ表は作成しないでください。かわりに、LOB列(CLOB
、NCLOB
またはBLOB
)を使用してください。LONG
列は、下位互換性のためにサポートされています。
ROWID
型の列を指定することはできますが、それらの列の値が有効な行IDであることは保証されません。
SORT
キーワードは、この表をハッシュ・クラスタの一部として作成する場合、およびクラスタ列でもある列にのみ有効です。
この句を指定すると、データベースに対して、ハッシュ・ファンクションを適用する前にこの列でクラスタの行をソートするように指示できます。これによって、クラスタ化データでの後続の操作時に、応答時間が短縮される場合があります。
DEFAULT
句を指定すると、後続のINSERT
文が列の値を省略した場合に列に割り当てられる値を指定できます。式のデータ型は、列のデータ型と一致する必要があります。列には、この式が入る長さが必要です。
DEFAULT
式には、リテラル引数、列の参照またはネストしたファンクションの起動を戻さない、任意のSQLファンクションを含めることができます。
DEFAULT
式に、PL/SQLファンクション、他の列、疑似列CURRVAL
、NEXTVAL
、LEVEL
、PRIOR
およびROWNUM
への参照または完全に指定されていない日付定数は指定できません。
ENCRYPT
句を指定すると、データの透過的暗号化機能を利用して、定義する列を暗号化できます。暗号化できる列の型は、CHAR
、NCHAR
、VARCHAR2
、NVARCHAR2
、NUMBER
、DATE
、LOBおよびRAW
です。列を暗号化するユーザーなど、認可されたユーザーには、データは暗号化された形で表示されません。
注意:
列を暗号化するには、適切な権限を持つシステム管理者が、セキュリティ・モジュールを初期化し、ウォレットをオープンし、暗号化キーを設定しておく必要があります。暗号化の一般的な情報については、『Oracle Database Advanced Security管理者ガイド』を参照してください。関連する |
この句では、使用するアルゴリズムの名前を指定できます。有効なアルゴリズムは、3DES168
、AES128
、AES192
およびAES256
です。この句を省略すると、AES192
が使用されます。同じ表内の複数の列を暗号化するときに、ある1つの列に対してUSING
句を指定した場合は、暗号化する他のすべての列についても同じアルゴリズムを指定する必要があります。
この句を指定すると、指定したパスワードから列のキーが導出されます。
デフォルトでは、列のクリア・テキストにSALTと呼ばれるランダムな文字列が追加されてから、そのテキストが暗号化されます。このデフォルトの動作により、暗号化された列にはいくつかの制限があります。
NO
SALT
を指定する必要があります。このような場面で使用されるSALTの詳細は、『Oracle Database Advanced Security管理者ガイド』を参照してください。
SALT
を指定した場合は、表に対して表の圧縮を指定した場合でも、暗号化される列内のデータは圧縮されません。ただし、SALT
パラメータを指定しない場合は、暗号化されない列および暗号化される列のデータは圧縮されます。
LOB暗号化に対しては、SALT
またはNO
SALT
を指定できません。
列の暗号化には、次の制限事項があります。
ORACLE_DATAPUMP
が使用されている必要があります。
SYS
が所有する表の列は暗号化できません。
virtual_column_definition
句によって、仮想列を作成できます。仮想列はディスクには格納されません。仮想列の値は、一連の式またはファンクションを計算することによって必要に応じて導出されます。仮想列は、問合せ、DMLおよびDDL文で使用できます。索引付けが可能であり、統計を収集できます。したがって、他の列と同様に処理できます。例外と制限については、次の「仮想列の注意事項:」および「仮想列の制限事項:」で説明します。
column
には、仮想列の名前を指定します。
datatype
を省略すると、列のデータ型は基礎となる式のデータ型に基づいて決定されます。すべてのOracleスカラー・データ型およびXMLType
がサポートされています。
GENERATED
ALWAYS
は、構文を明確にするために使用されます。列はディスクには格納されませんが、必要に応じて評価されることが示されます。
AS
column_expr
句によって、列の内容が決まります。column_expr
の詳細は、「列式」を参照してください。
VIRTUAL
はオプションであり、構文を明確にするためのものです。
column_expr
が列レベルのセキュリティが実装された列を参照する場合、仮想列は基本列のセキュリティ・ルールを継承しません。この場合は、仮想列に対して列レベルのセキュリティ・ポリシーを複製するか、またはデータを暗黙的にマスクするファンクションを適用して、仮想列のデータを保護する必要があります。たとえば、一般的にクレジット・カード番号は列レベルのセキュリティ・ポリシーで保護しますが、コール・センターの従業員に対しては確認目的でクレジット・カード番号の下4桁を参照できるようにします。このような場合、クレジット・カード番号の下4桁のサブストリングを取るように仮想列を定義できます。
UPDATE
文のSET
句に仮想列を指定することはできません。ただし、UPDATE
文のWHERE
句には仮想列を指定できます。同様に、DELETE
文のWHERE
句に仮想列を指定して、仮想列の導出値に基づいて表から行を削除できます。
FROM
句に指定する問合せは、結果キャッシュに適応します。結果キャッシュの詳細は、「RESULT_CACHEヒント」を参照してください。
DETERMINISTIC
が明示的に指定されている場合、column_expr
は、PL/SQLファンクションを参照できます。ただし、後でファンクションが置き換えられた場合、仮想列に依存する定義は無効にされません。そのような場合、表にデータが含まれていると、仮想列が制約、索引またはマテリアライズド・ビューの定義あるいは結果キャッシュで使用された場合に、仮想列を参照する問合せで不適切な結果が戻される場合があります。そのため、仮想列の決定的なPL/SQLファンクションを置き換えるために、次の手順を実行します。
AS
句のcolumn_expr
には、次の制限事項があります。
LONG
RAW
にすることはできません。制約句を使用すると、表の列に対する制約を作成できます。DEFERRABLE
以外の主キー制約を索引構成表に指定してください。これらの制約の構文、詳細および使用例は、「constraint」を参照してください。
これらの句を使用すると、REF
型の列を指定できます。これらの句の唯一の違いは、表レベルでout_of_line_ref_constraint
を指定することです。このため、定義するREF
型の列または属性を識別する必要があります。inline_ref_constraint
は、REF
型の列または属性の定義の一部として指定してください。
inline_constraint
を使用すると、整合性制約を列定義の一部として定義できます。
オブジェクト型の列のスカラー属性に、一意制約、主キー制約および参照制約を作成できます。また、オブジェクト型の列のNOT
NULL
制約、オブジェクト型の列またはオブジェクト型の列の属性を参照するCHECK
制約も作成できます。
out_of_line_constraint
構文を使用すると、整合性制約を表定義の一部として定義できます。
supplemental_logging_props
句を指定すると、追加のデータがログ・ストリームに入れられ、ログに基づくツール製品をサポートできます。
この句を使用すると、名前付きのログ・グループを作成できます。
NO
LOG
句を使用すると、REDOログから1つ以上の列を省略できます。この句を指定しない場合、これらの列は名前付きのログ・グループのREDOに含まれます。名前付きのログ・グループに、1つ以上の固定長列をNO
LOG
を使用せずに指定する必要があります。
ALWAYS
を指定すると、更新時にログ・グループのすべての列がREDOに含まれます。関連付けられた行が変更されるとログ・グループのすべての列に対してサプリメンタル・ロギングが行われるため、これは無条件ログ・グループといいます(「常時ログ・グループ」ともいいます)。ALWAYS
を指定しない場合、ログ・グループの任意の列が変更された場合のみ、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。これは、条件付きログ・グループといいます。
サプリメンタル・ロギングが指定されているかどうかを確認するには、適切なUSER_
、ALL_
またはDBA_LOG_GROUP_COLUMNS
データ・ディクショナリ・ビューを問い合せます。
この句を使用すると、主キー列、一意キー列および外部キー列のすべて、またはこれらの列の組合せに対してサプリメンタル・ロギングを実行できます。Oracle Databaseは、無条件ログ・グループまたは条件付きログ・グループのいずれかを生成します。無条件ログ・グループでは、関連付けられた行が変更されると、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。条件付きログ・グループでは、ログ・グループの任意の列が変更された場合のみ、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。
ALL
COLUMNS
を指定すると、この行の最大サイズが固定長のすべての列がREDOログに含まれます。このようなREDOログは、システム生成無条件ログ・グループといいます。
PRIMARY
KEY
COLUMNS
を指定すると、主キーを持つすべての表において、更新が実行されるたびに、主キーのすべての列がREDOログに置かれます。Oracle Databaseは、次のとおりサプリメンタル・ロギングを行う列を評価します。
UNIQUE
COLUMNS
を指定すると、一意キーまたはビットマップ索引を持つすべての表において、一意キー列またはビットマップ索引列が変更された場合、一意キーまたはビットマップ索引に属するその他のすべての列もREDOログに置かれます。このようなログ・グループは、システム生成条件付きログ・グループといいます。
FOREIGN
KEY
COLUMNS
を指定すると、外部キーを持つすべての表において、外部キー列が変更された場合、外部キーに属するその他のすべての列もREDOログに置かれます。このようなREDOログは、システム生成条件付きログ・グループといいます。
この句を複数回指定すると、指定するたびに個別のログ・グループが作成されます。サプリメンタル・ロギング・データが指定されているかどうかを確認するには、適切なUSER_
、ALL_
またはDBA_LOG_GROUPS
データ・ディクショナリ・ビューを問い合せます。
ON
COMMIT
句は、一時表を作成する場合のみに適用されます。この句を使用すると、一時表のデータがトランザクションまたはセッションの存続期間中保持されるかどうかを指定できます。
DELETE
ROWS
は、トランザクション固有の一時表に対して指定します。これはデフォルトです。各コミット後に表が切り捨てられます(すべての行が削除されます)。
PRESERVE
ROWS
は、セッション固有の一時表に対して指定します。セッション終了時に表が切り捨てられます(すべての行が削除されます)。
物理プロパティは、エクステントとセグメントの処理、および表の記憶特性に関係します。
segment_attributes_clause
を指定すると、表の物理属性および表領域の記憶域を指定できます。
physical_attributes_clause
を指定すると、PCTFREE
、PCTUSED
、INITRANS
パラメータの値、および表の記憶特性を指定できます。
PARTITION
句で明示的に値を上書きしないかぎり、指定したパラメータおよび記憶特性の値は、CREATE
文(および後続のALTER
TABLE
... ADD
PARTITION
文)で指定するすべてのパーティションに関連付けられたセグメントのデフォルト物理属性になります。
この句を省略すると、PCTFREE
は10、PCTUSED
は40、INITRANS
は1に設定されます。
Oracle Databaseが、表、オブジェクト表OIDINDEX
、パーティション、LOBのデータ・セグメント、LOBの索引セグメントまたは索引構成表のオーバーフロー・データ・セグメントを作成する表領域を指定します。TABLESPACE
を省略した場合、その表を含むスキーマの所有者のデフォルトの表領域内に作成されます。
1つ以上のLOB列を持つヒープ構成表の場合、LOB記憶域に対するTABLESPACE
を省略すると、表を作成する表領域にLOBデータおよび索引セグメントが作成されます。
1つ以上のLOB列を持つ索引構成表の場合、TABLESPACE
を省略すると、索引構成表の主キー索引セグメントが作成された表領域に、LOBデータおよび索引セグメントが作成されます。
非パーティション表の場合、TABLESPACE
に指定する値は、表に関連付けられたセグメントの実際の物理属性となります。パーティション表の場合、TABLESPACE
に指定する値は、PARTITION
記述でTABLESPACE
を指定しないかぎり、このCREATE
文(および後続のALTER
TABLE
... ADD
PARTITION
文)で指定されたすべてのパーティションに関連付けられたセグメントのデフォルト物理属性となります。
表、および制約のために必要な索引、パーティションまたはLOBの記憶特性の作成をREDOログ・ファイルに記録する(LOGGING
)かしないか(NOLOGGING
)を指定します。表のロギング属性は、その索引の属性に依存しません。
表、パーティションまたはLOBの記憶域に対して、後で実行されるダイレクト・ローダー(SQL*Loader)操作およびダイレクト・パス・インサート操作のログをとる(LOGGING
)かとらない(NOLOGGING
)かも指定します。
この句の詳細は、「logging_clause」を参照してください。
table_compression
句は、ヒープ構成表に対してのみ有効です。この句を使用すると、ディスク使用量を削減するためにデータ・セグメントを圧縮するかどうかを指定できます。この句は、挿入操作や更新操作が少ないデータ・ウェアハウスなどの環境や、OLTP環境で特に有効です。COMPRESS
キーワードを指定すると、表の圧縮が使用可能になります。NOCOMPRESS
キーワードを指定すると、表の圧縮が使用禁止になります。デフォルトはNOCOMPRESS
です。
COMPRESS
またはCOMPRESS
FOR
DIRECT_LOAD
OPERATIONS
を指定して表の圧縮を使用可能にすると、Oracle Databaseでは、表の圧縮が効果的である場合に、ダイレクト・パス・インサート操作中に表の圧縮を開始します。元のインポート・ユーティリティ(imp)はダイレクト・パス・インサートをサポートしないため、圧縮フォーマットでデータをインポートすることはできません。
COMPRESS
FOR
ALL
OPERATIONS
を指定して表の圧縮を使用可能にすると、Oracle Databaseは表でのすべてのDML操作中にデータの圧縮を開始します。表の圧縮は、ヒープ構成表の次の部分に対して指定できます。
relational_table
またはobject_table
のphysical_properties
句で指定します。
range_partitions
句のtable_partition_description
で指定します。
range_partition_desc
句のtable_partition_description
で指定します。
list_partition_desc
句のtable_partition_description
で指定します。
list_partitions
句のtable_partition_description
で指定します。
reference_partition_description
句のtable_partition_description
で指定します。
nested_table_col_properties
句で指定します。
参照:
表の圧縮には、次の制限事項があります。
ALTER
TABLE
... drop_column_clause
のすべての操作が有効です。
これらのキーワードは以前のリリースで非推奨になったもので、それぞれLOGGING
およびNOLOGGING
に置き換えられています。RECOVERABLE
およびUNRECOVERABLE
は、下位互換性のためにサポートされていますが、LOGGING
およびNOLOGGING
キーワードを使用することをお薦めします。
この句には、次の制限事項があります。
RECOVERABLE
を指定できません。
UNRECOVERABLE
を指定できません。
AS
subquery
でのみUNRECOVERABLE
を指定できます。
ORGANIZATION
句を指定すると、表のデータ行が格納される順序を指定できます。
HEAP
を使用すると、table
のデータ行の格納順序を特定しないことを指定できます。これはデフォルトです。
INDEX
を使用すると、table
を索引構成表として作成することを指定できます。索引構成表では、表の主キーが定義された索引内にデータ行が格納されます。
EXTERNAL
を使用すると、表がデータベースの外部にある読取り専用表であることを指定できます。
index_org_table_clause
を使用すると、索引構成表を作成できます。表の行(主キー列の値と非キー列の値の両方)は、主キーに基づいて作成された索引に格納されます。このため、索引構成表は主キーベースのアクセスおよび操作に最適です。索引構成表は、次のいずれかの表のかわりです。
CREATE
INDEX
文を使用して主キーベースで索引付けされるクラスタ化されていない表。
CREATE
CLUSTER
文を使用して作成されます。
主キーは行を一意に識別するため、索引構成表には主キーを指定してください。主キーにはDEFERRABLE
を指定できません。索引構成表の行に直接アクセスする場合は、ROWIDのかわりに主キーを使用してください。
索引構成表がパーティション化され、LOB列を含む場合、最初にindex_org_table_clause
、次にLOB_storage_clause
、その後に適切なtable_partitioning_clauses
を指定する必要があります。
索引構成表を作成する場合は、CREATE
TABLE
... AS
SELECT
文の副問合せで、TO_LOB
ファンクションを使用してLONG
列をLOB列に変換することはできません。LONG
列を含まない索引構成表を作成し、INSERT
...AS
SELECT
文でTO_LOB
ファンクションを使用してください。
索引構成表のROWID
疑似列は、物理ROWIDではなく、論理ROWIDを戻します。データ型ROWID
として作成した列には、IOTの論理ROWIDを格納できません。データ型ROWID
の列に格納できるデータは、ヒープ構成表のROWIDのみです。IOTの論理ROWIDを格納する場合は、かわりに型UROWID
の列を作成します。データ型UROWID
の列には、物理ROWIDと論理ROWIDの両方を格納できます。
索引構成表には、次の制限事項があります。
ROWID
疑似列は、物理ROWIDではなく、論理ROWIDを戻します。データ型ROWIDとして作成した列には、IOTの論理ROWIDを格納できません。データ型ROWID
の列に格納できるデータは、ヒープ構成表のROWIDのみです。IOTの論理ROWIDを格納する場合は、かわりに型UROWID
の列を作成します。データ型UROWID
の列には、物理ROWIDと論理ROWIDの両方を格納できます。
composite_partitioning_clause
は指定できません。
索引ブロック内で、索引構成表の行を格納するために確保されている領域の割合(パーセント)を指定します。PCTTHRESHOLD
は、主キーを保持するために十分な大きさである必要があります。指定したしきい値を超える列から始まる行の後続列はすべて、オーバーフロー・セグメントに格納されます。PCTTHRESHOLD
は1〜50の値を取る必要があります。PCTTHRESHOLD
を指定しない場合のデフォルト値は50です。
PCTTHRESHOLD
は、索引構成表の個別パーティションに対して指定できません。
MAPPING
TABLE
を指定すると、ローカルから物理ROWID
へのマッピングを作成してヒープ構成表に格納できます。このマッピングは、索引構成表のビットマップ索引の作成に必要です。索引構成表がパーティション化されている場合、マッピング表もパーティション化され、マッピング表のパーティションの名前および物理属性は実表のパーティションと同じになります。
マッピング表またはマッピング表のパーティションは、親である索引構成表またはパーティションと同じ表領域に作成されます。マッピング表またはそのパーティションの記憶特性に対して、問合せ、DML操作または変更は実行できません。
key_compression
を使用すると、索引構成表のキー圧縮を使用可能または使用禁止にできます。
COMPRESS
を指定すると、キー圧縮が使用可能になります。これによって、索引構成表の主キー列の値が重複しなくなります。integer
を使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。接頭辞の長さの有効範囲は、1〜(主キー列数-1)までです。デフォルトでは(主キー列数-1)になります。
NOCOMPRESS
を指定すると、索引構成表でのキー圧縮が使用禁止になります。これはデフォルトです。
パーティション・レベルでは、COMPRESS
を指定できますが、integer
で接頭辞の長さを指定できません。
index_org_overflow_clause
を指定すると、指定されたしきい値を超える索引構成表のデータ行を、この句で指定したデータ・セグメントに格納できます。
OVERFLOW
を指定していない場合は、エラーが発生しCREATE
TABLE
文は実行されません。このチェック機能によって、索引構成表に対する後続のDML操作が、オーバーフロー・セグメントがないために失敗することを回避できます。
OVERFLOW
キーワードの後の句に指定するすべての物理属性および記憶特性は、表のオーバーフロー・セグメントにのみ適用されます。索引構成表自体の物理属性と記憶特性、すべてのパーティションに対するデフォルト値、および各パーティションに対する値は、このキーワードの前に指定する必要があります。
OVERFLOW
を指定しないと、アウトラインに格納されます。
索引構成表の行を索引部分とオーバーフロー部分に分割する列を指定します。主キー列は常に索引に格納されます。column_name
は、最後の主キー列でもその他の主キー以外の列でもかまいません。column_name
に続くすべての主キー以外の列は、オーバーフロー・データ・セグメントに格納されます。
column_name
で行を分割しようとした場合に、行の索引部分のサイズが、PCTTHRESHOLD
の指定値またはデフォルト値を超えると、PCTTHRESHOLD
の値に基づいて、行は切り離されます。
索引構成表の個々のパーティションにこの句は指定できません。
external_table_clause
を使用すると、外部表を作成できます。外部表は読取り専用表で、そのメタデータはデータベースに格納されますが、データはデータベースの外部に格納されます。外部表では、データを最初はデータベースにロードせずに、データベースの外部でデータを問い合せることができます。
外部表の場合、データベースにデータが存在しないため、表の作成時に通常は使用可能な句の小規模のサブセットを定義します。
relational_properties
句内では、column
およびdatatype
のみを指定できます。
physical_properties_clause
内では、表の構成(ORGANIZATION
EXTERNAL
external_table_clause
)のみを指定できます。
table_properties
句内では、parallel_clause
のみを指定できます。parallel_clause
を使用すると、外部データに対する後続の問合せおよび外部表を移入する後続の操作をパラレル化できます。
AS
subquery
句を使用することによって移入できます。
同じCREATE
TABLE
文で他の句を指定することはできません。
外部表には、次の制限事項があります。
LONG
列を含めることはできません。ただし、内部データベース表のVARRAYまたはLONG
データを外部表のLOB列に移入することはできます。
TYPE
access_driver_type
を指定すると、外部表のアクセス・ドライバを指定できます。アクセス・ドライバは、データベースに対する外部データを解析するAPIです。Oracle Databaseでは、ORACLE_LOADER
およびORACLE_DATAPUMP
の2つのアクセス・ドライバが提供されています。TYPE
を指定しない場合、デフォルトのアクセス・ドライバORACLE_LOADER
が使用されます。AS
subquery
句を指定して1つのOracle Databaseからデータをアンロードし、同じ、または異なるOracle Databaseに再ロードする場合、ORACLE_DATAPUMP
アクセス・ドライバを指定する必要があります。
DEFAULT
DIRECTORY
を指定すると、外部データ・ソースが存在するファイル・システムのディレクトリに対応するデフォルト・ディレクトリ・オブジェクトを1つ指定できます。デフォルト・ディレクトリは、アクセス・ドライバから使用でき、エラー・ログなどの補助ファイルを格納できます。
オプションのACCESS
PARAMETERS
句を指定すると、その外部表用の特定のアクセス・ドライバのパラメータに値を割り当てることができます。
opaque_format_spec
句は、ORACLE_LOADER
およびORACLE_DATAPUMP
アクセス・ドライバのすべてのアクセス・パラメータを指定します。これらのパラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。opaque_format_spec
で指定するフィールド名は、表定義の列と一致している必要があります。表定義の列と一致していないopaque_format_spec
のフィールドは無視されます。
USING
CLOB
subquery
を指定すると、副問合せを使用して、パラメータおよびその値を導出できます。副問合せには、集合演算子またはORDER
BY
句を含めません。1つのCLOB
データ型を含む単一行を戻します。
opaque_format_spec
でパラメータを指定する場合、または副問合せを使用してそれらを導出する場合は、この句は解析されません。外部データのコンテキスト情報は、アクセス・ドライバが解析します。
LOCATION
句を指定すると、1つ以上の外部データ・ソースを指定できます。通常、location_specifier
はファイルですが、ファイル以外も指定できます。Oracle Databaseはこの句を解析しません。外部データのコンテキスト情報は、アクセス・ドライバが解析します。location_specifier
では、ワイルド・カードを使用した複数ファイルの指定はできません。
REJECT
LIMIT
句を指定すると、Oracle Databaseエラーが戻され、問合せが異常終了するまでに、外部データの問合せで許容される変換エラーの数を指定できます。デフォルト値は0(ゼロ)です。
CLUSTER
句は、表がcluster
の一部であることを示します。この句で指定する各列は、クラスタの各列に対応する表の列となります。一般に、表のクラスタ列は、主キーまたは主キーの一部を構成する1つ以上の列です。詳細は、「CREATE CLUSTER」を参照してください。
クラスタ・キー内の列ごとに表から1つの列を指定します。列は、名前ではなく位置で一致させます。
クラスタ表はクラスタの領域割当てを使用します。このため、PCTFREE
、PCTUSED
またはINITRANS
パラメータ、TABLESPACE
句またはstorage_clause
をCLUSTER
句とともに使用しないでください。
クラスタ表には、次の制限事項があります。
Any*
型の列を含む表はクラスタの一部にはできません。
parallel_clause
、CACHE
またはNOCACHE
は指定できません。
ROWDEPENDENCIES
またはNOROWDEPENDENCIES
設定で作成されていないかぎり、CLUSTER
をROWDEPENDENCIES
またはNOROWDEPENDENCIES
とともに指定することはできません。
table_properties
を使用すると、表の特性をさらに詳しく定義できます。
column_properties
句を使用すると、列の記憶域属性を指定できます。
object_type_col_properties
を使用すると、オブジェクト列、属性、あるいは列または属性の集合要素の記憶特性を指定できます。
column
には、オブジェクト列または属性を指定します。
substitutable_column_clause
を使用すると、同じ階層のオブジェクト列または属性が互いに置換可能かどうかを指定できます。列が特定の型であるか、サブタイプのインスタンスを含むものであるか、またはその両方を指定できます。
ELEMENT
を指定すると、コレクション列または属性の要素型が宣言した型のサブタイプに制約されます。
IS
OF
[TYPE]
(ONLY
type
)
句を指定すると、オブジェクト列の型が宣言した型のサブタイプに制約されます。
NOT
SUBSTITUTABLE
AT
ALL
LEVELS
を指定すると、オブジェクト列がサブタイプに対応するインスタンスを持つことはできないことを指定できます。また、置換は、埋込みオブジェクト属性、埋込みのネストした表およびVARRAYの要素には使用できません。デフォルトは、SUBSTITUTABLE
AT
ALL
LEVELS
です。
この句には、次の制限事項があります。
[NOT]
SUBSTITUTABLE
AT
ALL
LEVELS
のみです。
LOB_storage_clause
を使用すると、LOBデータ・セグメントの記憶域属性を指定できます。STORE
AS
キーワードの後に、1つ以上の句を指定する必要があります。複数の句を指定する場合は、構文図で上から下に表示されている順に指定する必要があります。
非パーティション表の場合、この句は、表のLOBデータ・セグメントの記憶域属性を指定します。
パーティション表の場合、この句は指定した位置に応じて実装されます。
physical_properties
句で指定した場合)、この句は、各パーティションまたはサブパーティションに関連付けられたLOBデータ・セグメントに対するデフォルト記憶域属性を指定します。この記憶域属性は、パーティションまたはサブパーティション・レベルでLOB_storage_clause
によって上書きされないかぎり、すべてのパーティションまたはサブパーティションに適用されます。
table_partition_description
の一部として指定した場合)、この句は、そのパーティションのデータ・セグメントの記憶域属性、またはこのパーティションのサブパーティションのデフォルト記憶域属性を指定します。パーティション・レベルのLOB_storage_clause
は、表レベルのLOB_storage_clause
を上書きします。
subpartition_by_hash
またはsubpartition_by_list
の一部として指定した場合)、この句は、サブパーティションのデータ・セグメントの記憶域属性を指定します。サブパーティション・レベルのLOB_storage_clause
は、パーティション・レベルおよび表レベルのLOB_storage_clauses
を上書きします。
参照:
表の表領域および記憶特性とは異なる表領域および記憶特性を明示的に定義する場合に、そのLOB列名またはLOBオブジェクト属性を指定します。作成する各LOB_item
に、システム管理された索引が自動的に作成されます。
この句を使用して、LOB記憶域のタイプに、高パフォーマンスのLOB(SecureFile)または従来のLOB(BasicFile)を指定します。
LOBデータ・セグメントの名前を指定します。LOB_item
が複数指定されている場合は、LOB_segname
を使用できません。
LOB_storage_parameters
句を使用すると、様々なLOB記憶域の要素を指定できます。
この句を使用すると、LOBデータが格納される表領域を指定します。
storage_clause
を使用すると、LOBセグメント記憶域の様々な側面を指定できます。LOB記憶域に関して特に重要なのは、storage_clause
のMAXSIZE
句です。これは、LOB_parameters
のLOB_retention_clause
と組み合せて使用できます。詳細は、「storage_clause」を参照してください。
LOB記憶域にSecureFileを使用する場合、いくつかのLOB_parameters
は不要になります。PCTVERSION
およびFREEPOOLS
は、BasicFile LOB記憶域を使用する場合にのみ有効かつ有用です。
行の記憶域を使用可能にした場合、LOB値の長さが、約4000バイトからシステム制御情報分を引いた長さより小さければ、LOB値がインラインに格納されます。これはデフォルトです。
index_org_table_clause
でOVERFLOW
セグメントを指定しないかぎり、索引構成表に対して、このパラメータを指定できません。
行の記憶域を使用禁止にした場合、LOB値の長さに関係なく、LOB値はアウトライン(行の外側)に格納されます。
LOB値が格納されている場所にかかわらず、LOBロケータは、常にインラインに格納されます。STORAGE
IN
ROW
の値は、一度設定すると、表を移動しないかぎり、変更できません。詳細は、「ALTER
TABLE
」の「move_table_clause」を参照してください。
LOBの操作用に割り当てるバイト数を指定します。integer
にデータベースのブロック・サイズの倍数を指定しなかった場合、自動的に次に大きい倍数(バイト単位)に切り上げられます。たとえば、データベースのブロック・サイズが2048バイトのときにinteger
に2050を指定すると、4096バイト(2ブロック)が割り当てられます。最大値は32768(32KB)で、これがOracle Databaseのブロック・サイズとして使用できる最も大きな値です。デフォルトのCHUNK
サイズは、Oracleでの1データベース・ブロックです。
CHUNK
の値は、NEXT
の値(デフォルト値またはstorage_clause
で指定された値)以下である必要があります。CHUNK
の値がNEXT
の値を超えると、エラーが戻ります。CHUNK
の値は、一度設定すると変更できません。
LOBの記憶域全体のうち、旧バージョンのLOBの保持に使用される割合(パーセント)の最大値を指定します。デフォルト値は10です。これは、LOBの記憶域全体の10%が使用されるまで以前のバージョンのLOBデータが上書きされないことを意味します。
データベースが手動UNDOモードと自動UNDOモードのどちらで稼働されていても、PCTVERSION
パラメータを指定できます。PCTVERSION
は、手動UNDOモードのデフォルト値です。RETENTION
は、自動UNDOモードのデフォルト値です。PCTVERSION
とRETENTION
の両方は指定できません。
この句は、SECUREFILE
を指定した場合は無効です。SECUREFILE
とPCTVERSION
の両方を指定した場合、PCTVERSION
パラメータは特に警告もなく無視されます。
この句を使用すると、LOBセグメントを保持する用途に、フラッシュバック、読取り一貫性、その両方、またはどちらでもないを指定できます。
データベースが自動UNDOモードで稼働している場合にのみ、RETENTION
パラメータを使用できます。データベースに保持されるコミット済のUNDOデータの量は、UNDO_RETENTION
初期化パラメータの値を使用して決定されます。自動UNDOモードでは、PCTVERSION
を指定しないかぎり、RETENTION
がデフォルト値となります。PCTVERSION
とRETENTION
の両方は指定できません。
SecureFileを使用している場合にのみ、RETENTION
の後にオプションの設定を指定できます。LOB_storage_clause
のSECUREFILE
パラメータは、データベースがSecureFileを使用して記憶域を動的に管理することを示します。データベースのUNDOモードなどの要因が考慮されます。
MAX
: LOBセグメントがMAXSIZE
に達するまでUNDOを保持するように指定します。MAX
を指定する場合は、storage_clause
でMAXSIZE
句も指定する必要があります。
MIN
: データベースがフラッシュバック・モードで、特定のLOBセグメントのUNDO保存期間をn
秒に制限する場合に指定します。
AUTO
: 読取り一貫性に必要十分なUNDOを保持します。これはデフォルトです。
NONE
: 読取り一貫性またはフラッシュバックのどちらにもUNDOが必要ない場合に指定します。
参照:
CREATE
TABLE
」のLOB_storage_parameters句を参照してください。
ALTER
DATABASE
」の「flashback_mode_clause」を参照してください。
LOBセグメントに対する空きリストのグループ数を指定します。通常、integer
は、Oracle Real Application Clusters環境のインスタンス数です。シングル・インスタンス・データベースの場合、この値は1になります。
データベースが自動UNDOモードで稼働している場合にのみ、このパラメータを指定できます。自動UNDOモードでは、storage_clause
でFREELIST
GROUPS
パラメータを指定しないかぎり、FREEPOOLS
がデフォルト値になります。FREEPOOLS
とFREELIST
GROUPS
のどちらも指定しない場合、データベースが自動UNDO管理モードで稼働している場合はFREEPOOLS
1
のデフォルト値が使用され、手動UNDO管理モードで稼働している場合はFREELIST
GROUPS
1
のデフォルト値が使用されます。
この句は、SECUREFILE
を指定した場合は無効です。SECUREFILE
とFREEPOOLS
の両方を指定した場合、FREEPOOLS
パラメータは特に警告もなく無視されます。
storage_clause
では、FREEPOOLS
およびFREELIST
GROUPS
パラメータを指定できません。
この句は、SecureFile LOBに対してのみ有効です。LOB_deduplicate_clause
を使用すると、重複するLOBデータを除外する、LOBの重複の除外を有効または無効にできます。
DEDUPLICATE
キーワードは、LOBの重複コピーを除外するようデータベースに対して指定します。セキュアなハッシュ索引を使用して重複を検出すると、同じ内容を持つLOBは単一のコピーに結合され、消費される記憶域が削減されて記憶域の管理が簡素化されます。
この句を指定しない場合、デフォルトでは、LOBの重複除外は無効です。
この句は、LOBセグメント全体に対して、LOBの重複除外を実装します。個々のLOBに対して重複除外を有効または無効にするには、DBMS_LOB.SETOPTIONS
プロシージャを使用します。
この句は、BasicFile LOBではなく、SecureFile LOBに対してのみ有効です。LOB_compression_clause
を使用すると、サーバー側のLOB圧縮を有効または無効にすることをデータベースに指定できます。サーバー側の圧縮されたLOBセグメントで、ランダムな読取り/書込みアクセスが可能です。LOB圧縮は、表の圧縮または索引の圧縮からは独立しています。この句を指定しない場合、NOCOMPRESS
がデフォルトになります。
MEDIUM
またはHIGH
を指定して、圧縮の程度を変更できます。圧縮の程度をHIGH
にすると、待機時間はMEDIUM
よりも長くなりますが、圧縮率は高くなります。このオプションのパラメータを指定しない場合、MEDIUM
がデフォルトになります。
この句は、LOBセグメント全体のサーバー側のLOB圧縮を実装します。個々のLOBの圧縮を有効または無効にするには、DBMS_LOB.SETOPTIONS
プロシージャを使用します。
これらの句は、LOB記憶域にSecureFileを使用しているLOBに対してのみ有効です。ENCRYPT
を指定すると、列内のすべてのLOBを暗号化できます。DECRYPT
を指定すると、LOBをクリアテキストで保持できます。この句を指定しない場合、DECRYPT
がデフォルトになります。
この句の概要は、「encryption_spec」を参照してください。LOB列に適用するとencryption_spec
は個々のLOB列固有になるため、他のLOB列や他の非LOB列とは、暗号化アルゴリズムが異なる場合があります。column_definition
の一部としてencryption_clause
を使用すると、LOB列全体を暗号化できます。table_partition_description
でLOB_storage_clause
の一部としてencryption_clause
を使用すると、LOBパーティションを暗号化できます。
LOB暗号化に対しては、encryption_spec
のSALT
またはNO
SALT
句を指定できません。
この句は、LOB記憶域だけでなく、セグメント記憶域全般に関連します。この句の詳細は、「CACHE | NOCACHE | CACHE READS」を参照してください。
LOB_partition_storage
句を使用すると、各パーティションに、別のLOB_storage_clause
またはvarray_col_properties
を指定できます。パーティションは、その位置の順に指定してください。パーティションの順番を確認するには、USER_IND_PARTITIONS
ビューのPARTITION_NAME
およびPARTITION_POSITION
列を問い合せます。
特定のパーティションに、LOB_storage_clause
またはvarray_col_properties
句を指定しなかった場合、表レベルでLOB項目に指定された記憶特性が設定されます。表のレベルでもLOB項目に記憶特性を指定しなかった場合、LOBデータ・パーティションは、対応する表パーティションと同じ表領域に格納されます。
LOB_storage_clause
のLOB_parameters
では、encryption_spec
を指定できません。パーティションおよびサブパーティションに対する暗号化アルゴリズムの指定は無効であるためです。
varray_col_properties
を使用すると、VARRAY型のデータが格納されるLOBに対して、別々の記憶特性を指定できます。varray_item
がマルチレベル・コレクションの場合、varray_item
内にネストされたすべてのコレクション項目は、常にvarray_item
と同じLOBに格納されます。
physical_properties
句に指定した場合)、この句は、VARRAYのLOBデータ・セグメントの記憶域属性を指定します。
physical_properties
句で指定した場合)、この句は、各パーティション(またはサブパーティション)に対応付けられたVARRAYのLOBデータ・セグメントに対するデフォルト記憶域属性を指定します。
table_partition_description
の一部として指定した場合)、この句は、そのパーティションのVARRAYのLOBデータ・セグメントの記憶域属性、またはこのパーティションのサブパーティションにあるVARRAYのLOBデータ・セグメントのデフォルト記憶域属性を指定します。パーティション・レベルのvarray_col_properties
は、表レベルのvarray_col_properties
を上書きします。
subpartition_by_hash
またはsubpartition_by_list
の一部として指定した場合)、この句は、このサブパーティションのVARRAYデータ・セグメントの記憶域属性を指定します。サブパーティション・レベルのvarray_col_properties
は、パーティション・レベルおよび表レベルのvarray_col_properties
を上書きします。
STORE
AS
LOB
を指定したときに実行される処理は、次のとおりです。
STORE
AS
LOB
を指定しなかった場合、記憶域は、VARRAY列の実際のサイズではなく、VARRAYの最大サイズに基づいて決定されます。VARRAYの最大サイズは、要素数×要素サイズ+システム制御情報分の容量です。この句を指定しない場合、次のようになります。
substitutable_column_clause
の動作は、「object_type_col_properties」の場合と同じです。
nested_table_col_properties
を使用すると、ネストした表に対して別々の記憶特性を指定し、そのネストした表を索引構成表として定義できるようになります。この句で特に明示的に指定しないかぎり、記憶表は次のとおり作成されます。
ネストした表の型を持つ列または列属性付きで表を作成する場合は、この句を挿入する必要があります。nested_table_col_properties
句内で、親表に対する場合と同じ働きをする句については、ここでは説明しません。
型がネストした表である列、またはその表のオブジェクト型の最上位の属性の名前を指定します。
ネストした表がマルチレベル・コレクションの場合、内部のネストした表またはVARRAYには名前が割り当てられていない場合があります。この場合、nested_item
名のかわりにCOLUMN_VALUE
を指定します。
nested_item
の行を含む表の名前を指定します。
storage_table
に対して問合せやDML文を直接実行することはできませんが、その記憶特性は、ALTER
TABLE
文で名前を指定することによって変更できます。
ネストした表の記憶表はパーティション化できません。
問合せの結果として何を戻り値とするかを指定します。
VALUE
は、ネストした表自体のコピーを戻します。
LOCATOR
は、ネストした表のコピーに対するコレクション・ロケータを戻します。ロケータの有効範囲は1つのセッションであり、複数のセッションにわたって使用できません。LOBロケータとは異なり、コレクション・ロケータはコレクション・インスタンスの変更に使用できません。
segment_attributes_clause
またはLOB_storage_clause
を指定しない場合、ネストした表はヒープ構成され、デフォルトの記憶特性で作成されます。
ネストした表の列のプロパティには、次の制限事項があります。
oid_clause
は指定できません。
object_properties
を使用して、out_of_line_ref_constraint
、inline_ref_constraint
またはネストした表の属性に対する外部キー制約を指定することはできません。ただし、ALTER
TABLE
を使用してネストした表を修正し、これらの制約を追加できます。XMLType_column_properties
を指定すると、XMLTYPE
列に対する記憶域属性を指定できます。
XMLType
列は、LOB列、オブジェクト・リレーショナル列またはバイナリXML列に格納できます。
OBJECT
RELATIONAL
を指定すると、オブジェクト・リレーショナル列にXMLType
データを格納できます。データ・オブジェクトをリレーショナルに格納すると、リレーショナル列に索引を定義できるため、問合せのパフォーマンスが向上します。オブジェクト・リレーショナル形式での格納を指定する場合、XMLSchema_spec
句も指定する必要があります。
CLOB
を指定すると、CLOB
列にXMLType
データを格納できます。CLOB
列にデータを格納すると、元の内容が保持されるため、検索時間が短縮されます。LOB記憶域を定義する場合、LOBパラメータとXMLSchema_spec
句のいずれかを指定できますが、両方は指定できません。XMLSchema_spec
句を指定すると、特定のスキーマ・ベースのXMLインスタンスに表や列を制限できます。
BINARY
XML
を指定すると、縮小されたバイナリXML書式でXMLデータを格納できます。指定したLOBパラメータは、バイナリXMLエンコード値を格納するために作成された、基礎となるBLOB
列に適用されます。
CLOB
とバイナリXML記憶域の両方に対して、データがSecureFile LOBで格納されるように指定できます。詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
この句を使用すると、単一の登録済XMLSchemaまたは複数のスキーマ(XMLSCHEMA
句で登録するかELEMENT
句の一部として登録)のURLおよびXML要素名を指定できます。BINARY
XML
記憶域を指定した場合のみ複数のスキーマを使用できます。
XMLSchemaのURLは省略可能ですが、要素は必ず指定します。XMLSchemaのURLを指定する場合は、DBMS_XMLSCHEMA
パッケージを使用してXMLSchemaをあらかじめ登録しておく必要があります。
オプションのALLOW
| DISALLOW
句は、BINARY
XML
記憶域を指定した場合にのみ有効です。
ALLOW
ANYSCHEMA
を指定すると、スキーマ・ベースの任意のドキュメントをXMLType列に格納できます。
ALLOW
NONSCHEMA
を指定すると、スキーマ・ベース以外のドキュメントをXMLType列に格納できます。
DISALLOW
NONSCHEMA
を指定すると、スキーマ・ベース以外のドキュメントはXMLType列に格納できません。
参照:
LOB_segname
およびLOB_parameters
句の詳細は、「LOB_storage_clause」を参照してください。
XMLType
列の例は、「XMLType列の例:」を参照してください。XMLSchemaの作成例は、「SQL文でのXMLの使用方法」を参照してください。
XMLType
列と表およびXMLSchemaの作成の詳細は、『Oracle XML DB開発者ガイド』を参照してください。
DBMS_XMLSCHEMA
パッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
table_partitioning_clauses
を使用すると、パーティション表を作成できます。
すべてのタイプのパーティション化には、次の注意事項があります。
SYS_P
n
の形式で名前が生成されます。LOBデータおよびLOB索引パーティションに対するシステム生成名は、それぞれSYS_LOB_P
n
およびSYS_IL_P
n
の形式をとります。
subpartition_template
でサブパーティション名を指定すると、そのテンプレートで作成される各サブパーティションに対して、パーティション名とテンプレートのサブパーティション名を連結して名前が生成されます。LOBサブパーティションの場合、生成されるLOBサブパーティション名は、パーティション名とテンプレートのLOBセグメント名の連結です。どちらの場合も、連結の結果が30文字を超える場合は、エラーが戻されて文は失敗します。
subpartition_template
を指定していない場合、SYS_SUBP
n
という形式で名前が生成されます。LOBデータおよび索引サブパーティションに対する、対応するシステム生成名は、それぞれSYS_LOB_SUBP
n
およびSYS_IL_SUBP
n
です。
CREATE
TABLE
文で、表セグメントとLOBセグメントの両方に対して様々なレベルで指定できます。表領域数は、パーティション数またはサブパーティション数と同じである必要はありません。パーティション数またはサブパーティション数が表領域数より多い場合は、表領域名が繰り返し使用されます。データベースでは、表領域の記憶域を、次の順序で(優先度の高いものから順に)評価します。
すべてのパーティション化には、次の制限事項があります。
ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
range_partitions
句を使用すると、列リストの値の範囲で表をパーティション化できます。索引構成表の場合、列リストは表の主キー列のサブセットである必要があります。
行がどのパーティションに属するかを判断するために使用される、列の順序リストを指定します。これらの列は、パーティション化キーです。仮想列をパーティション化キー列として指定できます。
列リスト内の列には、ROWID
、LONG
、LOB
、XMLType
またはTIMESTAMP
WITH
TIME
ZONE
以外の組込みデータ型を指定できます。ただし、TIMESTAMP
型またはTIMESTAMP
WITH
LOCAL
TIME
ZONE
の列は、パーティション化キーで使用できます。
この句を使用すると、表の時間隔パーティションを設定できます。時間隔パーティションは、数値範囲または日時期間に基づくパーティションです。表に挿入されたデータがすべてのレンジ・パーティションを超える場合に、指定されたレンジまたは期間のパーティションを自動的に作成することをデータベースに指定することによって、レンジ・パーティション化を拡張します。
expr
には、有効な数値または期間式を指定します。
STORE
IN
句を使用して、時間隔パーティション・データが格納される1つ以上の表領域を指定できます。
range_partitions
のPARTITION
句を使用して、1つ以上のレンジ・パーティションを指定する必要があります。レンジ・パーティション・キー値によって、レンジ・パーティションの上限が決まります。これは遷移ポイントと呼ばれ、その遷移ポイントを超えるデータに対して時間隔パーティションが作成されます。
INTERVAL
句には、次の制限事項があります。
NUMBER
型またはDATE
型である必要があります。
VALUES
句の場合:
パーティション名を指定する際、partition
の名前は、スキーマ・オブジェクトのネーミング規則および「スキーマ・オブジェクトのネーミング規則」にある該当部分の記述に従って指定する必要があります。partition
を省略すると、「一般的なパーティション化の注意事項:」で説明されているように名前が生成されます。
現行パーティションの上限(境界は含まない)を指定します。値リストは、range_partitioning
句の列リストに対応するリテラル値を含む順序リストです。値リスト内のリテラルのかわりに、キーワードMAXVALUE
を使用できます。MAXVALUE
には、常に他の値(NULLを含む)より高位にソートされる最大値を指定します。
パーティション境界の上限にMAXVALUE
以外の値を指定した場合、表に暗黙の整合性制約が課せられます。
table_partition_description
を使用すると、表の物理特性および記憶特性を定義できます。
segment_attributes_clause
句およびtable_compression
句の機能は、表全体のtable_propertiesと同じです。
key_compression
句およびOVERFLOW
句の機能は、index_org_table_clauseと同じです。
LOB_storage_clause
を使用すると、このパーティションまたはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のLOB項目に対してLOB記憶特性を指定できます。LOB項目にLOB_storage_clause
を指定しない場合、「一般的なパーティション化の注意事項:」で説明されているように、各LOBデータ・パーティションに対する名前が生成されます。
varray_col_properties
を使用すると、このパーティションまたはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のVARRAY項目に対して記憶特性を指定できます。
partitioning_storage_clause
を使用すると、ハッシュ・パーティションおよびレンジ、ハッシュおよびリスト・サブパーティションの記憶特性を指定できます。
この句には、次の制限事項があります。
OVERFLOW
句は、索引構成パーティション表にのみ関連し、individual_hash_partitions
句でのみ有効です。レンジまたはハッシュ・パーティションまたは任意のタイプのサブパーティションには有効ではありません。
key_compression
は、索引構成表のパーティションにのみ指定できます。
hash_partitions
句を使用すると、表がハッシュ方式でパーティション化されるように指定できます。列の値にパーティション化キーとして指定されたハッシュ・ファンクションを使用して、行がパーティションに割り当てられます。個々のハッシュ・パーティションを指定するか、または作成されるサブパーティションの数を指定できます。
行がどのパーティションに属するかを判断するために使用される、列の順序リストを指定します(パーティション化キー)。
この句を使用すると、個々のパーティションを名前で指定できます。
partitioning_storage_clause
でサブパーティションに対して指定できる句は、TABLESPACE
句および表の圧縮のみです。
個々のパーティションを定義するかわりに、ハッシュ・パーティションの数を指定します。この場合、SYS_P
n
の形式でパーティション名が割り当てられます。STORE
IN
句を使用すると、ハッシュ・パーティション・データが格納される1つ以上の表領域を指定できます。表領域の数とパーティションの数が同じである必要はありません。パーティション数が表領域数より多い場合は、表領域名が繰り返し使用されます。
ハッシュ・パーティション化の両方の方法でロード・バランシングを最適化するには、2の累乗のパーティション数を指定します。個々のハッシュ・パーティションを指定する際は、partitioning_storage_clause
にTABLESPACE
と表の圧縮の両方を指定できます。ハッシュ・パーティションを数で指定する場合は、TABLESPACE
のみを指定できます。ハッシュ・パーティションは、その他のすべての属性を表レベルのデフォルトから継承します。
table_compression
句の機能は、表のtable_propertiesについて説明されている機能と、ほぼ同じです。
key_compression
句およびOVERFLOW
句の機能は、index_org_table_clauseと同じです。
表レベルで指定された表領域の記憶域は、パーティション・レベルで指定された表領域の記憶域で上書きされ、パーティション・レベルで指定された表領域の記憶域は、サブパーティション・レベルで指定された表領域の記憶域で上書きされます。
individual_hash_partitions
句に含まれるpartitioning_storage_clause
のTABLESPACE
句は、作成される個々のパーティションのみについて、表領域の記憶域を決定します。hash_partitions_by_quantity
句では、STORE
IN
句によって、表の作成時のパーティションの位置と、後から追加されるパーティションのデフォルトの格納場所が決定されます。
ハッシュ・パーティション化には、次の制限事項があります。
ROWID
またはUROWID
疑似列を含めることはできません。
ROWID
、LONG
またはLOB以外の組込みデータ型を指定できます。
list_partitions
句を使用すると、column
のリテラル値のリストで表をパーティション化できます。リスト・パーティション化は、個々の行が固有のパーティションにマップする方法に関する制御に便利です。
各パーティションのlist_values_clause
では、1つ以上の値を割り当てる必要があります。複数のパーティションに同じ値(NULL
を含む)を割り当てることはできません。リスト・パーティションは、順序付けされていません。
VALUES
句のパーティション値にリテラルNULL
を指定した場合、後続の問合せで、そのパーティション内のデータにアクセスするには、WHERE
句で、比較条件ではなくIS
NULL
条件を使用する必要があります。
DEFAULT
キーワードを指定すると、行の挿入先となるパーティションが作成されます。この行は、別のパーティションにはマップされません。このため、DEFAULT
を指定できるのは1つのパーティションのみです。そのパーティションに対して、その他の値を指定することはできません。また、デフォルト・パーティションは、パーティションの中で最後に定義する必要があります。DEFAULT
は、レンジ・パーティションでMAXVALUE
を使用する場合と同様に使用します。
各パーティションの値のリストを構成する文字列は、最大4KBです。すべてのパーティションの値の総数を、64K-1以下に指定します。
table_partition_description
の副次句の動作は、「table_partition_description」のレンジ・パーティションで説明した動作と同じです。
リスト・パーティション化には、「一般的なパーティション化の制限事項:」に示されている制限事項があります。
この句を使用すると、参照によって表をパーティション化できます。参照によるパーティション化は、作成される表(子表)を既存のパーティション表(親表)への参照制約によって同一レベルでパーティション化する方法です。参照によって表をパーティション化すると、その後に親表で実行されるパーティションのメンテナンス操作は子表に自動的にカスケードします。そのため、パーティションのメンテナンス操作は、参照パーティション表で直接実行できません。
パーティション化参照制約は、次の条件を満たしている必要があります。
ENABLE
VALIDATE
NOT
DEFERRABLE
状態である必要があります。これは、表の作成時に参照整合性制約を指定するときのデフォルトです。
NOT
NULL
である必要があります。
references_clause
のON
DELETE
SET
NULL
句は指定できません。
このオプションの句を使用すると、パーティション名を指定し、パーティションの物理特性および記憶特性を定義できます。table_partition_description
の副次句の動作は、「table_partition_description」のレンジ・パーティションで説明した動作と同じです。
参照パーティション化には、次の制限事項があります。
ROW
MOVEMENT
が親表に対して有効である場合、子表に対しても有効である必要があります。
CREATE
TABLE
...AS
SELECT
文で参照パーティション化は指定できません。composite_range_partitions
句を使用すると、まず、表をレンジ・パーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。
コンポジット・レンジ・パーティション化でのINTERVAL
句のセマンティクスは、レンジ・パーティション化の場合と同じです。詳細は、「INTERVAL句」を参照してください。
subpartition_by_range、subpartition_by_hashまたはsubpartition_by_listを指定すると、各コンポジット・レンジ・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションまたは後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。
表のサブパーティション化のタイプ、およびオプションでサブパーティション・テンプレートを設定した後、1つ以上のレンジ・パーティションを定義する必要があります。
range_partition_desc
で、range_subpartition_desc
、list_subpartition_desc
またはhash_subpartition_desc
を使用して、パーティションの個々のサブパーティションの特性を指定します。これらの句で指定する値は、これらのサブパーティションについて、subpartition_template
で指定した値にかわるものです。
TABLESPACE
およびtable_compression
のみです。
サブパーティション化のタイプにかかわらず、コンポジット・レンジ・パーティションには次の制限事項があります。
TABLESPACE
および表の圧縮のみです。
table_partition_description
のOVERFLOW
句は無効です。
コンポジット・レンジ・パーティション化の例は、「コンポジット・パーティション表の例:」を参照してください。コンポジット・リスト・パーティション化の例は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
参照:
composite_list_partitions
句を使用すると、まず、表をリスト・パーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。
subpartition_by_range、subpartition_by_hashまたはsubpartition_by_listを指定すると、各コンポジット・リスト・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションおよび後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。
各コンポジット・パーティションのサブパーティション化のタイプを設定し、オプションでサブパーティション・テンプレートを定義した後、1つ以上のリスト・パーティションを定義する必要があります。
list_partition_desc
で、非コンポジット・リスト・パーティションと同じ要件を持つlist_values_clauseを指定する必要があります。
list_partition_desc
で、range_subpartition_desc
、list_subpartition_desc
またはhash_subpartition_desc
を使用して、パーティションの個々のサブパーティションの特性を指定します。これらの句で指定する値は、これらのサブパーティションについて、subpartition_template
で指定した値にかわるものです。
コンポジット・リスト・パーティション化には、「コンポジット・レンジ・パーティション化の制限事項:」に示されているものと同じ制限事項があります。
subpartition_template
は、レンジ・サブパーティション化、リスト・サブパーティション化およびハッシュ・サブパーティション化のオプション要素です。このテンプレートを使用することで、表の各パーティションにデフォルトのサブパーティションを定義できます。明示的にサブパーティションを定義していないパーティションには、このデフォルト・サブパーティション特性が作成されます。この句は、対称型パーティションの作成時に有効です。パーティション・レベルでサブパーティションを明示的に定義すると(range_subpartition_desc
、list_subpartition_desc
またはhash_subpartition_desc
で指定)、この句を上書きできます。
テンプレートを使用してサブパーティションを定義する場合、各サブパーティションの名前を指定する必要があります。また、サブパーティション・テンプレートのpartitioning_storage_clause
のLOB_partitioning_clause
を指定する場合、LOB_segname
を指定する必要があります。
サブパーティションのテンプレートには、次の制限事項があります。
TABLESPACE
を指定した場合、次にそのLOB列のすべてのLOBサブパーティションに対してTABLESPACE
を指定する必要があります。複数のLOBサブパーティションに対して同じ表領域を指定できます。
subpartition_template
内で、または個々のサブパーティションを定義するときに、partitioning_storage_clause
を使用してリスト・サブパーティションに対して異なるLOB記憶域を指定した場合、LOBとVARRAY列の両方にLOB_segname
を指定する必要があります。
subpartition_by_range
句を使用すると、表の各パーティションをレンジ・サブパーティション化できます。列リストのサブパーティション化はパーティション化キーには関連しませんが、同じ制限事項が適用されます(「column」を参照)。
subpartition_template
を使用して、デフォルトのサブパーティション特性値を指定できます。「subpartition_template」を参照してください。データベースは、特性を明示的に指定していないこのパーティションの任意のサブパーティションに対して、これらの値を使用します。
range_partition_desc
またはlist_partition_desc
のrange_subpartition_desc
を使用して、各パーティションのレンジ・サブパーティションを個別に定義することもできます。subpartition_template
とrange_subpartition_desc
の両方を指定しない場合、単一のMAXVALUE
サブパーティションが作成されます。
subpartition_by_hash
句を使用すると、表の各パーティションをハッシュ・サブパーティション化できます。列リストのサブパーティション化はパーティション化キーには関連しませんが、同じ制限事項が適用されます(「column」を参照)。
subpartition_template
句またはSUBPARTITIONS
integer
句を使用すると、サブパーティションを定義できます。「subpartition_template」を参照してください。どちらの場合も、ロード・バランシングを最適化するには、2の累乗のパーティション数を指定する必要があります。
SUBPARTITIONS
integer
を指定する場合、表の各パーティションにおけるデフォルトのサブパーティション数を設定します。また、サブパーティションが格納される1つ以上の表領域を指定することもできます。デフォルト値は1です。この句とsubpartition_template
の両方を指定しない場合、1つのハッシュ・サブパーティションを持つパーティションが作成されます。
subpartition_by_list
句を使用すると、表の各パーティションを列のリテラル値に基づいてサブパーティション化できます。リスト・サブパーティション化キー列を1つのみ指定できます。
subpartition_template
を使用して、デフォルトのサブパーティション特性値を指定できます。「subpartition_template」を参照してください。データベースは、特性を明示的に指定していないこのパーティションの任意のサブパーティションに対して、これらの値を使用します。
range_partition_desc
またはlist_partition_desc
のlist_subpartition_desc
を使用して、各パーティションのリスト・サブパーティションを個別に定義することもできます。subpartition_template
とlist_subpartition_desc
の両方を指定しない場合、単一のDEFAULT
サブパーティションが作成されます。
リスト・サブパーティション化には、「コンポジット・レンジ・パーティション化の制限事項:」に示されているものと同じ制限事項があります。
コンポジット・パーティションには、次の注意事項があります。
range_subpartition_spec
、list_subpartition_spec
、individual_hash_subparts
またはhash_subparts_by_quantity
を使用して、個々のサブパーティション名およびオプションでその他の特性を指定できます。
この句を使用すると、システム・パーティションを作成できます。システム・パーティション化には、パーティション化キー列もは必要ありません。またシステム・パーティションには、レンジまたはリスト境界またはハッシュ・アルゴリズムはありません。システム・パーティションは、パーティション化された実表を持つネストした表やドメイン索引記憶表などの依存表を同一レベルでパーティション化する方法です。
PARTITION
BY
SYSTEM
のみを指定すると、SYS_P
n
という形式のシステム生成の名前で1つのパーティションが作成されます。
PARTITION
BY
SYSTEM
PARTITIONS
integer
を指定すると、integer
で指定した数(1から1024K-1の範囲)のパーティションが作成されます。
reference_partition_desc
を共有します。reference_partition_desc
構文で、その他のパーティション属性を指定できます。ただし、table_partition_description
で、OVERFLOW
句は指定できません。
システム・パーティション化には、次の制限事項があります。
CREATE
TABLE
...AS
SELECT
文でシステム・パーティション化は指定できません。
INSERT
INTO
... AS
subquery
文を使用してシステム・パーティション表にデータを挿入するには、拡張パーティション構文を使用して、副問合せによって戻された値が挿入されるパーティションを指定する必要があります。CACHE
句を使用すると、バッファ・キャッシュ内でのブロックの格納方法を指定できます。次に、CACHE
またはNOCACHE
も指定しない場合の例を示します。
この句は、アクセス頻度の高いデータについて、全表スキャンの実行時に、この表のために取り出されたブロックを、バッファ・キャッシュ内の最低使用頻度(LRU)リストの最高使用頻度側に置く場合に指定します。この属性は、小規模な参照表で有効です。
LOB_storage_clause
のパラメータとしてCACHE
を使用すると、より高速なアクセスのために、LOBデータ値がバッファ・キャッシュに配置されます。このパラメータは、logging_clause
と組み合せて評価されます。この句を指定しない場合、BasicFile LOBとSecureFile LOBの両方のデフォルト値は、NOCACHE
LOGGING
です。
CACHE
は、索引構成表に対して指定できません。ただし、索引構成表は暗黙的にCACHE
動作を提供します。
アクセス頻度の低いデータについて、NOCACHEを指定すると、全表スキャンの実行時にこの表用に取り出されたブロックは、バッファ・キャッシュ内のLRUリストの最低使用頻度側に置かれます。NOCACHE
は、LOB記憶域のデフォルトです。
LOB_storage_clause
のパラメータとしてNOCACHE
を使用すると、LOB値はバッファ・キャッシュに入りませんNOCACHE
は、LOB記憶域のデフォルトです。
NOCACHE
は、索引構成表に対して指定できません。
CACHE
READS
はLOB記憶域にのみ適用されます。LOB値が書込み操作中ではなく読取り操作中にバッファ・キャッシュに入れられることを指定します。
この句を使用すると、データ・ブロックの記憶域を記録するかどうかを指定できます。
parallel_clause
を使用すると、表をパラレル作成した後、問合せおよびDMLのINSERT
、UPDATE
、DELETE
およびMERGE
に対するデフォルトの並列度を設定できます。
NOPARALLEL
を指定すると、シリアル実行が行われます。これはデフォルトです。
PARALLEL
を指定すると、並列度を選択できます。並列度は、すべての関係するインスタンスで使用可能なCPUの数に、初期化パラメータPARALLEL_THREADS_PER_CPU
の値を掛けたものです。
integer
には、パラレル操作で使用するパラレル・スレッド数である並列度を指定します。各パラレル・スレッドは、1、2個のパラレル実行サーバーを使用します。通常、最適な並列度が計算されるため、integer
に値を指定する必要はありません。
表が行レベル依存の追跡を使用するかどうかを指定できます。この機能を使用すると、表の各行は、行を変更した最後のトランザクションのコミット時刻以降を示すシステム変更番号(SCN)を持つことになります。この設定は、表の作成後に変更できません。
ROWDEPENDENCIES
を指定すると、行レベル依存の追跡を有効にできます。この設定は、主にレプリケーション環境でパラレル伝播を許可する場合に便利です。各行につきサイズが6バイト増えます。
NOROWDEPENDENCIES
を指定すると、行レベル依存の追跡機能を無効にできます。これはデフォルトです。
enable_disable_clause
を使用すると、制約が適用されるかどうかを指定できます。デフォルトでは、制約はENABLE
VALIDATE
状態で作成されます。
制約を使用可能および使用禁止にする処理には、次の制限事項があります。
using_index_clause
のindex_properties
句で、INDEXTYPE
IS
...句は制約の定義において有効ではありません。この句を使用すると、表のデータに制約を適用できます。この句の詳細は、制約に関する項目の「ENABLE句」を参照してください。
この句を使用すると、整合性制約を使用禁止にできます。この句の詳細は、制約に関する項目の「DISABLE句」を参照してください。
UNIQUE
句を使用すると、指定された列または列の組合せに定義された一意制約を使用可能または使用禁止にできます。
PRIMARY
KEY
句を使用すると、表に対して定義された主キー制約を使用可能または使用禁止にできます。
CONSTRAINT
句を使用すると、constraint
に指定する整合性制約を使用可能または使用禁止にできます。
この句を使用すると、一意キー制約または主キー制約を適用するために使用される索引を保持するかまたは削除するかを指定できます。
一意キー制約または主キー制約が使用禁止の場合にのみ、この句を指定できます。
using_index_clause
を使用すると、一意キー制約または主キー制約を適用するために使用される索引を指定または作成することができます。この句の詳細は、制約に関する項目の「using_index_clause」を参照してください。
参照:
|
CASCADE
を指定すると、指定した整合性制約に依存する整合性制約を使用禁止にできます。参照整合性制約を構成する主キーまたは一意キーを使用禁止にする場合、この句を指定します。
DISABLE
を指定した場合のみ、CASCADE
を指定できます。
row_movement_clause
を使用すると、表の行が移動されるかどうかを指定できます。表の圧縮時や、パーティション・データの更新操作時などに、行を移動できます。
この句を省略すると、行移動は使用禁止になります。
この句は、非パーティション索引構成表に対して指定できません。
この句を指定するには、指定されたフラッシュバック・データ・アーカイブに対するFLASHBACK
ARCHIVE
オブジェクト権限が必要です。この句を使用すると、表の履歴追跡を有効または無効にできます。
FLASHBACK
ARCHIVE
を指定します。flashback_archive
を指定すると、この表に特定のフラッシュバック・データ・アーカイブを指定できます。指定するフラッシュバック・データ・アーカイブは、すでに存在している必要があります。flashback_archive
を省略すると、システムに対して指定されているデフォルトのフラッシュバック・データ・アーカイブが使用されます。システムにデフォルトのフラッシュバック・データ・アーカイブが指定されていない場合は、flashback_archive
を指定する必要があります。
NO
FLASHBACK
ARCHIVE
を指定します。これはデフォルトです。
フラッシュバック・データ・アーカイブには、次の制限事項があります。
LONG
列またはネストした表の列を含めることはできません。
参照:
副問合せを指定して表の内容を定義します。表の作成時に、副問合せの結果として戻された行を表の中に挿入します。
オブジェクト表の場合、subquery
には表の型に対応する1つの式、または表の型の最上位属性の数のどちらかを設定できます。詳細は、「SELECT」を参照してください。
subquery
が、既存のマテリアライズド・ビューと部分的または完全に同じビューを戻す場合、subquery
に指定された1つ以上の表のかわりにマテリアライズド・ビューがクエリー・リライトに使用されることがあります。
データ型およびデータ長は、副問合せから導出されます。整合性制約や、その他の列および表の属性には次の規則が適用されます。
NOT
NULL
制約が明示的に作成されていると、新しい表の対応する列にもNOT
NULL
制約が自動的に定義されます。制約に違反する行がある場合、表は作成されずエラーが戻されます。
NOT
NULL
制約(たとえば、主キー)は、新しい表には引き継がれません。
AS
subquery
句の前に、CREATE
TABLE
文の一部として、必要なパーティション化を指定します。
subquery
内のすべての式が、式ではなく列の場合、表定義から列を完全に省略できます。この場合、表の列名はsubquery
の列の名前と同じになります。
TO_LOB
ファンクションと組み合せてsubquery
を使用すると、別の表のLONG
列の値を、作成する表の列のLOB値に変換できます。
参照:
|
この文でparallel_clause
を指定した場合、INITIAL
記憶域パラメータに対して指定する値は無視され、かわりにNEXT
パラメータの値が使用されます。
ORDER
BY
句を使用すると、副問合せによって戻される行の順序付けを行うことができます。
この句をCREATE
TABLE
で指定した場合、この句が表全体にわたるデータを順序付けるとはかぎりません。たとえば、パーティション間での順序付けは行われません。同じキーの索引をORDER
BY
キー列として作成する場合に、この句を指定します。Oracle Databaseは、ORDER
BY
キーのデータをクラスタ化し、索引キーに対応させます。
表問合せには、次の制限事項があります。
AS
subquery
を含むCREATE
TABLE
文には、外部キー制約を定義できません。そのかわりに、制約を指定せずに表を作成し、後でALTER
TABLE
文を使用してその制約を追加できます。
OF
句を使用すると、明示的にobject_type
型のオブジェクト表を作成できます。オブジェクト表の各列は、object_type
型の最上位の属性に対応します。各行には、オブジェクト・インスタンスが入り、また各インスタンスには、行の挿入時に一意のシステム生成オブジェクト識別子が割り当てられます。schema
を省略した場合、自分のスキーマ内にオブジェクト表が作成されます。
オブジェクト表、XMLType
表、オブジェクト・ビューおよびXMLType
ビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_ID
が定義されます。問合せでこの列名を使用し、WITH
OBJECT
IDENTIFIER
句を指定して、オブジェクト・ビューを作成できます。
object_table_substitution
句を使用すると、サブタイプに対応する行オブジェクトの、このオブジェクト表への挿入を許可するかどうかを指定できます。
NOT
SUBSTITUTABLE
AT
ALL
LEVELS
を指定すると、作成するオブジェクト表は置換できなくなります。また、置換は、すべての埋込みオブジェクト属性および埋込みのネストした表と配列の要素には使用禁止です。デフォルトは、SUBSTITUTABLE
AT
ALL
LEVELS
です。
参照:
|
オブジェクト表のプロパティは、基本的にリレーショナル表と同じです。ただし、列を指定するかわりに、オブジェクトの属性を指定します。
attribute
には、オブジェクト内の項目の修飾した列名を指定します。
oid_clause
を使用すると、オブジェクト表のオブジェクト識別子がシステム生成されるか、表の主キーを基に作成されるかを指定できます。デフォルトはSYSTEM
GENERATED
です。
この句には、次の制限事項があります。
この句は、oid_clause
をSYSTEM
GENERATED
として指定している場合のみに適用されます。非表示のオブジェクト識別子列に索引を指定します。また、任意に記憶特性を指定します。
index
には、非表示のシステム生成オブジェクト識別子列の索引の名前を指定します。index
を省略すると、名前が生成されます。
これらの句のセマンティクスについては、リレーショナル表の対応する項を参照してください。「physical_properties」および「table_properties」を参照してください。
XMLType_table
構文を使用すると、XMLType
データ型の表を作成できます。XMLType
表の作成に使用されるほとんどの句のセマンティクスは、オブジェクト表のセマンティクスと同じです。この項では、XMLType
表固有の句について説明します。
オブジェクト表、XMLType
表、オブジェクト・ビューおよびXMLType
ビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_ID
が定義されます。問合せでこの列名を使用し、WITH
OBJECT
IDENTIFIER
句を指定して、オブジェクト・ビューを作成できます。
この句は、バイナリXML記憶域のXMLType
表に対してのみ有効です。この記憶域は、XMLType_storage_clause
で指定します。VIRTUAL
COLUMNS
句を指定して、仮想列を定義します。仮想列は、ファンクション索引または制約の定義で使用できます。そのような仮想列には表の作成時には制約を定義できませんが、その後、ALTER
TABLE
文を使用して制約を列に追加できます。
この句を使用すると、単一の登録済XMLSchemaまたは複数のスキーマ(XMLSCHEMA
句で登録するかELEMENT
句の一部として登録)のURLおよびXML要素名を指定できます。BINARY
XML
記憶域を指定した場合のみ複数のスキーマを使用できます。
XMLSchemaのURLは省略可能ですが、要素は必ず指定します。XMLSchemaのURLを指定する場合は、DBMS_XMLSCHEMA
パッケージを使用してXMLSchemaをあらかじめ登録しておく必要があります。
オプションのALLOW
| DISALLOW
句は、BINARY
XML
記憶域を指定した場合にのみ有効です。
ALLOW
ANYSCHEMA
を指定すると、スキーマ・ベースの任意のドキュメントをXMLType列に格納できます。
ALLOW
NONSCHEMA
を指定すると、スキーマ・ベース以外のドキュメントをXMLType列に格納できます。
DISALLOW
NONSCHEMA
を指定すると、スキーマ・ベース以外のドキュメントはXMLType列に格納できません。
参照:
DBMS_XMLSCHEMA
パッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
次の文は、人事情報のサンプル・スキーマ(hr
)が所有するemployees
表を定義します。テスト・データベースでこの例を使用できるように、表および制約には不確定な名前が指定されています。
CREATE TABLE employees_demo ( employee_id NUMBER(6) , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn_demo NOT NULL , email VARCHAR2(25) CONSTRAINT emp_email_nn_demo NOT NULL , phone_number VARCHAR2(20) , hire_date DATE DEFAULT SYSDATE CONSTRAINT emp_hire_date_nn_demo NOT NULL , job_id VARCHAR2(10) CONSTRAINT emp_job_nn_demo NOT NULL , salary NUMBER(8,2) CONSTRAINT emp_salary_nn_demo NOT NULL , commission_pct NUMBER(2,2) , manager_id NUMBER(6) , department_id NUMBER(4) , dn VARCHAR2(300) , CONSTRAINT emp_salary_min_demo CHECK (salary > 0) , CONSTRAINT emp_email_uk_demo UNIQUE (email) ) ;
この表は12列で構成されます。employee_id
列は、NUMBER
データ型です。hire_date
列は、データ型がDATE
、デフォルト値がSYSDATE
です。last_name
列は、VARCHAR2
型で、NOT
NULL
制約があります。他の列については省略します。
次の文は、記憶域の容量が小さく、割当てに制限のあるexample
表領域の中にサンプル表employees_demo
を定義します。
CREATE TABLE employees_demo ( employee_id NUMBER(6) , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn_demo NOT NULL , email VARCHAR2(25) CONSTRAINT emp_email_nn_demo NOT NULL , phone_number VARCHAR2(20) , hire_date DATE DEFAULT SYSDATE CONSTRAINT emp_hire_date_nn_demo NOT NULL , job_id VARCHAR2(10) CONSTRAINT emp_job_nn_demo NOT NULL , salary NUMBER(8,2) CONSTRAINT emp_salary_nn_demo NOT NULL , commission_pct NUMBER(2,2) , manager_id NUMBER(6) , department_id NUMBER(4) , dn VARCHAR2(300) , CONSTRAINT emp_salary_min_demo CHECK (salary > 0) , CONSTRAINT emp_email_uk_demo UNIQUE (email) ) TABLESPACE example STORAGE (INITIAL 6144 NEXT 6144 MINEXTENTS 1 MAXEXTENTS 5 );
次の文は、販売員が使用するサンプル・データベースの一時表today_sales
を作成します。各販売員のセッションは、自身のその日の販売データを表に格納します。一時的なデータは、セッションの終わりに削除されます。
CREATE GLOBAL TEMPORARY TABLE today_sales ON COMMIT PRESERVE ROWS AS SELECT * FROM orders WHERE order_date = SYSDATE;
次の文は、置換可能な表を作成するために使用可能な型の階層を作成します。employee_t
型は、person_t
型からname
およびssn
属性を継承し、department_id
およびsalary
属性を追加しています。part_time_emp_t
型は、employee_t
および(employee_t
を介して)person_t
からすべての属性を継承し、num_hrs
属性を追加しています。part_time_emp_t
はデフォルトで最終型であるため、そのサブタイプを作成できません。
CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn NUMBER) NOT FINAL; / CREATE TYPE employee_t UNDER person_t (department_id NUMBER, salary NUMBER) NOT FINAL; / CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs NUMBER); /
次の文は、person_t
型から置換可能な表を作成します。
CREATE TABLE persons OF person_t;
次の文は、person_t
型の置換可能な列で表を作成します。
CREATE TABLE books (title VARCHAR2(100), author person_t);
persons
またはbooks
に挿入するときに、person_t
またはそのサブタイプの属性に対する値を指定できます。挿入文の例は、「置換可能な表および列への挿入例:」を参照してください。
組込みファンクションおよび条件を使用して、このような表からデータを抽出することができます。その例は、「TREAT」、「SYS_TYPEID」および「IS OF type条件」を参照してください。
次の文は、最適な数のパラレル実行サーバーを使用する表を作成して、employees
をスキャンし、dept_80
に移入します。
CREATE TABLE dept_80 PARALLEL AS SELECT * FROM employees WHERE department_id = 80;
パラレル化を使用することによって、表を作成するためにパラレル実行サーバーが使用されるため、表作成が高速化されます。表が作成された後、表へのアクセスに表作成と同じ並列度が使用されるため、表の問合せも高速化します。
次の文は、同じ表をシリアルで作成します。後続のDMLおよび表の問合せもシリアルで実行されます。
CREATE TABLE dept_80 AS SELECT * FROM employees WHERE department_id = 80;
次の文は、サンプル表departments_demo
を作成します。この例では、NOT
NULL
制約が定義され、ENABLE
VALIDATE
状態に置かれます。テスト・データベースでこの例を使用できるように、表には不確定な名前が指定されています。
CREATE TABLE departments_demo ( department_id NUMBER(4) , department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL , manager_id NUMBER(6) , location_id NUMBER(4) , dn VARCHAR2(300) ) ;
次の文は、同じdepartments_demo
表を作成しますが、使用禁止の主キー制約も定義します。
CREATE TABLE departments_demo ( department_id NUMBER(4) PRIMARY KEY DISABLE , department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL , manager_id NUMBER(6) , location_id NUMBER(4) , dn VARCHAR2(300) ) ;
次の文は、ネストした表の列ad_textdocs_ntab
を使用してサンプル表pm.print_media
を作成します。
CREATE TABLE print_media ( product_id NUMBER(6) , ad_id NUMBER(6) , ad_composite BLOB , ad_sourcetext CLOB , ad_finaltext CLOB , ad_fltextn NCLOB , ad_textdocs_ntab textdoc_tab , ad_photo BLOB , ad_graphic BFILE , ad_header adheader_typ ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab;
次の例では、アカウント・マネージャが2つのレベルのネストした表を使用して顧客の表を作成します。
CREATE TYPE phone AS OBJECT (telephone NUMBER); / CREATE TYPE phone_list AS TABLE OF phone; / CREATE TYPE my_customers AS OBJECT ( cust_name VARCHAR2(25), phones phone_list); / CREATE TYPE customer_list AS TABLE OF my_customers; / CREATE TABLE business_contacts ( company_name VARCHAR2(25), company_reps customer_list) NESTED TABLE company_reps STORE AS outer_ntab (NESTED TABLE phones STORE AS inner_ntab);
前述の例を次のように使用した場合、内部のネストした表に列または属性名がない場合にCOLUMN_VALUE
キーワードが使用されます。
CREATE TYPE phone AS TABLE OF NUMBER; / CREATE TYPE phone_list AS TABLE OF phone; / CREATE TABLE my_customers ( name VARCHAR2(25), phone_numbers phone_list) NESTED TABLE phone_numbers STORE AS outer_ntab (NESTED TABLE COLUMN_VALUE STORE AS inner_ntab);
次の文は、LOB記憶特性を追加してpm.print_media
を作成します。
CREATE TABLE print_media_new ( product_id NUMBER(6) , ad_id NUMBER(6) , ad_composite BLOB , ad_sourcetext CLOB , ad_finaltext CLOB , ad_fltextn NCLOB , ad_textdocs_ntab textdoc_tab , ad_photo BLOB , ad_graphic BFILE , ad_header adheader_typ , press_release LONG ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab_new LOB (ad_sourcetext, ad_finaltext) STORE AS (TABLESPACE example STORAGE (INITIAL 6144 NEXT 6144) CHUNK 4000 NOCACHE LOGGING);
この例では、CHUNK
の値を4096(2048のブロック・サイズの近似倍数)まで切り上げます。
次の文は、索引を構成したサンプル表hr.countries
を作成します。
CREATE TABLE countries_demo ( country_id CHAR(2) CONSTRAINT country_id_nn_demo NOT NULL , country_name VARCHAR2(40) , currency_name VARCHAR2(25) , currency_symbol VARCHAR2(3) , region VARCHAR2(15) , CONSTRAINT country_c_id_pk_demo PRIMARY KEY (country_id ) ) ORGANIZATION INDEX INCLUDING country_name PCTTHRESHOLD 2 STORAGE ( INITIAL 4K NEXT 2K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 1 ) OVERFLOW STORAGE ( INITIAL 4K NEXT 2K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 1 );
次の文は、サンプル表hr.departments
のサブセットを示す外部表を作成します。opaque_format_spec
はイタリック体で示しています。ORACLE_LOADER
アクセス・ドライバの詳細およびopaque_format_spec
への値の指定方法については、『Oracle Databaseユーティリティ』を参照してください。
CREATE TABLE dept_external ( deptno NUMBER(6), dname VARCHAR2(20), loc VARCHAR2(25) ) ORGANIZATION EXTERNAL (TYPE oracle_loader DEFAULT DIRECTORY admin ACCESS PARAMETERS (RECORDS DELIMITED BY newline
BADFILE 'ulcase1.bad'
DISCARDFILE 'ulcase1.dis'
LOGFILE 'ulcase1.log'
SKIP 20
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(
deptno INTEGER EXTERNAL(6),
dname CHAR(20),
loc CHAR(25)
) ) LOCATION ('ulcase1.ctl') ) REJECT LIMIT UNLIMITED;
この項では、XMLType
表またはXMLType
列の作成例について説明します。この例の詳細は、「SQL文でのXMLの使用方法」を参照してください。
次の例は、暗黙的にCLOB
列を1列のみ持つ非常に単純なXMLType
表を作成します。
CREATE TABLE xwarehouses OF XMLTYPE;
データは暗黙的にCLOB
列に格納されるため、LOB列に対するすべての制限事項が適用されます。これらの制限事項を回避するには、次の例で示すとおりXMLSchemaベースの表を作成します。XMLSchemaは事前に作成しておく必要があります(詳細は、「SQL文でのXMLの使用方法」を参照してください)。
CREATE TABLE xwarehouses OF XMLTYPE XMLSCHEMA "http://www.example.com/xwarehouses.xsd" ELEMENT "Warehouse";
XMLSchemaベースの表に制約を定義したり、索引を作成できるため、後続の問合せのパフォーマンスが大幅に向上します。XMLType
表にオブジェクト・リレーショナル・ビューを作成することも、オブジェクト・リレーショナル表にXMLType
ビューを作成することもできます。
参照:
|
次の文は、XMLType
列を持つ表を作成し、CLOB
として格納します。この表ではXMLSchemaが必要ないため、コンテンツ構造は事前に定義しません。
CREATE TABLE xwarehouses ( warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE warehouse_spec STORE AS CLOB (TABLESPACE example STORAGE (INITIAL 6144 NEXT 6144) CHUNK 4000 NOCACHE LOGGING);
次の例は、同様の表を作成しますが、オブジェクト・リレーショナルXMLType
列にXMLType
データを格納します。この列の構造は、指定したスキーマによって判断されます。
CREATE TABLE xwarehouses ( warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE warehouse_spec STORE AS OBJECT RELATIONAL XMLSCHEMA "http://www.example.com/xwarehouses.xsd" ELEMENT "Warehouse";
次の例は、SecureFile CLOB
として格納されたXMLType
列を持つ別の同様の表を作成します。この表ではXMLSchemaが必要ないため、コンテンツ構造は事前に定義しません。SecureFile LOBには自動セグメント領域管理が行われる表領域が必要であるため、この例は「表領域に対してセグメント領域管理を指定する場合の例:」で作成される表領域を使用します。
CREATE TABLE xwarehouses ( warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE warehouse_spec STORE AS SECUREFILE CLOB (TABLESPACE auto_seg_ts STORAGE (INITIAL 6144 NEXT 6144) CACHE);
サンプル・スキーマsh
のsales
表は、レンジでパーティション化されています。次の例では、簡略化したsales
表を作成します。この例では、制約および記憶域要素は省略されています。
CREATE TABLE range_sales ( prod_id NUMBER(6) , cust_id NUMBER , time_id DATE , channel_id CHAR(1) , promo_id NUMBER(6) , quantity_sold NUMBER(3) , amount_sold NUMBER(10,2) ) PARTITION BY RANGE (time_id) (PARTITION SALES_Q1_1998 VALUES LESS THAN (TO_DATE('01-APR-1998','DD-MON-YYYY')), PARTITION SALES_Q2_1998 VALUES LESS THAN (TO_DATE('01-JUL-1998','DD-MON-YYYY')), PARTITION SALES_Q3_1998 VALUES LESS THAN (TO_DATE('01-OCT-1998','DD-MON-YYYY')), PARTITION SALES_Q4_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')), PARTITION SALES_Q1_1999 VALUES LESS THAN (TO_DATE('01-APR-1999','DD-MON-YYYY')), PARTITION SALES_Q2_1999 VALUES LESS THAN (TO_DATE('01-JUL-1999','DD-MON-YYYY')), PARTITION SALES_Q3_1999 VALUES LESS THAN (TO_DATE('01-OCT-1999','DD-MON-YYYY')), PARTITION SALES_Q4_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')), PARTITION SALES_Q1_2000 VALUES LESS THAN (TO_DATE('01-APR-2000','DD-MON-YYYY')), PARTITION SALES_Q2_2000 VALUES LESS THAN (TO_DATE('01-JUL-2000','DD-MON-YYYY')), PARTITION SALES_Q3_2000 VALUES LESS THAN (TO_DATE('01-OCT-2000','DD-MON-YYYY')), PARTITION SALES_Q4_2000 VALUES LESS THAN (MAXVALUE)) ;
パーティション表のメンテナンス操作については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
次の例は、credit_limit
列の期間によってパーティション化されるoe.customers
表を作成します。遷移ポイントを設定するために1つのレンジ・パーティションが作成されます。表内の元のデータはすべてレンジ・パーティションの境界内にあります。次に、レンジ・パーティションを超えるデータが追加され、新しい時間隔パーティションが作成されます。
CREATE TABLE customers_demo ( customer_id number(6), cust_first_name varchar2(20), cust_last_name varchar2(20), credit_limit number(9,2)) PARTITION BY RANGE (credit_limit) INTERVAL (1000) (PARTITION p1 VALUES LESS THAN (5001)); INSERT INTO customers_demo (customer_id, cust_first_name, cust_last_name, credit_limit) (select customer_id, cust_first_name, cust_last_name, credit_limit from customers);
USER_TAB_PARTITIONS
データ・ディクショナリ・ビューを問い合せてから、時間隔パーティションが作成されます。
SELECT partition_name, high_value FROM user_tab_partitions WHERE table_name = 'CUSTOMERS_DEMO'; PARTITION_NAME HIGH_VALUE ------------------------------ --------------- P1 5001
レンジ・パーティションの上限を超えるデータを表に挿入します。
INSERT INTO customers_demo VALUES (699, 'Fred', 'Flintstone', 5500);
挿入後にUSER_TAB_PARTITIONS
ビューを再度問い合せ、挿入されたデータを格納するために作成された時間隔パーティションのシステム生成名を確認します。(システム生成名はセッションごとに異なります。)
SELECT partition_name, high_value FROM user_tab_partitions WHERE table_name = 'CUSTOMERS_DEMO' ORDER BY partition_name; PARTITION_NAME HIGH_VALUE ------------------------------ --------------- P1 5001 SYS_P44 6001
次の文は、サンプル表oe.customers
をリスト・パーティション表として作成します。この例では、サンプル表の一部の列およびすべての制約は省略されています。
CREATE TABLE list_customers ( customer_id NUMBER(6) , cust_first_name VARCHAR2(20) , cust_last_name VARCHAR2(20) , cust_address CUST_ADDRESS_TYP , nls_territory VARCHAR2(30) , cust_email VARCHAR2(30)) PARTITION BY LIST (nls_territory) ( PARTITION asia VALUES ('CHINA', 'THAILAND'), PARTITION europe VALUES ('GERMANY', 'ITALY', 'SWITZERLAND'), PARTITION west VALUES ('AMERICA'), PARTITION east VALUES ('INDIA'), PARTITION rest VALUES (DEFAULT));
次の文は、2つのパーティションp1
とp2
、およびいくつかのLOB列を持つパーティション表print_media_demo
を作成します。この文では、サンプル表pm.print_media
を使用しますが、LONG
列はパーティション化でサポートされないため、LONG
列のpress_release
は省略します。
CREATE TABLE print_media_demo ( product_id NUMBER(6) , ad_id NUMBER(6) , ad_composite BLOB , ad_sourcetext CLOB , ad_finaltext CLOB , ad_fltextn NCLOB , ad_textdocs_ntab textdoc_tab , ad_photo BLOB , ad_graphic BFILE , ad_header adheader_typ ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab_demo LOB (ad_composite, ad_photo, ad_finaltext) STORE AS(STORAGE (NEXT 20M)) PARTITION BY RANGE (product_id) (PARTITION p1 VALUES LESS THAN (3000) TABLESPACE tbs_01 LOB (ad_composite, ad_photo) STORE AS (TABLESPACE tbs_02 STORAGE (INITIAL 10M)), PARTITION P2 VALUES LESS THAN (MAXVALUE) LOB (ad_composite, ad_finaltext) STORE AS SECUREFILE (TABLESPACE auto_seg_ts) ) TABLESPACE tbs_04;
パーティションp1
は、表領域tbs_1
にあります。ad_composite
およびad_photo
に対するLOBデータのパーティションは、表領域tbs_2
にあります。残りのLOB列に対するLOBデータのパーティションは、表領域tbs_1
にあります。LOB列ad_composite
およびad_photo
に、記憶域属性INITIAL
を指定します。他の属性は、デフォルトの表レベルの仕様から継承されます。表レベルで指定されていないデフォルトのLOB記憶域属性は、ad_composite
列およびad_photo
列については表領域tbs_2
から継承されます。残りのLOB列については、表領域tbs_1
から継承されます。LOB索引パーティションは、対応するLOBデータ・パーティションと同じ表領域に存在します。他の記憶域属性は、LOBデータ・パーティションの対応する属性値および索引パーティションがある表領域のデフォルト属性に基づきます。
パーティションp2
は、デフォルトの表領域tbs_4
内にあります。ad_composite
およびad_finaltext
に対するLOBデータは、表領域auto_seg_ts
内にSecureFile LOBとしてあります。残りのLOB列に対するLOBデータは、表領域tbs_4
にあります。ad_composite
列およびad_finaltext
列に対するLOB索引は、表領域auto_seg_ts
内にあります。残りのLOB列に対するLOB索引は、表領域tbs_4
にあります。
サンプル表oe.hash_product
は、パーティション化されていません。次の例は、パフォーマンス上の理由で、このような大規模な表をハッシュでパーティション化します。この例では、表領域は仮想の名前です。
CREATE TABLE hash_products ( product_id NUMBER(6) PRIMARY KEY , product_name VARCHAR2(50) , product_description VARCHAR2(2000) , category_id NUMBER(2) , weight_class NUMBER(1) , warranty_period INTERVAL YEAR TO MONTH , supplier_id NUMBER(6) , product_status VARCHAR2(20) , list_price NUMBER(8,2) , min_price NUMBER(8,2) , catalog_url VARCHAR2(50) , CONSTRAINT product_status_lov_demo CHECK (product_status in ('orderable' ,'planned' ,'under development' ,'obsolete') ) ) PARTITION BY HASH (product_id) PARTITIONS 4 STORE IN (tbs_01, tbs_02, tbs_03, tbs_04);
次の文は、前述の例で作成されたhash_products
パーティション表を使用します。hash_products
の製品IDに基づくハッシュ・パーティション化への参照によってパーティション化されたoe.order_items
表を作成します。結果の子表は、5つのパーティションで作成されます。子表part_order_items
の各行について、外部キー値(product_id
)が評価され、参照されるキーが属する親表hash_products
のパーティション番号が確認されます。part_order_items
の行は、対応するパーティションに配置されます。
CREATE TABLE part_order_items ( order_id NUMBER(12) PRIMARY KEY, line_item_id NUMBER(3), product_id NUMBER(6) NOT NULL, unit_price NUMBER(8,2), quantity NUMBER(8), CONSTRAINT product_id_fk FOREIGN KEY (product_id) REFERENCES hash_products(product_id)) PARTITION BY REFERENCE (product_id_fk);
次の例は、表(「レンジ・パーティション化の例:」で作成)のデータを販売時刻で分割します。時刻と販売チャネルに従って最近のデータにアクセスする場合、コンポジット・パーティション化は、より適切です。次の例では、同じrange_sales
表のコピーを作成しますが、レンジ-ハッシュ・コンポジット・パーティション化を指定します。最新のデータがあるパーティションは、システム生成とユーザー定義の両方のサブパーティション名でサブパーティション化されます。この例では、制約および記憶域属性は省略されています。
CREATE TABLE composite_sales ( prod_id NUMBER(6) , cust_id NUMBER , time_id DATE , channel_id CHAR(1) , promo_id NUMBER(6) , quantity_sold NUMBER(3) , amount_sold NUMBER(10,2) ) PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (channel_id) (PARTITION SALES_Q1_1998 VALUES LESS THAN (TO_DATE('01-APR-1998','DD-MON-YYYY')), PARTITION SALES_Q2_1998 VALUES LESS THAN (TO_DATE('01-JUL-1998','DD-MON-YYYY')), PARTITION SALES_Q3_1998 VALUES LESS THAN (TO_DATE('01-OCT-1998','DD-MON-YYYY')), PARTITION SALES_Q4_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')), PARTITION SALES_Q1_1999 VALUES LESS THAN (TO_DATE('01-APR-1999','DD-MON-YYYY')), PARTITION SALES_Q2_1999 VALUES LESS THAN (TO_DATE('01-JUL-1999','DD-MON-YYYY')), PARTITION SALES_Q3_1999 VALUES LESS THAN (TO_DATE('01-OCT-1999','DD-MON-YYYY')), PARTITION SALES_Q4_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')), PARTITION SALES_Q1_2000 VALUES LESS THAN (TO_DATE('01-APR-2000','DD-MON-YYYY')), PARTITION SALES_Q2_2000 VALUES LESS THAN (TO_DATE('01-JUL-2000','DD-MON-YYYY')) SUBPARTITIONS 8, PARTITION SALES_Q3_2000 VALUES LESS THAN (TO_DATE('01-OCT-2000','DD-MON-YYYY')) (SUBPARTITION ch_c, SUBPARTITION ch_i, SUBPARTITION ch_p, SUBPARTITION ch_s, SUBPARTITION ch_t), PARTITION SALES_Q4_2000 VALUES LESS THAN (MAXVALUE) SUBPARTITIONS 4) ;
次の例は、サンプル表oe.customers
に基づいて、顧客のパーティション表を作成します。この例では、表はcredit_limit
列でパーティション化され、nls_territory
列でリスト・サブパーティション化されます。個々のサブパーティションを定義してテンプレートを上書きしないかぎり、サブパーティション・テンプレートによって、後から追加されたパーティションのサブパーティション化が決定されます。このコンポジット・パーティション化によって、指定した地域内の掛貸限度範囲に基づいて、表を問い合せることができます。
CREATE TABLE customers_part ( customer_id NUMBER(6), cust_first_name VARCHAR2(20), cust_last_name VARCHAR2(20), nls_territory VARCHAR2(30), credit_limit NUMBER(9,2)) PARTITION BY RANGE (credit_limit) SUBPARTITION BY LIST (nls_territory) SUBPARTITION TEMPLATE (SUBPARTITION east VALUES ('CHINA', 'JAPAN', 'INDIA', 'THAILAND'), SUBPARTITION west VALUES ('AMERICA', 'GERMANY', 'ITALY', 'SWITZERLAND'), SUBPARTITION other VALUES (DEFAULT)) (PARTITION p1 VALUES LESS THAN (1000), PARTITION p2 VALUES LESS THAN (2500), PARTITION p3 VALUES LESS THAN (MAXVALUE));
次の文は、オブジェクト型department_typ
を指定します。
CREATE TYPE department_typ AS OBJECT ( d_name VARCHAR2(100), d_address VARCHAR2(200) ); /
オブジェクト表departments_obj_t
は、department_typ
型の部門オブジェクトを保持します。
CREATE TABLE departments_obj_t OF department_typ;
次の文は、ユーザー定義オブジェクト型salesrep_typ
を持つオブジェクト表salesreps
を作成します。
CREATE OR REPLACE TYPE salesrep_typ AS OBJECT ( repId NUMBER, repName VARCHAR2(64)); CREATE TABLE salesreps OF salesrep_typ;
次の文は、オブジェクト型およびオブジェクト識別子が主キー・ベースの対応するオブジェクト表を作成します。
CREATE TYPE employees_typ AS OBJECT (e_no NUMBER, e_address CHAR(30)); / CREATE TABLE employees_obj_t OF employees_typ (e_no PRIMARY KEY) OBJECT IDENTIFIER IS PRIMARY KEY;
その後、inline_ref_constraint
構文またはout_of_line_ref_constraint
構文のいずれかを使用して、employees_object_t
オブジェクト表を参照できます。
CREATE TABLE departments_t (d_no NUMBER, mgr_ref REF employees_typ SCOPE IS employees_obj_t); CREATE TABLE departments_t ( d_no NUMBER, mgr_ref REF employees_typ CONSTRAINT mgr_in_emp REFERENCES employees_obj_t);
次の例は、オブジェクト型の列の属性に制約を定義します。
CREATE TYPE address_t AS OBJECT ( hno NUMBER, street VARCHAR2(40), city VARCHAR2(20), zip VARCHAR2(5), phone VARCHAR2(10) ); / CREATE TYPE person AS OBJECT ( name VARCHAR2(40), dateofbirth DATE, homeaddress address_t, manager REF person ); / CREATE TABLE persons OF person ( homeaddress NOT NULL, UNIQUE (homeaddress.phone), CHECK (homeaddress.zip IS NOT NULL), CHECK (homeaddress.city <> 'San Francisco') );
CREATE
TABLESPACE
文を使用すると、表領域を作成できます。表領域とは、スキーマ・オブジェクトを格納する、データベース内に割り当てられた領域です。
表領域は、最初は読み書き両用として作成されます。その後、ALTER
TABLESPACE
文でその表領域をオフラインまたはオンラインに設定したり、表領域にデータ・ファイルや一時ファイルを追加したり、読取り専用に設定することができます。
DROP
TABLESPACE
文を使用して、データベースから表領域を削除することもできます。
参照:
|
CREATE
TABLESPACE
システム権限が必要です。SYSAUX
表領域を作成する場合は、SYSDBA
システム権限が必要です。
表領域を作成する場合、表領域を格納するデータベースを作成する必要があります。また、そのデータベースをオープンしておく必要もあります。
SYSTEM
以外の表領域のオブジェクトを使用する場合は、次の注意事項があります。
UNDO
表領域がオンラインである必要があります。
SYSTEM
ロールバック・セグメント以外の1つ以上のロールバック・セグメントがオンラインである必要があります。(permanent_tablespace_clause、temporary_tablespace_clause、undo_tablespace_clauseを参照)
(file_specification::=、size_clause::=、logging_clause::=、encryption_spec::=、table_compression::=、storage_clause::=、extent_management_clause::=、segment_management_clause::=、flashback_mode_clause::=を参照)
(size_clause::=を参照)
(file_specification::=、tablespace_group_clause、extent_management_clause::=を参照)
(file_specification::=、extent_management_clause::=、tablespace_retention_clause::=を参照)
この句を使用すると、表領域がbigfileかsmallfileかを指定できます。この句は、データベースのデフォルトの表領域タイプの設定を上書きします。
この句を省略した場合、データベースに設定された永続表領域または一時表領域の、現在のデフォルト表領域タイプが使用されます。永続表領域にBIGFILE
を指定すると、デフォルトで、自動セグメント領域管理のローカル管理表領域が作成されます。
bigfile表領域には、次の制限事項があります。
DATAFILE
句に1つのみのデータ・ファイルを指定するか、またはTEMPFILE
句に1つのみの一時ファイルを指定できます。
EXTENT
MANAGEMENT
DICTIONARY
を指定することはできません。次の句を使用すると、永続表領域を作成できます。(これらの句の一部は、一時表領域またはUNDO表領域の作成にも使用されます。)
作成する表領域の名前を指定します。
SYSAUX
は、必須の補助システム表領域です。以前のリリースからOracle Database 11g にアップグレードする場合、CREATE
TABLESPACE
文を使用してSYSAUX
表領域を作成する必要があります。この句を指定するには、SYSDBA
システム権限が必要です。また、データベースがMIGRATE
モードでオープンされている必要があります。
SYSAUX
表領域には、EXTENT
MANAGEMENT
LOCAL
およびSEGMENT
SPACE
MANAGEMENT
AUTO
を指定する必要があります。DATAFILE
句は、Oracle Managed Filesが使用可能になっている場合のみのオプションです。DATAFILE
句の動作については、「DATAFILE | TEMPFILE句」を参照してください。
SYSAUX
表領域には十分な領域を割り当ててください。この表領域の作成のガイドラインは、『Oracle Databaseアップグレード・ガイド』を参照してください。
SYSAUX
表領域にOFFLINE
またはTEMPORARY
を指定することはできません。
永続表領域を構成するデータ・ファイルを指定するか、または一時表領域を構成する一時ファイルを指定します。オペレーティング・システムのファイル・システム内の標準データ・ファイルと一時ファイル、または自動ストレージ管理ディスク・グループのファイルを作成するには、file_specification
のdatafile_tempfile_spec書式を使用します。
DB_CREATE_FILE_DEST
初期化パラメータに値を設定してOracle Managed Filesを使用可能にしていないかぎり、DATAFILE
またはTEMPFILE
句を指定する必要があります。自動ストレージ管理ディスク・グループ・ファイルの場合、このパラメータを自動ストレージ管理ファイル名の複数ファイル作成形式に設定する必要があります。このパラメータが設定されている場合、パラメータで指定したデフォルトのファイルの出力先に、100MBのファイルがシステム名で作成されます。このファイルではAUTOEXTEND
が有効になっているため、最大サイズの制限はありません。
参照:
|
datafile_tempfile_spec
にREUSE
キーワードを指定しても意味がありません。このようなCREATE
TABLESPACE
文は、REUSE
の指定の有無にかかわらず実行されます。
datafile_tempfile_spec
にディスク・グループ名のみを指定することによって、自動ストレージ管理ディスク・グループ内に表領域を作成できます。この場合、自動ストレージ管理は、システムが生成するファイル名で、指定したディスク・グループにデータ・ファイルを作成します。データ・ファイルは自動拡張可能であり、最大サイズの制限はありません。デフォルトのサイズは100MBです。デフォルトのサイズは、autoextend_clause
を使用して上書きできます。
ASM_filename
の参照形式の1つを使用する場合、REUSE
も指定する必要があります。
参照:
AUTOEXTEND
パラメータなどの詳細は、「file_specification」を参照してください。
この句は、ディクショナリ管理表領域にのみ有効です。表領域で使用されるエクステントの最小サイズを指定します。この句を指定すると、表領域内のすべての使用済エクステントまたは未使用エクステントのサイズが、size_clause
で指定された値以上であること、およびその倍数であることが保証され、表領域における空き領域の断片化を制御できます。
参照:
この句の詳細は、「size_clause」を参照してください。 |
BLOCKSIZE
句を使用すると、表領域に対して標準以外のブロック・サイズを指定できます。この句を指定するには、DB_CACHE_SIZE
および1つ以上のDB_
n
K_CACHE_SIZE
パラメータが設定されている必要があります。また、この句で指定する整数は、DB_
n
K_CACHE_SIZE
パラメータの1つの設定と対応している必要があります。
一時表領域の場合、または表領域を一時表領域として任意のユーザーに割り当てる場合は、標準以外のブロック・サイズを指定できません。
表領域内のすべての表、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログおよびパーティションのデフォルトのロギング属性を指定します。デフォルトはLOGGING
です。この句は、一時表領域またはUNDO表領域では無効です。
表レベル、索引レベル、マテリアライズド・ビュー・レベル、マテリアライズド・ビュー・ログ・レベル、パーティション・レベルでのロギングを指定することで、表領域レベルのロギング属性を上書きできます。
この句を使用すると、表領域はFORCE
LOGGING
モードになります。一時セグメントへの変更を除き、表領域内のすべてのオブジェクトに対するすべての変更が記録され、個々のオブジェクトのNOLOGGING
設定が上書きされます。データベースをオープンし、READ
WRITE
モードにしておく必要があります。
この設定によって、NOLOGGING
属性が削除されることはありません。FORCE
LOGGING
とNOLOGGING
の両方を指定できます。この場合、後から表領域に作成されるオブジェクトのデフォルト・ロギング・モードはNOLOGGING
になりますが、表領域またはデータベースがFORCE
LOGGING
モードの場合、このデフォルト値は無視されます。この表領域でFORCE
LOGGING
モードを無効にすると、デフォルト値であるNOLOGGING
が再度適用されます。
FORCE
LOGGING
は、UNDO表領域および一時表領域に対して指定できません。
この句を使用すると、表領域の暗号化プロパティを指定できます。実際は、この句によって表領域が暗号化されるわけではありません。表領域を暗号化するには、この文のDEFAULT
storage_clause
の一部としてENCRYPT
キーワードも指定する必要があります。また、ALTER
SYSTEM
... SET
ENCRYPTION
WALLET
句を使用して、サーバー・ウォレットからデータベース・アクセスのメモリーにすでに情報をロードしている必要があります。詳細は、「SET ENCRYPTION WALLET句」を参照してください。
暗号化プロパティは、encryption_spec
で指定されます。表領域の暗号化に関連するencryption_spec
の句は、USING
句のみです。USING
'encrypt_algorithm
'を指定すると、使用するアルゴリズムの名前を指定できます。有効なアルゴリズムは、3DES168
、AES128
、AES192
およびAES256
です。この句を省略すると、AES128
が使用されます。
この句を使用すると、表領域内に作成されるすべてのオブジェクトに対するデフォルトの記憶域パラメータ、および表領域内に作成されるすべての表に対するデフォルトのデータ圧縮を指定できます。この句は、一時表領域では無効です。
ディクショナリ管理表領域の場合、この句で指定できる記憶域パラメータはCOMPRESS
のみです。
参照:
|
この句を使用すると、表領域がオンラインまたはオフラインのいずれであるかを決定できます。この句は、一時表領域では無効です。
ONLINE
を指定すると、表領域に対するアクセス権限を付与されているユーザーに対して、作成直後の表領域を使用可能にできます。これはデフォルトです。
OFFLINE
を指定すると、作成直後の表領域を使用禁止にできます。
データ・ディクショナリ・ビューDBA_TABLESPACES
は、各表領域がオンラインまたはオフラインのいずれであるかを示します。
extent_management_clause
を使用すると、表領域のエクステントの管理方法を指定できます。
LOCAL
を指定すると、表領域をローカルで管理できます。ローカル管理表領域では、ビットマップ用に表領域の一部を確保します。これは、永続表領域のデフォルトです。一時表領域は、自動的にローカル管理のエクステントで作成されます。
DICTIONARY
を指定すると、ディクショナリ表を使用して表領域を管理できます。
データベースのSYSTEM
表領域がローカル管理される場合、またはtemporary_tablespace_clause
が指定されている場合、DICTIONARY
は指定できません。
extent_management_clause
を指定しない場合、MINIMUM
EXTENT
句およびDEFAULT
storage_clause
が解析され、エクステント管理が判断されます。
DEFAULT
storage_clause
を指定しない場合、ローカル管理の自動割当て表領域が作成されます。
DEFAULT
storage_clause
を指定する場合は、次のようになります。
MINIMUM
EXTENT
句を指定した場合、MINIMUM
EXTENT
、INITIAL
およびNEXT
の値が等しく、PCTINCREASE
の値が0(ゼロ)であるかどうかが評価されます。これらの値が同じである場合、エクステントのサイズがINITIAL
で、ローカル管理される均一な表領域が作成されます。MINIMUM
EXTENT
、INITIAL
およびNEXT
パラメータが等しくない場合またはPCTINCREASE
が0(ゼロ)でない場合は、指定したエクステントの記憶域パラメータが無視され、ローカル管理の自動割当て表領域が作成されます。
MINIMUM
EXTENT
句を指定しなかった場合、INITIAL
およびNEXT
の記憶域の値が等しく、PCTINCREASE
が0(ゼロ)であるかどうかが評価されます。これらの値が同じである場合、表領域はローカル管理され、エクステント・サイズは均一です。そうでない場合、表領域はローカル管理され、エクステント・サイズは自動割当てされます。エクステント管理には、次の制限事項があります。
temporary_tablespace_clause
を使用します。
LOCAL
を指定する場合、DEFAULT
storage_clause
、MINIMUM
EXTENT
またはtemporary_tablespace_clause
は指定できません。segment_management_clause
は、永続的なローカル管理表領域に対してのみ有効です。Oracle Databaseが、空きリストまたはビットマップのどちらを使用して、表領域のセグメントにある使用済領域および空き領域を追跡するかを指定できます。この句は、一時表領域では無効です。
AUTO
を指定すると、ビットマップを使用して表領域のセグメントにある空き領域を管理できます。AUTO
を指定すると、この表領域のオブジェクトに対して後で指定する記憶域のPCTUSED
、FREELIST
およびFREELIST
GROUPS
の値は無視されます。この設定を自動セグメント領域管理といい、これがデフォルトです。
MANUAL
を指定すると、空きリストを使用して表領域のセグメントにある空き領域を管理できます。この設定は使用しないようにして、自動セグメント領域の表領域を作成することを強くお薦めします。
既存の表領域のセグメント管理を確認するには、DBA_TABLESPACES
またはUSER_TABLESPACES
データ・ディクショナリ・ビューのSEGMENT_SPACE_MANAGEMENT
列を問い合せます。
この句には、次の制限事項があります。
SYSTEM
表領域に対して指定できません。
参照:
この句をALTER
DATABASE
FLASHBACK
句と組み合せて使用すると、FLASHBACK
DATABASE
操作に表領域を使用できるかどうかを指定できます。この句は、データベースがFLASHBACK
モードでオープンされているときに、この表領域のフラッシュバック・ログ・データを保持しない場合に便利です。
この句は、一時表領域またはUNDO表領域では無効です。
FLASHBACK
ON
を指定すると、表領域でFLASHBACK
モードを有効にできます。この表領域のフラッシュバック・ログ・データが保存され、FLASHBACK
DATABASE
操作でこの表領域を使用できるようになります。flashback_mode_clause
を指定しない場合、デフォルトでFLASHBACK
ON
が指定されます。
FLASHBACK
OFF
を指定すると、表領域でFLASHBACK
モードを無効にできます。この表領域のフラッシュバック・ログ・データは保存されません。FLASHBACK
DATABASE
操作の実行前に、この表領域のデータ・ファイルをオフラインにするか、または削除する必要があります。または、表領域全体をオフラインにすることもできます。どちらの場合も、既存のフラッシュバック・ログは削除されません。
参照:
|
この句を使用すると、ローカル管理一時表領域を作成できます。一時表領域は、一時データを含むことができるデータベース内の領域の割当てで、この一時データはセッションの存続期間中のみ保持されます。プロセスまたはインスタンスに障害が発生した場合、この一時データをリカバリすることはできません。
一時データとは、一時表などのユーザー生成スキーマ・オブジェクト、またはハッシュ結合およびソート操作で使用される一時領域などのシステム生成データです。一時表領域、またはこの表領域が含まれる表領域グループを特定のユーザーに割り当てると、このユーザーによって開始されるトランザクションでのソート操作にこの表領域が使用されます。
TEMPFILE
句の詳細は、「DATAFILE | TEMPFILE句」を参照してください。extent_management_clause
の詳細は、「extent_management_clause」を参照してください。
この句は、一時表領域に対してのみ有効です。この句を使用すると、tablespace
が表領域グループに含まれるかどうかを決定できます。表領域グループを使用すると、複数の一時表領域を1人のユーザーに割り当て、一時表領域のアクセス性を向上できます。
tablespace
がその表領域グループのメンバーであることを示すことができます。グループ名にtablespace
または他の既存の表領域と同じ名前を指定することはできません。表領域グループがすでに存在する場合、そのグループに新しい表領域が追加されます。表領域グループが存在しない場合、グループが作成され、そのグループに新しい表領域が追加されます。
tablespace
がいずれの表領域グループにも属さないことを示すことができます。
参照:
一時表領域に格納されたデータは、セッションの存続期間中のみ保持されます。そのため、CREATE
TABLESPACE
句のサブセットのみが一時表領域に対して有効です。一時表領域に対して指定できるのは、TEMPFILE
句、tablespace_group_clause
およびextent_management_clause
のみです。
UNDO
を指定すると、UNDO表領域を作成できます。自動UNDO管理モードでデータベースを実行する場合、Oracle Databaseは、ロールバック・セグメントのかわりにUNDO表領域を使用してUNDO領域を管理します。この句は、自動UNDO管理モードで作成しなかったデータベースを自動UNDO管理モードで実行している場合に便利です。
自動UNDO管理モードでデータベースを起動すると、UNDO表領域が割り当てられます。UNDO表領域がインスタンスに割り当てられない場合、SYSTEM
ロールバック・セグメントが使用されます。UNDO表領域の作成によってこれを回避することができ、他のUNDO表領域がその時点で割り当てられていない場合、インスタンスに暗黙的に割り当てられます。
DATAFILE
句の詳細は、「DATAFILE | TEMPFILE句」を参照してください。extent_management_clause
の詳細は、「extent_management_clause」を参照してください。
この句は、UNDO表領域に対してのみ有効です。
RETENTION
GUARANTEE
を指定すると、tablespace
のすべてのUNDOセグメントの期限切れ前のUNDOデータが、これらのセグメントのUNDO領域を必要とする実行中の操作が失敗する場合でも保持されます。この設定は、Oracleフラッシュバック問合せまたはOracleフラッシュバック・トランザクション問合せを発行し、データの問題を診断および修正する必要がある場合に便利です。
RETENTION
NOGUARANTEE
を指定すると、UNDO動作を通常の動作に戻すことができます。実行中のトランザクションで必要な場合には、期限切れ前のUNDOデータによって使用されているUNDOセグメントの領域を使用できます。これはデフォルトです。
UNDO表領域には、次の制限事項があります。
DATAFILE
句およびextent_management_clause
句のみです。extent_management_clause
を使用して、ディクショナリ・エクステント管理を指定できません。すべてのUNDO表領域は、永続的、読取り/書込み可能およびロギング・モードで作成されます。MINIMUM
EXTENT
およびDEFAULT
STORAGE
に対する値は、システムで生成されます。
参照:
UNDO_MANAGEMENT
パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
これらの例では、8Kブロックを使用していると想定します。
次の例は、10MBのデータ・ファイルbigtbs_f1.dat
を持つbigfile表領域bigtbs_01
を作成します。
CREATE BIGFILE TABLESPACE bigtbs_01 DATAFILE 'bigtbs_f1.dat' SIZE 20M AUTOEXTEND ON;
次の例は、10MBのUNDO表領域undots1
を作成します。
CREATE UNDO TABLESPACE undots1 DATAFILE 'undotbs_1a.f' SIZE 10M AUTOEXTEND ON RETENTION GUARANTEE;
次の文は、サンプル・データベースのデータベース・ユーザーに対するデフォルトの一時表領域を作成します。
CREATE TEMPORARY TABLESPACE temp_demo TEMPFILE 'temp01.dbf' SIZE 5M AUTOEXTEND ON;
デフォルトのデータベース・ブロック・サイズを2KBとした場合、マップの各ビットは1つのエクステントを表し、各ビットは8000ブロックをマップします。
次の例は、データ・ファイルを作成するデフォルトの位置を設定し、デフォルトの位置にOracle Managed Filesの一時ファイルを持つ表領域を作成します。一時ファイルは100MBで、最大サイズが制限なしで自動拡張されます。これらは、Oracle Managed Filesのデフォルト値です。
ALTER SYSTEM SET DB_CREATE_FILE_DEST = '$ORACLE_HOME/rdbms/dbs'; CREATE TEMPORARY TABLESPACE tbs_05;
次の文は、tbs_grp_01
表領域グループに含まれるtbs_temp_02
一時表領域を作成します。この表領域グループが存在しない場合、文の実行中に作成されます。
CREATE TEMPORARY TABLESPACE tbs_temp_02 TEMPFILE 'temp02.dbf' SIZE 5M AUTOEXTEND ON TABLESPACE GROUP tbs_grp_01;
次の文は、1つのデータ・ファイルを持つ表領域tbs_01
を作成します。
CREATE TABLESPACE tbs_01 DATAFILE 'tbs_f2.dat' SIZE 40M ONLINE;
次の文は、1つのデータ・ファイルを持つ表領域tbs_03
を作成し、すべてのエクステントを500KBの倍数として割り当てます。
CREATE TABLESPACE tbs_03 DATAFILE 'tbs_f03.dbf' SIZE 20M LOGGING;
次の文は、1つのデータ・ファイルを持つ表領域tbs_02
を作成します。さらに領域が必要な場合、500KBのエクステントが最大サイズ100MBまで追加されます。
CREATE TABLESPACE tbs_02 DATAFILE 'diskb:tbs_f5.dat' SIZE 500K REUSE AUTOEXTEND ON NEXT 500K MAXSIZE 100M;
次の文では、データベース・ブロック・サイズが2KBであると仮定します。
CREATE TABLESPACE tbs_04 DATAFILE 'file_1.f' SIZE 10M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
この文で、すべてのエクステントが128KBで、ビットマップの各ビットが64ブロックを示す、ローカル管理表領域を作成します。
次の文は、均一のエクステントを持つローカル管理表領域を作成して、その表領域に格納された表の例を示します。
CREATE TABLESPACE lmt1 DATAFILE 'lmt_file2.f' SIZE 100m REUSE EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M; CREATE TABLE lmt_table1 (col1 NUMBER, col2 VARCHAR2(20)) TABLESPACE lmt1 STORAGE (INITIAL 2m NEXT 1m MINEXTENTS 5 MAXSIZE 100m);
セグメントの初期サイズは5MBです。セグメントには、1MBのエクステントが5つ割り当てられています。セグメントの最大サイズは、100MBに制限されています。
次の例は、均一のエクステントを持たないローカル管理表領域を作成します。
CREATE TABLESPACE lmt2 DATAFILE 'lmt_file3.f' SIZE 100m REUSE EXTENT MANAGEMENT LOCAL; CREATE TABLE lmt_table2 (col1 NUMBER, col2 VARCHAR2(20)) TABLESPACE lmt2 STORAGE (INITIAL 2m NEXT 1m MINEXTENTS 5 MAXSIZE 100m);
表の初期セグメント・サイズは5MBです。Oracle Databaseによって、初期セグメント・サイズを満たすように各エクステントのサイズおよび割り当てられるエクステントの合計数が決定されます。セグメントの最大サイズは、100MBに制限されています。
次の文は、暗号化された表領域を作成します。最初にウォレットを開いて、データベースに対して暗号化を有効にする必要があります。
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "welcome1"; System altered. CREATE TABLESPACE encrypt_ts DATAFILE '$ORACLE_HOME/dbs/encrypt_df.dat' SIZE 1M ENCRYPTION USING '3DES168' DEFAULT STORAGE (ENCRYPT); Tablespace created.
次の例では、自動セグメント領域管理の表領域を作成します。
CREATE TABLESPACE auto_seg_ts DATAFILE 'file_2.f' SIZE 1M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
次の例は、データ・ファイルを作成するデフォルトの位置を設定し、デフォルトの位置にデータ・ファイルを持つ表領域を作成します。データ・ファイルは100MBで自動拡張可能であり、最大サイズの制限がありません。
ALTER SYSTEM SET DB_CREATE_FILE_DEST = '$ORACLE_HOME/rdbms/dbs'; CREATE TABLESPACE omf_ts1;
次の例は、自動拡張されない100MBのOracle Managed Filesのデータ・ファイルを持つ表領域を作成します。
CREATE TABLESPACE omf_ts2 DATAFILE AUTOEXTEND OFF;
トリガーはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は『Oracle Database PL/SQL言語リファレンス』を参照してください。
CREATE
TRIGGER
文を使用すると、データベース・トリガーを作成できます。データベース・トリガーとは、次のとおりです。
指定された条件が発生した場合、トリガーは自動的に実行されます。
自分のスキーマ内の表または自分のスキーマ(SCHEMA
)に対するトリガーを自分のスキーマ内に作成する場合は、CREATE
TRIGGER
システム権限が必要です。
任意のスキーマ内の表または別のユーザーのスキーマ(schema
.SCHEMA
)に対するトリガーを任意のスキーマ内に作成する場合は、CREATE
ANY
TRIGGER
システム権限が必要です。
前述の権限の他にも、データベースに対するトリガーを作成する場合は、ADMINISTER
DATABASE
TRIGGER
システム権限が必要です。
トリガーがSQL文を発行、またはプロシージャやファンクションをコールする場合、そのトリガーの所有者には、これらの操作を行うための権限が必要です。これらの権限はロールを介して付与するのでなく、所有者に直接付与する必要があります。
トリガーはPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。
(plsql_source
については、『Oracle Database PL/SQL言語リファレンス』を参照してください。)
OR
REPLACE
を指定すると、既存のトリガーを再作成できます。この句を指定すると、既存のトリガーの定義を削除しなくても変更できます。
plsql_source
の構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。
|
Copyright © 1996, 2008, Oracle Corporation. All Rights Reserved. |
|