CREATE TABLE
目的
CREATE
TABLE
文を使用すると、次の型の表を作成できます。
-
リレーショナル表。ユーザー・データを格納する基本構造です。
-
オブジェクト表。列の定義にオブジェクト型を使用する表です。特定の型のオブジェクト・インスタンスを格納するように明示的に定義されます。
オブジェクト型を作成しておき、リレーショナル表の作成時に列の中でそのオブジェクト型を使用することもできます。
副問合せを指定しない場合、データを含まない表が作成されます。INSERT
文を使用した場合、表に行を追加できます。表を作成した後、ALTER
TABLE
文でADD
句を指定すると、追加する列、パーティションおよび整合性制約を定義できます。ALTER
TABLE
文でMODIFY
句を指定すると、既存の列またはパーティションの定義を変更できます。
関連項目:
-
オブジェクトの作成の詳細は、『Oracle Database管理者ガイド』および「CREATE TYPE」を参照してください。
-
表の変更および削除の詳細は、「ALTER TABLE」および「DROP TABLE」を参照してください。
前提条件
自分のスキーマ内にリレーショナル表を作成する場合は、CREATE
TABLE
システム権限が必要です。他のユーザーのスキーマ内に表を作成する場合は、CREATE
ANY
TABLE
システム権限が必要です。また、表が含まれるスキーマの所有者は、表を格納するため表領域への割当て制限またはUNLIMITED
TABLESPACE
システム権限が必要です。
これらの表権限に加え、オブジェクト表またはオブジェクト型の列が存在するリレーショナル表を作成する場合は、表の所有者に、表が参照するすべての型にアクセスするためのEXECUTE
オブジェクト権限が付与されているかまたはEXECUTE
ANY
TYPE
システム権限が付与されている必要があります。これらの権限は、ロールを介して取得するのではなく、明示的に付与される必要があります。
さらに、表の所有者が表へのアクセス権限を他のユーザーに付与する場合、所有者には、参照する型に対するWITH
GRANT
OPTION
付きのEXECUTE
オブジェクト権限またはWITH
ADMIN
OPTION
付きのEXECUTE
ANY
TYPE
システム権限が必要です。これらの権限を持っていない場合、表の所有者は、表へのアクセス権限を他のユーザーに付与できません。
一意キー制約または主キー制約を有効にする場合は、表に索引を作成するための権限が必要です。Oracle Databaseでは、表を含むスキーマにおいて、一意キーまたは主キーの列に索引を作成するため、この権限が必要になります。
evaluation_edition_clause
またはunusable_editions_clause
でエディションを指定するには、そのエディションに対するUSE
権限が必要になります。
zonemap_clause
を指定するには、ゾーン・マップを作成する権限が必要です。「CREATE
MATERIALIZED
ZONEMAP
」の項目の「前提条件」の項を参照してください。
外部表を作成する場合は、適切なオペレーティング・システム・ディレクトリに対する、オペレーティング・システムの読取り権限および書込み権限が必要です。外部データが存在するオペレーティング・システム・ディレクトリに対応するデータベース・ディレクトリ・オブジェクトに対するREAD
オブジェクト権限が必要です。また、opaque_format_spec
でログ・ファイルまたは不良ファイルを指定する場合、またはAS
subquery
句を指定してデータベース表から外部表にデータをアンロードする場合、ファイルが格納されるデータベース・ディレクトリに対するWRITE
オブジェクト権限が必要です。
自分のスキーマ以外のデータベース・スキーマ内にXMLType表を作成する場合は、CREATE
ANY
TABLE
権限のみでなく、CREATE
ANY
INDEX
権限も必要です。これは、表の作成時に列OBJECT_ID
に一意索引が作成されるためです。列OBJECT_ID
には、システム生成のオブジェクト識別子が格納されます。
関連項目:
-
型を使用する表の作成に必要な権限については、『Oracle Database管理者ガイド』を参照してください。
構文
relational_table::=
ノート:
表名の後の各句は、任意のリレーショナル表に対して任意で指定します。ただし、すべての表に対して少なくとも、relational_properties
句を使用して列名およびデータ型を指定するか、table_properties
句を使用してAS
subquery
句を指定する必要があります。
(relational_properties::=, immutable_table_clauses ,blockchain_table_clauses::= ,physical_properties::=, table_properties::=)
object_table::=
(object_table_substitution::=、object_properties::=、oid_clause::=、oid_index_clause::=、physical_properties::=、table_properties::=)
XMLType_table::=
(XMLType_storage::=、XMLSchema_spec::=、XMLType_virtual_columns::=、oid_clause::=、oid_index_clause::=、physical_properties::=、table_properties::=)
relational_properties::=
ノート:
これらの句はどのような順序で指定してもかまいませんが、次の例外があります。period_definition
を指定する場合、その前に1つ以上のcolumn_definition
またはvirtual_column_definition
を指定する必要があります。period_definition
は、1回のみ指定できます。
(column_definition::=, virtual_column_definition::=, period_definition::=, out_of_line_constraint::=, out_of_line_ref_constraint::=, supplemental_logging_props::=, domain_clause::=)
column_definition::=
(identity_clause::=, inline_constraint::=, inline_ref_constraint::=, annotations_clause::=)
datatype_domain::=
encryption_spec::=
annotations_clause::=
annotations_clause
の完全な構文およびセマンティクスについては、「annotations_clause」を参照してください。
identity_clause::=
identity_options::=
virtual_column_definition::=
(evaluation_edition_clause::=、unusable_editions_clause::=、constraint::=)
evaluation_edition_clause::=
unusable_editions_clause::=
period_definition::=
object_table_substitution::=
oid_clause::=
physical_properties::=
(deferred_segment_creation::=、segment_attributes_clause::=、table_compression::=、inmemory_table_clause::=、ilm_clause::=、heap_org_table_clause::=、index_org_table_clause::=、external_table_clause::=)
deferred_segment_creation::=
segment_attributes_clause::=
table_compression::=
inmemory_table_clause::=
inmemory_attributes::=
(inmemory_memcompress::=、inmemory_priority::=、inmemory_distribute::=、inmemory_duplicate::=)
inmemory_memcompress::=
inmemory_priority::=
inmemory_distribute::=
inmemory_duplicate::=
inmemory_spatial::=
ilm_clause::=
ilm_policy_clause::=
(ilm_compression_policy::=、ilm_tiering_policy::=、ilm_inmemory_policy::=)
ilm_inmemory_policy::=
ilm_time_period::=
table_properties::=
(column_properties::=、read_only_clause::=、indexing_clause::=、table_partitioning_clauses::=、attribute_clustering_clause::=、parallel_clause::=、enable_disable_clause::=、row_movement_clause::=、logical_replication_clause::=、flashback_archive_clause::=、subquery::=)
column_properties::=
(object_type_col_properties::=, nested_table_col_properties::=, varray_col_properties::=, LOB_storage_clause::=, LOB_partition_storage::=, XMLType_column_properties::=,json_storage_clause::=)
object_type_col_properties::=
substitutable_column_clause::=
nested_table_col_properties::=
(substitutable_column_clause::=、object_properties::=、physical_properties::=、column_properties::=)
LOB_parameters::=
(LOB_deduplicate_clause::=, LOB_compression_clause::=, logging_clause::=)
ノート:
LOB記憶域にSecureFilesを使用する場合、いくつかのLOBパラメータは不要になります。詳細は、「LOB_storage_parameters」を参照してください。
LOB_retention_clause::=
LOB_deduplicate_clause::=
LOB_compression_clause::=
logging_clause::=
LOB_partition_storage::=
(LOB_storage_clause::=、varray_col_properties::=、LOB_partitioning_storage::=)
LOB_partitioning_storage::=
XMLType_column_properties::=
XMLSchema_spec::=
XMLType_virtual_columns::=
logical_replication_clause::=
flashback_archive_clause::=
heap_org_table_clause::=
(table_compression::=、inmemory_table_clause::=、ilm_clause::=)
index_org_table_clause::=
(mapping_table_clauses::=、prefix_compression::=、index_org_overflow_clause::=)
mapping_table_clauses::=
index_compression::=
prefix_compression::=
iot_advanced_compression::=
advanced_index_compression::=
supplemental_logging_props::=
supplemental_log_grp_clause::=
supplemental_id_key_clause::=を参照
domain_clause::=
immutable_table_clauses::=
immutable_table_no_drop_clause::=
immutable_table_no_delete_clause::=
immutable_row_version_clause::=
immutable_data_format_clause::=
blockchain_hash_clause::=
blockchain_row_version_user_chain_clause::=
blockchain_system_chains_clause::=
blockchain_data_format_clause::=
external_table_data_props::=
(opaque_format_spec
: この句は、ORACLE_LOADER
、ORACLE_DATAPUMP
、ORACLE_HDFS
およびORACLE_HIVE
アクセス・ドライバのアクセス・パラメータを指定します。これらのパラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。)
read_only_clause::=
indexing_clause::=
table_partitioning_clauses::=
(range_partitions::=、list_partitions::=、hash_partitions::=、composite_range_partitions::=、composite_list_partitions::=、composite_hash_partitions::=、reference_partitioning::=、system_partitioning::=、consistent_hash_partitions::=、directory_based_partitions::=、composite_directory_based_partitions::=、consistent_hash_with_subpartitions::=、partitionset_clauses::=)
range_partitions::=
(range_values_clause::=、table_partition_description::=、external_part_subpart_data_props::=)
external_part_subpart_data_props::=
individual_hash_partitions::=
(read_only_clause::=、indexing_clause::=、partitioning_storage_clause::=)
hash_partitions_by_quantity::=を参照
list_partitions::=
(list_values_clause::=、table_partition_description::=、external_part_subpart_data_props::=)
composite_range_partitions::=
(subpartition_by_range::=、subpartition_by_list::=、subpartition_by_hash::=、range_partition_desc::=)
composite_hash_partitions::=
(subpartition_by_range::=、subpartition_by_list::=、subpartition_by_hash::=、individual_hash_partitions::=、hash_partitions_by_quantity::=)
composite_list_partitions::=
(subpartition_by_range::=、subpartition_by_list::=、subpartition_by_hash::=、list_partition_desc::=)
consistent_hash_partitions::=
directory_based_partitions::=
composite_directory_based_partitions::=
directory_partition_desc::=
consistent_hash_with_subpartitions::=
partitionset_clauses::=
range_partitionset_clause::=
range_partitionset_desc::=
list_partitionset_clause::=
list_partitionset_desc::=
range_partition_desc::=
(range_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=)
list_partition_desc::=
(list_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=)
subpartition_template::=
(range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=)
range_subpartition_desc::=
(range_values_clause::=、read_only_clause::=、indexing_clause::=、partitioning_storage_clause::=、external_part_subpart_data_props::=)
list_subpartition_desc::=
(list_values_clause::=、read_only_clause::=、indexing_clause::=、partitioning_storage_clause::=、external_part_subpart_data_props::=)
individual_hash_subparts::=
(read_only_clause::=、indexing_clause::=、partitioning_storage_clause::=)
hash_subparts_by_quantity::=
range_values_clause::=
list_values::=
table_partition_description::=
(deferred_segment_creation::=、read_only_clause::=、indexing_clause::=、segment_attributes_clause::=、table_compression::=、prefix_compression::=、inmemory_clause::=、segment_attributes_clause::=、LOB_storage_clause::=、varray_col_properties::=、nested_table_col_properties::=)
partitioning_storage_clause::=
(table_compression::=、index_compression::=、inmemory_clause::=、LOB_partitioning_storage::=)
attribute_clustering_clause::=
(clustering_join::=、cluster_clause::=、clustering_when::=、zonemap_clause::=)
clustering_join::=
cluster_clause::=
clustering_columns::=
clustering_column_group::=
clustering_when::=
zonemap_clause::=
index_properties::=
(global_partitioned_index::=、local_partitioned_index::= (CREATE
INDEX
の一部)、index_attributes::=。domain_index_clause
およびXMLIndex_clause
はusing_index_clause
ではサポートされていません)
index_attributes::=
(physical_attributes_clause::=、logging_clause::=、index_compression::=、partial_index_clause
およびparallel_clause
: (using_index_clause
ではサポートされません))
memoptimize_write_clause
セマンティクス
GLOBAL TEMPORARY
適切な権限を持つすべてのセッションからその定義が参照可能な一時表を作成するには、GLOBAL TEMPORARY
を指定します。一時表のデータは、データを表に挿入するセッションでのみ参照できます。
初めて一時表を作成した時点では、その表のメタデータはデータ・ディクショナリに格納されますが、表データの領域は割り当てられません。表セグメントの領域は、その表に初めてDML操作を実行したときに割り当てられます。一時表の定義は、標準的な表の定義と同じように維持されますが、表に含まれる表セグメントとデータは、セッション固有またはトランザクション固有のデータのいずれかになります。表のセグメントとデータをセッション固有にするか、トランザクション固有にするかは、ON COMMIT句で指定します。
セッションがバインドされていない場合にのみ、一時表でDDL操作(ALTER
TABLE
、DROP
TABLE
、CREATE
INDEX
など)を実行できます。セッションを一時表にバインドするには、その表でINSERT
操作を実行します。セッションを一時表からアンバインドするには、TRUNCATE
文を発行するか、セッションを終了します。また、トランザクション固有の一時表からアンバインドするには、COMMIT
文またはROLLBACK
文を発行します。
PRIVATE TEMPORARY
プライベート一時表を作成するにはPRIVATE TEMPORARY
を指定します。
プライベート一時表は、その表を作成したセッション内でのみ定義とデータが参照可能である点で、一時表とは異なります。プライベート一時表の有効範囲(トランザクションまたはセッション)を定義するには、ON COMMIT
句を使用します。ON COMMIT
句にキーワードDROP DEFINITION
を使用すると、作成されるトランザクション固有の表では、そのデータおよび定義がトランザクションのコミット時に削除されます。これはデフォルトの動作です。ON COMMIT
句にキーワードPRESERVE DEFINITION
を使用すると、作成されるセッション固有の表では、トランザクションのコミット時にその定義が維持されます。この句の使用方法の詳細は、 ON COMMITを参照してください。
プライベート一時表でサポートされている3つのDDL文は、CREATE
、DROP
およびTRUNCATE
です。
一時表の制限事項
一時表には、次の制限事項があります。
-
一時表は、パーティション化、索引構成化またはクラスタ化できません。
-
一時表には、外部キー制約を指定できません。
-
一時表は、ネストした表の列を含むことはできません。
-
LOB_storage_clause
のTABLESPACE
、storage_clause
またはlogging_clause
は指定できません。 -
一時表にパラレル
UPDATE
、DELETE
およびMERGE
はサポートされていません。 -
一時表に対して指定できる
segment_attributes_clause
は、TABLESPACE
のみで、単一の一時表領域を指定できます。 -
一時表では、分散トランザクションはサポートされません。
-
一時表には、
INVISIBLE
の列を格納できません。
プライベート一時表の制限事項
一時表の一般的な制限事項に加えて、プライベート一時表には次の制限事項があります。
プライベート一時表を作成するには、SYS
以外のユーザーである必要があります。
グローバル一時表に対して許可されているプライベート一時表に対して、次の制約は指定できません:
-
PRIMARY KEY
制約 -
UNIQUE
制約 -
CHECK
制約 -
NOT NULL
制約 -
プライベート一時表の名前には、
init.ora
のパラメータPRIVATE_TEMP_TABLE_PREFIX
で定義されている任意の接頭辞を常に付ける必要があります。デフォルトはORA$PTT_
です。 -
プライベート一時表では索引、マテリアライズド・ビューおよびゾーンマップを作成できません。
-
デフォルト値を使用して列を定義することはできません。
-
永続オブジェクト(例: ビューまたはトリガー)ではプライベート一時表を参照できません。
-
データベース・リンクを介してプライベート一時表を参照することはできません。
-
CREATE TABLE
を使用して、プライベート一時表の表列をドメインに関連付けることはできません。これを行うと、次のエラーが発生します。Cannot associate a private temporary table with a domain.
関連項目:
一時表の詳細は、『Oracle Database概要』および「表の作成: 一時表の例」を参照してください。
SHARDED
SHARDED
を指定して、シャード表を作成します。
この句は、Oracle Shardingを使用している場合にのみ有効で、これは、独立したデータベース間でデータが水平にパーティション化されるデータ階層アーキテクチャです。このような構成の各データベースはシャードと呼ばれます。すべてのシャードが一体的に単一の論理データベースを形成し、これはシャード・データベース(SDB)と呼ばれます。水平パーティション化では、同じ列を持つが行の異なるサブセットを持つ表が各シャードに含まれるように、表をシャード間に分割します。このように分割された表はシャード表と呼ばれます。
シャード表を作成する場合は、表を作成する表領域セットを指定する必要があります。シャード表のデフォルトの表領域セットはありません。詳細は、「CREATE TABLESPACE SET」を参照してください。
Oracle Shardingは、Oracle Partitioning機能に基づいています。そのため、シャード表は、パーティション表またはコンポジット・パーティション表である必要があります。シャード表を作成する場合は、table_partitioning_clauses
のいずれかを指定する必要があります。これらの句のセマンティクスの詳細は、「table_partitioning_clauses」を参照してください。
シャード表の制限事項
シャード表には、次の制限事項があります。
-
システム管理シャーディングでは、
CREATE SHARDED TABLE
文にPARTITION BY REFERENCE
またはPARENT
句が含まれておらず、すでにルート表が存在するときに、ORA-02530
をスローせずに複数のルート表(および表ファミリ)を作成できます。 -
シャード表は、一時表または索引構成表にすることができません。
-
シャード表には、ネストした表の列またはアイデンティティ列を含めることはできません。
-
システムまたはコンポジット・シャード表には表領域セットが必要であるため、
TABLESPACE
句を使用してシャード・システムまたはコンポジット・シャード表に表領域を指定することはできません。 -
ユーザー定義のシャーディング環境では表領域セットは作成できません。
-
シャード表にはシャード表領域が必要です。通常の表領域はサポートされていません。
-
シャード表の複数のパーティションに対して同一の表領域は指定できません。このルールはサブパーティションにも適用されます。シャード表の異なるパーティションに属するサブパーティションに対して同一の表領域を指定することはできません。
-
非参照パーティション・シャード表のパーティションごとに表領域を指定する必要があります。
-
ユーザー定義のシャーディングでは、パーティション・メソッドを範囲またはリストにする必要があります。自動リスト・パーティションと時間隔パーティションはサポートされていません。
-
リスト・パーティション・メソッドでは1つのパーティション列のみを含めることができます。
-
リスト・パーティション表ではデフォルト・パーティションはサポートされていません。
-
リスト・パーティション表ではNULLのパーティションはサポートされていません。
-
シャード表に定義される主キー制約には、シャーディング列を含める必要があります。重複表の列を参照するシャード表の列の外部キー制約はサポートされていません。
-
シャード表では、システム・パーティション化および時間隔-レンジ・パーティション化はサポートされていません。
-
シャード表の仮想列は、
PARTITION
BY
句またはPARTITIONSET
BY
句に指定できません。 -
シャード表の
XMLType
列は、デフォルトでTRANSPORTABLE BINARY XML
にデフォルト設定され、これが許可される唯一の記憶域タイプです。XMLType
に他の記憶域句を指定すると、エラーをスローします。
DUPLICATED
この句は、Oracle Shardingを使用している場合にのみ有効です。DUPLICATED
を指定して重複表を作成します。これは、すべてのシャードに複製されます。これは非パーティション表またはパーティション表にすることができます。
重複表は表ファミリに関連付けられていません。
重複表の制限事項
重複表には、次の制限事項があります。
-
重複表に
LONG
列を含めることはできません。 -
重複表の主キー以外の列の最大数は999です。
-
重複表の
XMLType
列は、デフォルトでTRANSPORTABLE BINARY XML
にデフォルト設定され、これが許可される唯一の記憶域タイプです。XMLType
に他の記憶域句を指定すると、エラーをスローします。 -
重複表は、一時表にすることができません。
-
重複表は、参照パーティション表またはシステム・パーティション表にすることができません。
-
重複表には、
NOLOGGING
またはPARALLEL
を指定できません。 -
重複表は、インメモリー列ストアに対して有効にできません。
IMMUTABLE
IMMUTABLE
キーワードを指定して、内部関係者による不正変更からデータを保護する追加専用表を作成します。
CREATE TABLE
にキーワードIMMUTABLE
BLOCKCHAIN
を使用して、不変性を重視するブロックチェーン表を作成できます。
CREATE IMMUTABLE TABLE
文を使用して不変表を作成するときに、必須のimmutable_table_clauses
を指定する必要があります。
前提条件
-
COMPATIBLE
初期化パラメータは19.11.0.0以上に設定されている必要があります。 -
自分のスキーマ内に不変表を作成するには、
CREATE TABLE
システム権限が必要です。他のユーザーのスキーマ内に不変表を作成するには、CREATE ANY TABLE
システム権限が必要です。 -
NO DROP
およびNO DELETE
句は必須です。
BLOCKCHAIN
ブロックチェーン表を作成するには、BLOCKCHAIN
キーワードを指定します。
CREATE BLOCKCHAIN TABLE
文を使用してブロックチェーン表を作成するときに、必須のblockchain_table_clauses
を指定する必要があります。
ブロックチェーン表を作成すると、SYS
が所有するディクショナリ表blockchain_table$
にエントリが作成されます。
制限事項
次のCREATE TABLE
句は、ブロックチェーン表の作成では許可されていません。
-
ORGANIZATION INDEX
-
ORGANIZATION EXTERNAL
-
NESTED TABLE
関連項目:
IF NOT EXISTS
IF NOT EXISTS
を指定すると、次の効果が得られます。
-
表が存在していない場合は、文の最後に新しい表が作成されます。
-
表が存在している場合、これは文の最後の時点にある表になります。古い表が検出されるため、新しいものは作成されません。
IF EXISTS
はCREATE TABLE
とともに使用すると、ORA-11543: Incorrect IF NOT EXISTS clause for CREATE statement
が発生します。
schema
表を含めるスキーマを指定します。schema
を省略した場合、自分のスキーマ内に表が作成されます。
table
作成する表またはオブジェクト表の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。
関連項目:
シャード表の詳細は、『Oracle Database管理者ガイド』を参照してください。
SHARING
この句は、アプリケーション・ルートに表を作成する場合にのみ適用されます。このタイプの表はアプリケーション共通オブジェクトと呼ばれ、そのデータはアプリケーション・ルートに属するアプリケーションPDBと共有できます。表データの共有方法を決定するには、次の共有属性のいずれかを指定します。
-
METADATA
- メタデータ・リンクは表のメタデータを共有しますが、そのデータは各コンテナに固有です。このタイプの表は、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。 -
DATA
- データ・リンクは表を共有し、そのデータはアプリケーション・コンテナ内のすべてのコンテナに対して同じです。そのデータはアプリケーション・ルートにのみ格納されます。このタイプの表は、データリンク・アプリケーション共通オブジェクトと呼ばれます。 -
EXTENDED
DATA
- 拡張データ・リンクは表を共有し、アプリケーション・ルートのそのデータは、アプリケーション・コンテナ内のすべてのコンテナに対して同じです。ただし、アプリケーション・コンテナの各アプリケーションPDBには、アプリケーションPDBに一意のデータを格納できます。このタイプの表の場合、データはアプリケーション・ルートに格納され、オプションで各アプリケーションPDBに格納されます。このタイプの表は、拡張データリンク・アプリケーション共通オブジェクトと呼ばれます。 -
NONE
- 表は共有されません。
この句を省略すると、データベースでは、DEFAULT_SHARING
初期化パラメータの値を使用して、表の共有属性を決定します。DEFAULT_SHARING
初期化パラメータに値が含まれていない場合、デフォルトはMETADATA
です。
リレーショナル表を作成する場合は、METADATA
、DATA
、EXTENDED
DATA
またはNONE
を指定できます。
オブジェクト表またはXMLTYPE
表を作成する場合は、METADATA
またはNONE
のみ指定できます。
表の共有属性は、作成後には変更できません。
関連項目:
-
DEFAULT_SHARING
初期化パラメータの詳細は、Oracle Databaseリファレンスを参照してください -
アプリケーション共通オブジェクトの作成の詳細は、『Oracle Database管理者ガイド』を参照してください。
relational_table
この句を使用すると、リレーショナル表を作成できます。
relational_properties
リレーショナル表のコンポーネントを指定します。
column_definition
column_definition
では、列の特性を定義できます。
AS subqueryを使用したcolumn_definitionの指定
AS
subquery
句を指定し、subquery
によって戻される各列に列名があるか、指定した列別名を持つ式である場合、column_definition
句を省略できます。この場合、tableの列名はsubquery
によって返される列の名前と同じになります。索引構成表の作成は例外です。この場合、主キー列を指定する必要があるため、column_definition
句を指定する必要があります。表型に関係なく、column_definition
句とAS
subquery
句を指定する場合は、column_definition
句からdatatype
を省略する必要があります。
表の列の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。
AS
subquery
を指定する場合、索引構成表を作成しないかぎり、column
およびdatatype
を省略できます。索引構成表の作成時にAS
subquery
を指定する場合は、column
を指定し、datatype
を省略する必要があります。
表の絶対最大列数は、MAX_COLUMNS
初期化パラメータがSTANDARD
の場合は1000列、またはMAX_COLUMNS
がEXTENDED
の場合は4096列です。MAX_COLUMNS
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
オブジェクト表、またはオブジェクトの列、ネストした表、VARRAYまたはREF型のリレーショナル表を作成する場合、制限の1000列までをカウントする有効な非表示列を作成して、ユーザー定義型の列をリレーショナル列にマップします。ユーザー定義型の属性を格納するリレーショナル列は、属性の照合プロパティを継承します。Oracle Database 12cリリース2 (12.2)では、ユーザー定義型は疑似照合プロパティUSING_NLS_COMP
を使用して作成され、対応するリレーショナル列はこのプロパティを継承します。
domain_datatype
domain_clause
この句を使用して、列をドメインに関連付けます。制限付きで互換タイプの表列に厳密でないドメインを関連付けることができます。たとえば、number(10)ドメインをnumber(9)またはnumber(11)の列に割り当てることができます。厳密なドメインでは、互換性のあるタイプおよび同じタイプの制限を持つ表の列にのみ列を関連付けることができます。たとえば、number(10)ドメイン列は、decimal(10)やnumeric(10)など、精度10の数値列にのみ割り当てることができます。
この句での列の位置は、ドメイン内の列と同じです。リストされる列の数は、domain_name
と同じである必要があります。
各列は、最大で1つのドメインに属すことができます。列が2つ以上のドメインにある場合、文はエラーになります。
USING
USING
句は、フレキシブル・ドメインの判別式の列を定義します。列をフレキシブル・ドメインに関連付ける場合、この句は必須です。
DOMAIN
句とUSING
句の列は異なっている必要があります。
datatype
列のデータ型を指定します。
一般に、datatype
を指定する必要があります。ただし、次の例外があります。
-
AS
subquery
句を指定する場合は、datatype
を省略する必要があります。 -
参照整合性制約の外部キーの一部として、文で列が指定されている場合も、
datatype
を省略できます。参照整合性制約の参照キーに対応する列のデータ型が、その列に自動的に割り当てられます。
表の列のデータ型の制限事項
-
LONG
列を持つ表は作成しないでください。かわりに、LOB列(CLOB
、NCLOB
またはBLOB
)を使用してください。LONG
列は、下位互換性のためにサポートされています。 -
ROWID
型の列を指定することはできますが、それらの列の値が有効な行IDであることは保証されません。
関連項目:
LONG
列およびOracleが提供するデータ型の詳細は、「データ型」を参照してください。
データ型の作成時または変更時に、ユーザー定義のデータ型を永続不可として指定できます。永続不可型のインスタンスは、ディスク上で保持することはできません。永続不可型として宣言されるユーザー定義のデータ型の詳細は、「CREATE TYPE」を参照してください。
RESERVABLE
予約可能列は、ロックフリー予約を提供します。ロックフリー予約では、他の同時トランザクションがブロックされることなく、処理対象の予約可能列を更新できます。ロックフリー予約は、ホット・データのロックを短間隔で、トランザクションのコミット中に値が変更された場合のみ保持します。
列にRESERVABLE
を指定して、数値データ型の列で予約可能にします。
予約可能列のガイドラインと制限事項
-
ユーザー表のスキーマ定義は、
RESERVABLE
キーワードを使用して予約可能列を宣言します。 -
予約可能列は、
NUMBER
、INTEGER
およびFLOAT
の数値データ型の列にのみ指定できます。 -
予約可能列は集計タイプであるため、予約可能列を主キーまたはアイデンティティ列(または仮想列)にすることはできません。
-
ユーザー表には最大10個の予約可能列を含めることができます。
-
予約可能列が含まれるユーザー表には、主キーが必要です。
-
予約可能列では、索引はサポートされていません。
-
複合予約可能列は使用できません。予約可能列は
CHECK
制約式にのみ含めることができます。 -
CHECK
制約は、列レベルまたは表レベルに指定できます。ユーザー定義の操作上の制約は、アプリケーションの正確性を保証するために、予約可能列に使用されます。 -
予約可能列では、パーティション化を実行できません。予約可能列を削除したり、列を
UNUSED
とマークするには、保留中の予約があるトランザクションをファイナライズする必要があります。
関連項目:
-
『Database開発ガイド』のロックフリー予約の使用を参照してください。
-
『Database概要』の表および表クラスタの列の項を参照してください。
COLLATE
COLLATE
句を使用すると、列のデータ・バインドされた照合を指定できます。
column_collation_name
には、有効な名前付き照合または疑似照合を指定します。データ型CLOB
またはNCLOB
の列の場合、column_collation_name
の許容値のみが疑似照合USING_NLS_COMP
です。
この句を省略すると、列が次に割り当てられます。
-
疑似照合
USING_NLS_COMP
(列にデータ型CLOB
またはNCLOB
がある場合) -
対応する親キー列の照合(列が外部キーに属する場合)
-
列の作成時に示される表のデフォルトの照合
表のデフォルトの照合の詳細は、「DEFAULT COLLATION」句を参照してください。
COLLATE
句を指定できるのは、COMPATIBLE
初期化パラメータが12.2
以上に設定され、かつMAX_STRING_SIZE
初期化パラメータがEXTENDED
に設定されている場合のみです。
SORT
SORT
キーワードは、この表をハッシュ・クラスタの一部として作成する場合、およびクラスタ列でもある列にのみ有効です。
表の行はSORT
のないクラスタ・キー列のバケットにハッシュされ、この句を使用して、列の各バケット内でソートされます。これによって、クラスタ化データでの後続の操作時に、応答時間が短縮される場合があります。
関連項目:
-
クラスタ表の作成の詳細は、「CLUSTER句」を参照してください。
VISIBLE | INVISIBLE
この句を使用すると、column
をVISIBLE
にするか、INVISIBLE
にするかを指定できます。デフォルトは、VISIBLE
です。
INVISIBLE
の列は、ユーザー指定の非表示列です。INVISIBLE
の列を表示する場合や、この列に値を割り当てる場合は、この列の名前を明示的に指定する必要があります。たとえば:
-
SELECT
*
構文では、INVISIBLE
の列が表示されません。ただし、SELECT
文の選択リストにINVISIBLE
の列を含めると、その列は表示されるようになります。 -
INVISIBLE
の列の値は、INSERT
文のVALUES
句で、暗黙的に指定することはできません。INVISIBLE
の列は、列リストで指定する必要があります。 -
Oracle Call Interface (OCI)の説明で、
INVISIBLE
の列を明示的に指定する必要があります。 -
SQL*Plusを構成することで、
INVISIBLE
の列情報をDESCRIBE
コマンドで表示されるようにできます。詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。
VISIBLE列およびINVISIBLE列のノート
VISIBLE
列およびINVISIBLE
列には、次のノートがあります。
-
INVISIBLE
の列は、CREATE
TABLE
の一部として指定すると、パーティション化キーとして使用できます。 -
INVISIBLE
の列は、column_expression
内に指定できます。 -
仮想列は、
INVISIBLE
の列にすることができます。 -
PL/SQL
%ROWTYPE
属性では、INVISIBLE
列は表示されません。 -
データ・ディクショナリ・ビューの
ALL_
、DBA_
、およびUSER_TAB_COLUMNS
のCOLUMN_ID
列により、SELECT
*
問合せで返される表、ビューまたはマテリアライズド・ビューの列の順序が決まります。COLUMN_ID
の値は、INVISIBLE
の列についてはNULLになります。非表示の列を表示されるようにすると、この列には、最高値の次に利用可能なCOLUMN_ID
値が割り当てられます。表示可能な列を非表示の列にすると、その列のCOLUMN_ID
値はNULLに設定され、その列より大きい値のCOLUMN_ID
を持つ列のCOLUMN_ID
は、それぞれ1ずつ減らされます。
VISIBLE列およびINVISIBLE列の制限事項
VISIBLE
列およびINVISIBLE
列には、次の制限事項があります。
-
INVISIBLE
の列は、外部表、クラスタ表、または一時表ではサポートされません。 -
システム生成の非表示列を参照可能にすることはできません。
ノート:
ある列がシステム生成の非表示列であるかどうかを判断するには、データ・ディクショナリ・ビューの
ALL_
、DBA_
、およびUSER_TAB_COLS
のHIDDEN_COLUMN
列とUSER_GENERATED
列を問い合せます。詳細は、『Oracle Databaseリファレンス』を参照してください。
DEFAULT
DEFAULT
句を指定すると、後続のINSERT
文が列の値を省略した場合に列に割り当てられる値を指定できます。この式のデータ型は、列に指定したデータ型と一致している必要があります。列には、この式を保持できる大きさが必要です。
DEFAULT
式には、リテラル引数、列の参照またはネストしたファンクションの起動を戻さない、任意のSQLファンクションを含めることができます。
このDEFAULT
式には、順序疑似列のCURRVAL
とNEXTVAL
を含めることができます。ただし、順序が存在していて、その順序にアクセスするために必要な権限を所持している必要があります。それ以降に、DEFAULT
式を使用して挿入を実行するユーザーには、表に対するINSERT
権限と、順序に対するSELECT
権限が必要になります。順序が後に削除されると、それ以降のDEFAULT
式が使用されるINSERT
文はエラーになります。順序の所有者を指定して完全修飾(たとえば、SCOTT
.SEQ1
)していない場合、Oracle Databaseは、CREATE
TABLE
文を発行したユーザーを順序のデフォルトの所有者にします。たとえば、ユーザーMARY
がSCOTT
.TABLE
を作成して、SEQ2
のように完全修飾していない順序を参照すると、その列は順序MARY
.SEQ2
を使用するようになります。順序に対するシノニムは完全に名前解決され、完全修飾された順序としてデータ・ディクショナリに格納されます。これは、パブリック・シノニムとプライベート・シノニムに当てはまります。たとえば、ユーザーBETH
が、パブリック・シノニムまたはプライベート・シノニムのSYN1
を参照する列を追加したときに、そのシノニムがPETER
.SEQ7
を参照していると、その列はデフォルトとしてPETER
.SEQ7
を格納するようになります。
デフォルト列値の制限事項
デフォルト列値には、次の制限事項があります。
-
DEFAULT
式に、PL/SQLファンクション、他の列、疑似列LEVEL
、PRIOR
およびROWNUM
への参照または完全に指定されていない日付定数は指定できません。 -
式には、スカラー副問合せ式を除くすべての書式を使用できます。
関連項目:
expr
の構文は、「SQL式」を参照してください。
ON NULL
ON
NULL
句を指定すると、Oracle Databaseは、それ以降のINSERT
文でNULLに評価される値を割り当てようとするときに、DEFAULT
の列値を割り当てるようになります。
ON
NULL
を指定すると、NOT
NULL
制約と、NOT
DEFERRABLE
制約状態が暗黙的に指定されます。NOT
NULL
およびNOT
DEFERRABLE
と競合する表内制約を指定すると、エラーが発生します。
DEFAULT ON NULL FOR INSERT AND UPDATE
を指定すると、DEFAULT ON NULL
セマンティクスがINSERT
(マージおよびマルチテーブル・インサートの挿入ブランチを含む)と、UPDATE
(マージの更新ブランチを含む)に適用されます。
DEFAULT ON NULL FOR INSERT ONLY
を指定した場合、DEFAULT ON NULL
と同等です。つまり、DEFAULT ON NULL
セマンティクスが、マージおよびマルチテーブル・インサートの挿入ブランチのみを含めINSERT
に適用されることを意味します。
before行DMLトリガーでは、:new.column-name
はデフォルト値を示し、トリガー内のデフォルト値をオーバーライドできます。列がDEFAULT ON NULL FOR INSERT AND UPDATE
として定義され、トリガーによって値がNULL
に更新された場合、DEFAULT ON NULL
セマンティクスは適用されません。つまり、NULL
は列のデフォルト値に変換されません。
次のトリガーでは、列c2
にDEFAULT ON NULL
セマンティクスがあります。トリガーが実行されると、c2
がNULL
に設定されるため、エラーが発生します。
create or replace trigger t1_t before insert or update on t1 for each row begin :new.c2 := NULL; end;
ON NULL句の制限事項
この句は、オブジェクト型列またはREF
列には指定できません。
annotations_clause
annotation_name
は、最大4000文字の識別子です。注釈名が予約語の場合は、二重引用符で囲んで指定する必要があります。二重引用符で囲まれた識別子を使用すると、識別子に空白文字を含めることもできます。ただし、空白文字のみの識別子は受け入れられません。
例については、「表作成時の注釈の追加: 例」を参照してください
注釈句のセマンティクスの詳細は、「annotations_clause」を参照してください。
identity_clause
この句を使用すると、ID列を作成できます。このID列には、それ以降のINSERT
文ごとに、順序ジェネレータからの増加または減少する整数値が割り当てられます。identity_options
句を使用すると、順序ジェネレータを構成できます。
ALWAYS
ALWAYS
を指定すると、Oracle Databaseは、この列に値を割り当てるために、常に順序ジェネレータを使用するようになります。INSERT
またはUPDATE
を使用して、列に明示的に値を割り当てようとすると、エラーが返されます。これはデフォルトです。
BY DEFAULT
BY
DEFAULT
を指定すると、Oracle Databaseはデフォルトで順序ジェネレータを使用して列に値を割り当てますが、指定した値を列に明示的に割り当てることもできるようになります。ON
NULL
を指定すると、それ以降のINSERT
文でNULLに評価される値を割り当てようとしたときに、Oracle Databaseは順序ジェネレータを使用して列に値を割り当てます。セマンティクスの詳細は、column_definition
の「ON NULL」を参照してください。
identity_options
identity_options
句を使用すると、順序ジェネレータを構成できます。identity_options
句のパラメータは、CREATE
SEQUENCE
文と同じです。これらのパラメータと特性の詳細は、「CREATE SEQUENCE」を参照してください。identity_options
に固有のSTART
WITH
LIMIT VALUE
は例外であり、ALTER
TABLE
MODIFY
でのみ使用できます。詳細は、「identity_options」を参照してください。
ノート:
ID列を作成するときには、パフォーマンスを向上するために、デフォルトの20よりも大きな値を使用してCACHE
句を指定してください。
ID列の制限事項
ID列には、次の制限事項があります。
-
ID列は、表ごとに1列のみ指定できます。
-
identity_clause
を指定する場合は、column_definition
句のdatatype
に、数値データ型を指定する必要があります。ユーザー定義のデータ型は指定できません。 -
identity_clause
を指定すると、column_definition
にDEFAULT
句を指定できなくなります。 -
identity_clause
を指定すると、NOT
NULL
制約と、NOT
DEFERRABLE
制約状態が暗黙的に指定されます。NOT
NULL
およびNOT
DEFERRABLE
と競合する表内制約を指定すると、エラーが発生します。 -
ID列が暗号化されていると、その暗号化アルゴリズムが推測される可能性があります。ID列には、強い暗号化アルゴリズムを使用してください。
-
CREATE
TABLE
AS
SELECT
を使用すると、列に対するIDのプロパティが継承されなくなります。
関連項目:
encryption_spec
Oracle Database 23c以降、GOSTおよびSEEDアルゴリズム用のTransparent Data Encryption (TDE)復号化ライブラリは非推奨です。GOST 28147-89はロシア政府によって非推奨とされ、SEEDは韓国政府によって非推奨とされました。韓国政府が承認したTDE暗号化が必要である場合は、かわりにARIAを使用します。GOST 28147-89を使用している場合は、サポートされている別のTDEアルゴリズムを使用して、復号化および暗号化する必要があります。GOST 28147-89およびSEEDの復号化アルゴリズムはOracle Database 23cに含まれていますが非推奨となり、GOST暗号化アルゴリズムはOracle Database 23cでサポートが終了しました。TDE暗号化にGOSTまたはSEEDを使用している場合は、Oracle Database 23cにアップグレードする前に、別のアルゴリズムで復号化および暗号化することをお薦めします。ただし、HP Itaniumプラットフォームを除き、Oracle Database 23cではGOSTおよびSEED復号化ライブラリを使用できるため、アップグレード後に復号化することもできます。
ENCRYPT
句を指定すると、透過的データ暗号化(TDE)機能を利用して、定義する列を暗号化できます。暗号化できる列の型は、CHAR
、NCHAR
、VARCHAR2
、NVARCHAR2
、NUMBER
、DATE
、LOBおよびRAW
です。列を暗号化するユーザーなど、認可されたユーザーには、データは暗号化された形で表示されません。
ノート:
-
列を暗号化するには、適切な権限を持つシステム管理者が、セキュリティ・モジュールを初期化し、キーストアをオープンし、暗号化キーを設定しておく必要があります。列の暗号化の一般的な情報については、『Oracle Database Advanced Securityガイド』を参照してください。関連する
ALTER
SYSTEM
文については、「security_clauses」を参照してください。
USING 'encrypt_algorithm'
この句では、使用するアルゴリズムの名前を指定できます。有効なアルゴリズムは、AES256
、AES192
、AES128
および3DES168
です。COMPATIBLE
初期化パラメータが12
.2
以上に設定されている場合は、アルゴリズムARIA128
、ARIA192
、ARIA256
、GOST256
およびSEED128
も有効です。この句を省略すると、AES192
が使用されます。同じ表内の複数の列を暗号化するときに、ある1つの列に対してUSING
句を指定した場合は、暗号化する他のすべての列についても同じアルゴリズムを指定する必要があります。
IDENTIFIED BY password
この句を指定すると、指定したパスワードから列のキーが導出されます。
'integrity_algorithm'
この句では、使用する整合性アルゴリズムを指定できます。有効な整合性アルゴリズムは、SHA-1
およびNOMAC
です。
-
SHA-1
を指定すると、TDEによってSecure Hash Algorithm(SHA-1)が使用され、整合性チェック用として、暗号化された各値に20バイトのMessage Authentication Code(MAC)が追加されます。これはデフォルトです。 -
NOMAC
を指定すると、TDEによってMACは追加されず、整合性チェックも実行されません。この場合、暗号化された値ごとに20バイトのディスク領域が節約されます。NOMAC
を使用してディスク領域を節約し、パフォーマンスを向上させる方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。
表のすべての暗号化列で同じ整合性アルゴリズムが使用される必要があります。表の列ですでにSHA-1
アルゴリズムを使用している場合は、NOMAC
パラメータによって同じ表の別の列を暗号化することはできません。表のすべての暗号化列で使用されている整合性アルゴリズムを変更する方法を学習するには、ALTER TABLEのREKEY
encryption_spec句に関する説明を参照してください。
SALT | NO SALT
SALT
を指定すると、列のクリア・テキストを暗号化する前に、「salt」と呼ばれるランダムな文字列をクリア・テキストに追加するようデータベースに指示します。これはデフォルトです。
NO
SALT
を指定すると、列のクリア・テキストを暗号化する前に、データベースはクリア・テキストにsaltを追加しません。
暗号化する列に対してSALT
またはNO
SALT
を指定する場合、次の点を考慮してください。
-
列を索引キーとして使用する場合は、
NO
SALT
を指定する必要があります。このような場面で使用されるSALTの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。 -
表に対して表圧縮を指定した場合、
SALT
で暗号化される列内のデータは圧縮されません。
LOB暗号化に対しては、SALT
またはNO
SALT
を指定できません。
encryption_specの制限事項
列暗号化には、次の制限事項があります。
-
透過的データ暗号化は、従来のインポート/エクスポート・ユーティリティまたはトランスポータブル表領域ベースのエクスポートによってサポートされていません。かわりに、暗号化された列には、データ・ポンプ・インポート/エクスポート・ユーティリティを使用してください。
-
外部表の列を暗号化する場合、その表のアクセス・タイプとして
ORACLE_DATAPUMP
が使用されている必要があります。 -
SYS
が所有する表の列は暗号化できません。 -
外部キーの列は、暗号化できません。
関連項目:
透過的データ暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。
virtual_column_definition
virtual_column_definition
句によって、仮想列を作成できます。仮想列はディスクには格納されません。仮想列の値は、一連の式またはファンクションを計算することによって必要に応じて導出されます。仮想列は、問合せ、DMLおよびDDL文で使用できます。索引付けが可能であり、統計を収集できます。したがって、他の列と同様に処理できます。例外と制限は、「仮想列のノート:」および「仮想列の制限事項:」で説明します。
column
column
には、仮想列の名前を指定します。
datatype
オプションで、仮想列のデータ型を指定できます。datatype
を省略すると、列のデータ型は基礎となる式のデータ型に基づいて決定されます。すべてのOracleスカラー・データ型およびXMLType
がサポートされています。
COLLATE
COLLATE
句を使用すると、仮想列のデータ・バインドされた照合を指定できます。column_collation_name
には、有効な名前付き照合または疑似照合を指定します。この句を省略すると、対応する親キーの列から照合が継承される場合に列が外部キーに属していない場合は、列の作成時に示される表のデフォルトの照合に列が割り当てられます。表のデフォルトの照合の詳細は、「DEFAULT COLLATION」句を参照してください。
COLLATE
句を指定できるのは、COMPATIBLE
初期化パラメータが12.2
以上に設定され、かつMAX_STRING_SIZE
初期化パラメータがEXTENDED
に設定されている場合のみです。
VISIBLE | INVISIBLE
この句を使用すると、仮想列をVISIBLE
にするか、INVISIBLE
にするかを指定できます。デフォルトは、VISIBLE
です。詳細は、「VISIBLE | INVISIBLE」を参照してください。
GENERATED ALWAYS
オプション・キーワードGENERATED
ALWAYS
は、セマンティクスを明確にするためのものです。列はディスクには格納されませんが、必要に応じて評価されることが示されます。
column_expression
AS
column_expression
句によって、列の内容が決まります。column_expression
の詳細は、「列式」を参照してください。
VIRTUAL
オプション・キーワードVIRTUAL
は、セマンティクスを明確にするためのものです。
evaluation_edition_clause
column_expression
がエディショニングされたPL/SQLファンクションを参照する場合は、この句を指定する必要があります。この句を使用すると、エディショニングされたPL/SQLファンクションの名前解決時に検索されたエディション(評価エディション)を指定できます。
-
CURRENT
EDITION
を指定すると、このDDL文が実行されるエディションを検索できます。 -
EDITION
edition
を指定すると、edition
を検索できます。 -
NULL
EDITION
を指定することは、evaluation_edition_clause
を省略することと同じです。
evaluation_edition_clause
を省略すると、エディショニングされたオブジェクトは名前解決時に認識されなくなるためエラーが発生します。評価エディションが削除されると、それ以降の仮想列への問合せでエラーが発生します。
データベースは、仮想列が参照するファンクションの依存関係を維持しません。そのため、仮想列が非エディション・ファンクションを参照しているときに、そのファンクションをエディション・ファンクションにすると、次の操作でエラーが発生することがあります。
-
その仮想列への問合せ
-
その仮想列を含む行の更新
-
その仮想列にアクセスするトリガーの起動
関連項目:
仮想列に評価エディションを指定する方法の詳細は、『Oracle Database開発ガイド』を参照してください。
unusable_editions_clause
この句を使用すると、1つ以上のエディションで仮想列の式を問合せの評価に使用できないことを指定できます。残りの一連のエディションでは、オプティマイザが安全に仮想列の式を使用して問合せを評価できます。
たとえば、仮想列にファンクション索引を定義したとします。オプティマイザはそのファンクション索引を使用して、仮想列の式がWHERE
句に含まれる問合せを評価できます。問合せが、仮想列を使用できる一連のエディションに含まれるエディションでコンパイルされた場合、オプティマイザは、索引を使用して問合せを評価することを検討します。問合せが、仮想列を使用できる一連のエディションに含まれないエディションでコンパイルされた場合、オプティマイザは、索引を使用することを検討しません。
関連項目:
ファンクション索引を使用した最適化の詳細は、『Oracle Database概要』を参照してください。
UNUSABLE BEFORE句
この句を使用すると、先行のエディションで仮想列の式を問合せの評価に使用できないことを指定できます。
-
CURRENT
EDITION
を指定すると、このDDL文が実行されるエディションより前のエディションで仮想列の式が使用禁止になります。 -
EDITION
edition
を指定すると、指定したedition
より前のエディションで仮想列の式が使用禁止になります。
UNUSABLE BEGINNING WITH句
この句を使用すると、特定のエディション以降のエディションで仮想列の式を問合せの評価に使用できないことを指定できます。
-
CURRENT
EDITION
を指定すると、このDDL文が実行されるエディションと、それ以降のエディションで仮想列の式が使用禁止になります。 -
EDITION
edition
を指定すると、指定したedition
とそれ以降のエディションで仮想列の式が使用禁止になります。 -
NULL
EDITION
を指定することは、UNUSABLE
BEGINNING
WITH
句を省略することと同じです。
この句に指定したエディションがその後削除されても、仮想列への影響はありません。
仮想列のノート:
-
column_expression
で列レベルのセキュリティが実装された列を参照する場合、仮想列は基本列のセキュリティ・ルールを継承しません。この場合は、仮想列に対して列レベルのセキュリティ・ポリシーを複製するか、またはデータを暗黙的にマスクするファンクションを適用して、仮想列のデータを保護する必要があります。たとえば、一般的にクレジット・カード番号は列レベルのセキュリティ・ポリシーで保護しますが、コール・センターの従業員に対しては確認目的でクレジット・カード番号の下4桁を参照できるようにします。このような場合、クレジット・カード番号の下4桁のサブストリングを取るように仮想列を定義できます。 -
仮想列に定義された表の索引は、表のファンクション索引と同じです。
-
仮想列を直接更新することはできません。したがって、
UPDATE
文のSET
句に仮想列を指定することはできません。ただし、UPDATE
文のWHERE
句には仮想列を指定できます。同様に、DELETE
文のWHERE
句に仮想列を指定して、仮想列の導出値に基づいて表から行を削除できます。 -
仮想列を含む表を
FROM
句に指定する問合せは、結果キャッシュに適応します。結果キャッシュの詳細は、「RESULT_CACHEヒント」を参照してください。 -
作成時にファンクションに
DETERMINISTIC
が明示的に指定されている場合、column_expression
は、PL/SQLファンクションを参照できます。ただし、後でファンクションが置き換えられた場合、仮想列に依存する定義は無効にされません。そのような場合、表にデータが含まれていると、仮想列が制約、索引またはマテリアライズド・ビューの定義あるいは結果キャッシュで使用された場合に、仮想列を参照する問合せで不適切な結果が戻される場合があります。そのため、仮想列の決定的なPL/SQLファンクションを置き換えるために、次の手順を実行します。-
仮想列の制約を無効にして再度有効にします。
-
仮想列の索引を再作成します。
-
仮想列にアクセスするマテリアライズド・ビューを完全にリフレッシュします。
-
キャッシュされた問合せが仮想列にアクセスした場合、結果キャッシュをフラッシュします。
-
表の統計情報を再収集します。
-
-
仮想列は、
INVISIBLE
の列にすることができます。column_expression
には、INVISIBLE
の列を含めることができます。
仮想列の制限事項:
-
仮想列は、リレーショナル・ヒープ表にのみ作成できます。仮想列は、索引構成表、外部表、オブジェクト表、クラスタ化表または一時表ではサポートされません。
-
AS
句のcolumn_expression
には、次の制限事項があります。-
別の仮想列を名前で参照できません。
-
column_expression
で参照される列は、同じ表で定義されている必要があります。 -
決定的なユーザー定義ファンクションを参照できますが、その場合、仮想列をパーティション化キー列として使用できません。
-
column_expression
の出力は、スカラー値である必要があります。
関連項目:
column_expression
の詳細および制限事項は、「列式」を参照してください。 -
-
仮想列は、Oracleが提供するデータ型、ユーザー定義型、またはLOBまたは
LONG
RAW
にすることはできません。 -
パーティション列として使用する仮想列を定義する式には、PL/SQLファンクションへのコールを指定できません。
関連項目:
仮想列を持つ表の作成例は、「仮想表の列の追加: 例」および『Oracle Database管理者ガイド』を参照してください。
period_definition
period_definition
句を使用すると、table
の有効期間ディメンションを作成できます。
この句によって、table
の時制有効性のサポートが実装されます。この句を指定する場合、table
内の1つの列の開始時間列に開始日とタイムスタンプが含まれ、table
内の別の列の終了時間列に終了日とタイムスタンプが含まれます。これら2つの列によって、table
の有効期間ディメンション、つまり各行が有効と見なされる期間が定義されます。Oracleフラッシュバック問合せを使用すると、指定した時間の前の特定の時点で、または特定の期間中に有効と見なされるかどうかに基づいて、table
から行を取り出すことができます。
表の作成時には、最大で1つの有効期間ディメンションを指定できます。その後、ALTER
TABLE
のadd_period_clauseを使用して、他の有効期間ディメンションを表に追加できます。
valid_time_column
有効期間ディメンションの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。Oracle Databaseによって、この名前を持つNUMBER
データ型のINVISIBLE
仮想列がtable
内に作成されます。
start_time_columnおよびend_time_column
オプションで、次のようにこれらの句を指定できます。
-
start_time_column
は、開始日またはタイムスタンプを含む開始時間列の名前を指定するために使用します。 -
end_time_column
は、終了日またはタイムスタンプを含む終了時間列の名前を指定するために使用します。
start_time_column
とend_time_column
に指定する名前は、「データベース・オブジェクトのネーミング規則」に記載されている要件を満たしている必要があります。
これらの句を指定する場合、start_time_column
とend_time_column
をCREATE
TABLE
のcolumn_definition
句内で定義する必要があります。各列は日時データ型(DATE
、TIMESTAMP
, TIMESTAMP
WITH
TIME
ZONE
またはTIMESTAMP
WITH
LOCAL
TIME
ZONE
)にする必要があり、VISIBLE
またはINVISIBLE
にすることができます。
これらの句を指定しない場合、valid_time_column
_START
という開始時間列およびvalid_time_column
_END
という終了時間列が作成されます。これらの列のデータ型はTIMESTAMP
WITH
TIME
ZONE
であり、すべてINVISIBLE
です。
開始時間列と終了時間列の値は、他の列と同じように挿入および更新できます。考慮事項は次のとおりです。
-
開始時間列の値がNULLの場合、終了時間列の値(その値を含まない)よりも早い時間を示すすべての時間値の行が有効と見なされます。
-
終了時間列の値がNULLの場合、開始時間列の値(その値を含む)よりも遅い時間を示すすべての時間値の行が有効と見なされます。
-
どちらの列の値もNULLではない場合、開始時間列の値を終了時間列の値よりも早くする必要があります。開始時間列の値(その値を含む)よりも早い時間および終了時間列の値(その値を含まない)よりも遅い時間を示すすべての時間値の行が有効と見なされます。
-
どちらの列の値もNULLの場合、すべての時間値の行が有効と見なされます。
有効期間ディメンション列の制限事項
有効期間ディメンション列には、次の制限事項があります。
-
valid_time_column
は、内部使用のみを目的としています。DDLまたはDML操作は実行できませんが、1つ例外があります。ALTER
TABLE
のdrop_period_clause
を使用すると、列を削除できます。 -
開始時間列と終了時間列を削除する唯一の方法は、
ALTER
TABLE
のdrop_period_clause
を使用することです。 -
開始時間列と終了時間列がOracle Databaseによって自動的に作成された場合、それらは
INVISIBLE
になり、後からVISIBLE
には変更できません。
関連項目:
-
時制有効性の詳細は、『Oracle Database開発ガイド』を参照してください。
-
Oracleフラッシュバック問合せの詳細は、
「SELECT」
の「flashback_query_clause」を参照してください。 -
有効期間ディメンションを追加および削除する方法の詳細は、「
ALTER
TABLE
」の「add_period_clause」と「drop_period_clause」を参照してください
制約句
制約句を使用すると、表の列に対する制約を作成できます。DEFERRABLE
以外のPRIMARY
KEY
制約を索引構成表に指定してください。これらの制約の構文、詳細および使用例は、「constraint」を参照してください。
inline_ref_constraintおよびout_of_line_ref_constraint
これらの句を使用すると、REF
型の列を指定できます。これらの句の唯一の違いは、表レベルでout_of_line_ref_constraint
を指定することです。このため、定義するREF
型の列または属性を識別する必要があります。inline_ref_constraint
は、REF
型の列または属性の定義の一部として指定してください。
関連項目:
「REF制約の例」
inline_constraint
inline_constraint
を使用すると、整合性制約を列定義の一部として定義できます。
オブジェクト型の列のスカラー属性に、UNIQUE
制約、PRIMARY
KEY
制約およびREFERENCES
制約を作成できます。また、オブジェクト型の列のNOT
NULL
制約、オブジェクト型の列またはオブジェクト型の列の属性を参照するCHECK
制約も作成できます。
out_of_line_constraint
out_of_line_constraint
構文を使用すると、整合性制約を表定義の一部として定義できます。
supplemental_logging_props
supplemental_logging_props
句を指定すると、追加のデータがログ・ストリームに入れられ、ログに基づくツール製品をサポートできます。
supplemental_log_grp_clause
この句を使用すると、名前付きのログ・グループを作成できます。
-
NO
LOG
句を使用すると、REDOログから1つ以上の列を省略できます。この句を指定しない場合、これらの列は名前付きのログ・グループのREDOに含まれます。名前付きのログ・グループに、1つ以上の固定長列をNO
LOG
を使用せずに指定する必要があります。 -
ALWAYS
を指定すると、更新時にログ・グループのすべての列がREDOに含まれます。関連付けられた行が変更されるとログ・グループのすべての列に対してサプリメンタル・ロギングが行われるため、これは無条件ログ・グループといいます(「常時ログ・グループ」ともいいます)。ALWAYS
を指定しない場合、ログ・グループの任意の列が変更された場合のみ、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。これは、条件付きログ・グループといいます。
サプリメンタル・ロギングが指定されているかどうかを確認するには、適切なUSER_
、ALL_
またはDBA_LOG_GROUP_COLUMNS
データ・ディクショナリ・ビューを問い合せます。
supplemental_id_key_clause
この句を使用すると、主キー列、一意キー列および外部キー列のすべて、またはこれらの列の組合せを補足的に記録する必要があることを指定できます。Oracle Databaseは、無条件ログ・グループまたは条件付きログ・グループのいずれかを生成します。無条件ログ・グループでは、関連付けられた行が変更されると、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。条件付きログ・グループでは、ログ・グループの任意の列が変更された場合のみ、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。
-
ALL
COLUMNS
を指定すると、この行の最大サイズが固定長のすべての列がREDOログに含まれます。このようなREDOログは、システム生成無条件ログ・グループといいます。 -
PRIMARY
KEY
COLUMNS
を指定すると、主キーを持つすべての表において、更新が実行されるたびに、主キーのすべての列がREDOログに置かれます。Oracle Databaseは、次のとおりサプリメンタル・ロギングを行う列を評価します。-
まず、主キー制約が指定されている列が選択されます(制約が検証済か、または制約に
RELY
のマークが付いていて、DISABLED
およびINITIALLY
DEFERRED
のマークが付いていない場合)。 -
主キー列が存在しない場合、1つ以上の
NOT
NULL
列を持つ最小のUNIQUE
索引が検索され、この索引の列が使用されます。 -
このような索引が存在しない場合、表のすべてのスカラー列に対してサプリメンタル・ロギングが行われます。
-
-
UNIQUE
COLUMNS
を指定すると、一意キーまたはビットマップ索引を持つすべての表において、一意キー列またはビットマップ索引列が変更された場合、一意キーまたはビットマップ索引に属するその他のすべての列もREDOログに置かれます。このようなログ・グループは、システム生成条件付きログ・グループといいます。 -
FOREIGN
KEY
COLUMNS
を指定すると、外部キーを持つすべての表において、外部キー列が変更された場合、外部キーに属するその他のすべての列もREDOログに置かれます。このようなREDOログは、システム生成条件付きログ・グループといいます。
この句を複数回指定すると、指定するたびに個別のログ・グループが作成されます。サプリメンタル・ロギング・データが指定されているかどうかを確認するには、適切なUSER_
、ALL_
またはDBA_LOG_GROUPS
データ・ディクショナリ・ビューを問い合せます。
immutable_table_clauses
この句は、不変表の作成時に指定する必要があります。
例: 不変表の作成
次の例は、ユーザー・スキーマにtrade_ledger
という名前の不変表を作成します。この不変表は、非アクティブな状態で40日経過した後にのみ削除できます。行は、挿入後100日経過するまで削除できません。
CREATE IMMUTABLE TABLE trade_ledger (tr_id NUMBER, user_name VARCHAR2(40), tr_value NUMBER)
NO DROP UNTIL 40 DAYS IDLE
NO DELETE UNTIL 100 DAYS AFTER INSERT;
blockchain_table_clauses
ブロックチェーン表を作成するときは、blockchain_table_clauses
を指定する必要があります。
-
blockchain_drop_table_clause
-
blockchain_row_retention_clause
-
blockchain_hash_clause
-
blockchain_data_format_clause
blockchain_drop_table_clause
NO DROP [ UNTIL integer DAYS IDLE ]
integer
を使用して、ブロックチェーン表がアイドル状態である(つまり、行が挿入されない)必要がある日数を指定します。最小のアイドル状態保持期間は0日ですが、推奨されるアイドル状態保持期間は16日です。
この句は、次の2つの方法で指定できます。
-
NO DROP
は、ブロックチェーン表を削除できないことを意味します。 -
NO DROP UNTIL integer DAYS IDLE
は、最新行の経過日数がinteger
未満である場合、ブロックチェーン表は削除できないことを意味します。
blockchain_row_retention_clause
NO DELETE [ LOCKED ] | NO DELETE UNTIL integer DAYS AFTER INSERT [LOCKED]
-
integer
は、挿入された行を削除するまでのアイドル状態保持期間を指定します。挿入された行の最小のアイドル状態保持期間は16日です。 -
LOCKED
を指定すると、ALTER TABLE
を使用して保存期間を変更できません。 -
UNTIL number DAYS AFTER INSERT
句にLOCKED
を指定しない場合、ALTER TABLE
を使用して保存期間を変更できますが、変更できるのは前の保存期間よりも大きい値のみです。 -
NO DELETE LOCKED
を指定すると、この表から行を削除できません。しかし、表がblockchain_drop_table_clause
に指定された日数を超えて非アクティブな場合は、表全体を削除できます。
blockchain_hash_clause
HASHING USING sha2_512
ブロックチェーン表を作成するときは、最後にblockchain_drop_table_clause
とblockchain_row_retention_clause
の後にこの句を指定する必要があります。
ALTER TABLE
文を使用してブロックチェーン表を変更する場合、この句は指定できません。
blockchain_row_version_user_chain_clause
WITH ROW VERSION
この句はオプションで、VERSION
V2
ブロックチェーン表にのみ指定できます。この句では、最大3つのユーザー定義列を指定できます。row_version_name
で識別される行バージョン順序の名前は、ユーザー・チェーンの検証に使用されます。列の型は、NUMBER
、CHAR
、VARCHAR2
およびRAW
に制限されています。この句を指定した場合、指定したユーザー定義列の値が同じ行は、Oracle管理の非表示列ORABCTAB_ROW_VERSION$
を使用して順序付けられます。
例: 行のバージョン
CREATE BLOCKCHAIN TABLE bank_ledger (bank VARCHAR2(128), account_no NUMBER, deposit_date DATE, deposit_amount NUMBER) NO DROP UNTIL 31 DAYS IDLE NO DELETE LOCKED HASHING USING SHA2_512 WITH ROW VERSION ACCOUNT_NO (bank, account_no) VERSION V2;
AND USER CHAIN
オプションのAND USER CHAIN
句は、WITH ROW VERSION
句の一部としてVERSION
V2
ブロックチェーン表にのみ指定できます。行のバージョンで提供される機能を拡張し、これらの行を別の(ユーザー)ブロックチェーンにリンクします。ユーザー・チェーンを定義するために、最大3つのユーザー定義列を指定できます。ユーザー・チェーンの名前は、WITH ROW VERSION
句で指定されます。ユーザー・チェーン内の行の順序付けは、列ORABCTAB_ROW_VERSION$
を使用して行われます。暗号化ハッシュは、列ORABCTAB_USER_CHAIN_HASH$
に保持されます。ORABCTAB_USER_CHAIN_HASH$
は、V2
ブロックチェーン表で署名されていないことに注意してください。署名できるのは、システム暗号化ハッシュのみです(署名はORABCTAB_SIGNATURE$またはORABCTAB_DELEGATE_SIGNATURE$
列に格納されます)。
例: AND USER CHAIN
CREATE BLOCKCHAIN TABLE bank_ledger (bank VARCHAR2(128), account_no NUMBER, deposit_date DATE, deposit_amount NUMBER) NO DROP UNTIL 31 DAYS IDLE NO DELETE LOCKED HASHING USING SHA2_512 WITH ROW VERSION AND USER CHAIN bank_accounts (bank, account_no) VERSION V2;
blockchain_system_chains_clause
この句を指定して、インスタンス当たりのデフォルトである32システム・チェーンをオーバーライドします。この句によって構成されるシステム・チェーンの数は、1から1024の間にする必要があります。
blockchain_data_format_clause
ブロックチェーン表を作成するときに、V1
またはv2
のいずれかのバージョンを指定する必要があります。バージョンV2
では、V1
よりもOracle管理の非表示列が追加で作成されます。
ALTER TABLE
を使用してバージョンをV1
からV2
に、またはその逆に変換することはできません。
例: HASHINGおよびVERSION
CREATE BLOCKCHAIN TABLE bank_ledger (bank VARCHAR2(128), deposit_date DATE, deposit_amount NUMBER) NO DROP UNTIL 31 DAYS IDLE NO DELETE LOCKED HASHING USING SHA2_512 VERSION V2;
DEFAULT COLLATION
この句を使用すると、表のデフォルトの照合を指定できます。デフォルトの照合は、文字データ型の表の列に割り当てられ、この文で作成されるか、ALTER
TABLE
文で表に後から追加されます。collation_name
には、有効な名前付き照合または疑似照合を指定します。
この句を省略した場合、表のデフォルトの照合は、表を含むスキーマの有効スキーマのデフォルトの照合に設定されます。有効なスキーマのデフォルトの照合の詳細は、「ALTER
SESSION
」のDEFAULT_COLLATION句を参照してください。
表のデフォルトの照合を上書きし、データ・バインドされた照合を特定の列に割り当てるには、CREATE
TABLE
またはALTER
TABLE
のcolumn_definition
句またはvirtual_column_definition
句に、またはALTER
TABLE
のmodify_col_properties
句またはmodify_virtcol_properties
句にCOLLATE
句を指定します。
DEFAULT
COLLATION
句を指定できるのは、COMPATIBLE
初期化パラメータが12.2
以上に設定され、かつMAX_STRING_SIZE
初期化パラメータがEXTENDED
に設定されている場合のみです。
CLOB列およびNCLOB列の照合の制限事項
列にCLOB
またはNCLOB
のデータ型がある場合は、その指定された照合をUSING_NLS_COMP
にする必要があります。CLOB
列およびNCLOB
列の照合は常にUSING_NLS_COMP
であり、表のデフォルトの照合の影響は受けません。
関連項目:
デフォルトの照合およびデータ・バインドされた照合の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
ON COMMIT
ON
COMMIT
句は、グローバル一時表を作成する場合にのみ有効です。この句を使用すると、一時表のデータがトランザクションまたはセッションの存続期間中保持されるかどうかを指定できます。
DELETE ROWS
DELETE
ROWS
は、トランザクション固有の一時表に対して指定します。これはデフォルトです。各コミット後に表が切り捨てられます(すべての行が削除されます)。
PRESERVE ROWS
PRESERVE
ROWS
は、セッション固有の一時表に対して指定します。セッション終了時に表が切り捨てられます(すべての行が削除されます)。
プライベート一時表の有効範囲は、ON COMMIT
を使用して定義できます。DROP DEFINITION
を使用してトランザクション固有の表を定義し、PRESERVE
DEFINITION
を使用してセッション固有の表を定義します。
DROP DEFINITION
トランザクションのコミット時にその内容と定義が削除されるプライベート一時表を作成するには、DROP
DEFINITION
を指定します。このプライベート一時表の有効範囲はトランザクションに制限されています。これはデフォルトです。
PRESERVE DEFINITION
トランザクションのコミット時にその定義が維持されるプライベート一時表を作成するには、PRESERVE
DEFINITION
を指定します。このプライベート一時表の有効範囲は、セッションに拡大されます。
physical_properties
物理プロパティは、エクステントとセグメントの処理、および表の記憶特性に関係します。
内部パーティションを指定するにはINTERNAL
キーワードを使用します。これはデフォルトです。外部パーティションを指定するにはEXTERNAL
キーワードを使用します。
deferred_segment_creation
この句を使用すると、この表のセグメントを作成するタイミングを指定できます。
-
SEGMENT
CREATION
DEFERRED
: 表のセグメント、表のLOB列のセグメント、表作成の一部として暗黙的に作成される索引、およびその後で明示的に表に作成される索引の作成が遅延されます。これらは、最初のデータ行が表に挿入された後に作成されます。このとき、表のセグメント、LOB列と索引、および明示的に作成される索引がすべて実体化され、このCREATE
TABLE
文(明示的に作成される索引の場合は、CREATE
INDEX
文)に指定されたすべての記憶域プロパティが継承されます。これらのセグメントは、最初の挿入操作がコミットされていないか、ロールバックされたかに関係なく作成されます。これはデフォルト値です。注意:
遅延セグメント作成を使用する表を多く作成する場合、データベースに十分な領域を割り当て、最初の行の挿入時にすべての新しいセグメントに対して十分な領域が確保されるようにしてください。
-
SEGMENT
CREATION
IMMEDIATE
: 表のセグメントは、このCREATE
TABLE
文の一部として作成されます。
即時セグメント作成は、たとえば、アプリケーションがDBA_
、USER_
およびALL_SEGMENTS
データ・ディクショナリ・ビューに表示されるオブジェクトに依存している場合に有効です。このようなオブジェクトは、セグメントが作成されるまでビューに表示されないためです。この句によって、DEFERRED_SEGMENT_CREATION
初期化パラメータの設定が上書きされます。
既存の表、そのLOB列または索引にセグメントが作成されているかどうかを確認するには、USER_TABLES
、USER_INDEXES
またはUSER_LOBS
のSEGMENT_CREATED
列を問い合せます。
セグメントのない表のノート
セグメントが実体化されていない表には、次のルールが適用されます。
-
この表を
CREATE
TABLE
...AS
副問合せを使用して作成する場合は、ソース表に行がなければ、新しい表のセグメントの作成は遅延されます。ソース表に行がある場合は、新しい表のセグメントは遅延なしで作成されます。
-
セグメントが実体化されないうちに
ALTER
TABLE
...ALLOCATE
EXTENT
を指定すると、セグメントが実体化され、エクステントが割り当てられます。ただし、表の索引に対するDDL文のALLOCATE
EXTENT
句からはエラーが戻されます。 -
表、そのLOB列または索引に対するDDL文の場合は、
DEALLOCATE
UNUSED
を指定しても無視されます。 -
セグメントが作成されていない表または表パーティションの索引に対する
ONLINE
操作は、特に警告もなく無効になり、OFFLINE
操作として実行されます。 -
1つ以上のLOB列がある表で次のいずれかのDDL文を実行すると、結果のパーティションまたはサブパーティションが実体化されます。
-
ALTER
TABLE
SPLIT
[SUB]PARTITION
-
ALTER
TABLE
MERGE
[SUB]PARTITIONS
-
ALTER
TABLE
ADD
[SUB]PARTITION
(ハッシュ・パーティションのみ) -
ALTER
TABLE
COALESCE
[SUB]PARTITION
(ハッシュ・パーティションのみ)
-
遅延セグメント作成の制限事項
この句には、次の制限事項があります。
-
クラスタ化表、グローバル一時表、セッション固有の一時表、内部表、外部表、および
SYS
、SYSTEM
、PUBLIC
、OUTLN
またはXDB
が所有する表に対して、セグメント作成を遅延させることはできません。 -
遅延セグメント作成は、ディクショナリ管理表領域ではサポートされていません。
-
遅延セグメント作成は、
SYSTEM
表領域ではサポートされていません。 -
シリアル化可能トランザクションは、遅延セグメント作成では動作しません。セグメントが作成されていない空の表にデータを挿入しようとすると、エラーになります。
関連項目:
セグメント割当ての概要は、『Oracle Database概要』を参照してください。DEFERRED_SEGMENT_CREATION
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
segment_attributes_clause
segment_attributes_clause
を指定すると、表の物理属性および表領域の記憶域を指定できます。
physical_attributes_clause
physical_attributes_clause
を使用すると、PCTFREE
、PCTUSED
、INITRANS
パラメータの値、および表の記憶特性を指定できます。
-
非パーティション表の場合、指定した各パラメータおよび記憶特性は、表に関連付けられたセグメントの実際の物理属性となります。
-
パーティション表の場合、パーティション作成文の
PARTITION
句で明示的に値を上書きしないかぎり、指定したパラメータおよび記憶特性の値は、CREATE
文(および後続のALTER
TABLE
...ADD
PARTITION
文)で指定するすべてのパーティションに関連付けられたセグメントのデフォルト物理属性になります。
この句を省略すると、PCTFREE
は10、PCTUSED
は40、INITRANS
は1に設定されます。
関連項目:
-
これらの句の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。
Oracle Databaseが、表、オブジェクト表OIDINDEX
、パーティション、LOBデータ・セグメント、LOB索引セグメントまたは索引構成表のオーバーフロー・データ・セグメントを作成する表領域を指定します。TABLESPACE
を省略した場合、その表を含むスキーマの所有者のデフォルトの表領域内に作成されます。
1つ以上のLOB列を持つヒープ構成表の場合、LOB記憶域に対するTABLESPACE
を省略すると、表を作成する表領域にLOBデータおよび索引セグメントが作成されます。
1つ以上のLOB列を持つ索引構成表の場合、TABLESPACE
を省略すると、索引構成表の主キー索引セグメントが作成された表領域に、LOBデータおよび索引セグメントが作成されます。
非パーティション表の場合、TABLESPACE
に指定する値は、表に関連付けられたセグメントの実際の物理属性となります。パーティション表の場合、TABLESPACE
に指定する値は、PARTITION
記述でTABLESPACE
を指定しないかぎり、このCREATE
文(および後続のALTER
TABLE
... ADD
PARTITION
文)で指定されたすべてのパーティションに関連付けられたセグメントのデフォルト物理属性となります。
関連項目:
表領域の詳細は、「CREATE TABLESPACE」を参照してください。
TABLESPACE SET
この句は、CREATE
TABLE
のSHARDED
キーワードを指定してシャード表を作成する場合にのみ有効です。この句を使用して、Oracle Databaseが表を作成する表領域セットを指定します。
CREATE SHARDED TABLE
文を使用するとき、1つの表ファミリに関連付けられる表領域セットは1つだけです。複数の表ファミリを持つ表領域セットを使用しようとすると、エラーがスローされます。
logging_clause
表、および制約のために必要な索引、パーティションまたはLOBの記憶特性の作成をREDOログ・ファイルに記録する(LOGGING
)かしないか(NOLOGGING
)を指定します。表のロギング属性は、その索引の属性に依存しません。
表、パーティションまたはLOBの記憶域に対して、後で実行されるダイレクト・ローダー(SQL*Loader)操作およびダイレクト・パスINSERT
操作のログをとる(LOGGING
)かとらない(NOLOGGING
)かも指定します。
この句の詳細は、「logging_clause」を参照してください。
table_compression
table_compression
句は、ヒープ構成表に対してのみ有効です。この句を使用すると、ディスク使用量を削減するためにデータ・セグメントを圧縮するかどうかを指定できます。COMPRESS
句を使用すると、表を圧縮できます。NOCOMPRESS
句を指定すると、表の圧縮が無効になります。デフォルトはNOCOMPRESS
です。
COMPRESS
キーワードCOMPRESS
のみを指定することは、ROW
STORE
COMPRESS
BASIC
を指定することと同じであり、基本表圧縮が使用可能になります。
ROW STORE COMPRESS BASIC
ROW
STORE
COMPRESS
またはROW
STORE
COMPRESS
BASIC
を指定して表の圧縮を使用可能にすると、基本表圧縮が使用可能になります。Oracle Databaseでは、表の圧縮が効果的である場合に、ダイレクト・パス・インサート操作中にデータの圧縮を開始します。元のインポート・ユーティリティ(imp)はダイレクト・パス・インサートをサポートしないため、圧縮フォーマットでデータをインポートすることはできません。
基本表圧縮が指定された表では、physical_attributes_clause
でPCTFREE
の値を明示的に設定しないかぎり、PCTFREE
値0を使用して圧縮が最大化されます。
以前のリリースでは、基本表圧縮はCOMPRESS
BASIC
を使用することで有効になっていました。この構文は、下位互換性のために引き続きサポートされています。
関連項目:
ダイレクト・パスINSERT
操作の制限などの詳細は、「従来型INSERTおよびダイレクト・パスINSERT」を参照してください。
ROW STORE COMPRESS ADVANCED
ROW
STORE
COMPRESS
ADVANCED
を指定して表の圧縮を有効にすると、高度な行圧縮が有効になります。Oracle Databaseは表でのすべてのDML操作中にデータの圧縮を開始します。OLTP環境にはこの圧縮形式をお薦めします。
ROW
STORE
COMPRESS
ADVANCED
またはNOCOMPRESS
が指定された表では、PCTFREE
のデフォルトを明示的に上書きしないかぎり、デフォルト値10を使用して、圧縮を最大限にしながらデータへの今後のDML変更も考慮します。
以前のリリースでは、OLTP表圧縮と呼ばれる高度な行圧縮は、COMPRESS
FOR
OLTP
を使用することで有効になっていました。この構文は、下位互換性のために引き続きサポートされています。
COLUMN STORE COMPRESS FOR { QUERY | ARCHIVE }
COLUMN
STORE
COMPRESS
FOR
QUERY
またはCOLUMN
STORE
COMPRESS
FOR
ARCHIVE
を指定すると、ハイブリッド列圧縮が有効になります。ハイブリッド列圧縮を使用すると、ダイレクト・パス・インサート、従来型の挿入および配列挿入中にデータを圧縮できます。ロード処理中にデータが列指向の書式に変換されてから、圧縮されます。指定したレベルに適した圧縮アルゴリズムがOracle Databaseで使用されます。一般的に、レベルが高くなるほど、圧縮率は大きくなります。ハイブリッド列圧縮を使用すると高い圧縮率が得られますが、CPUコストも高くなります。そのため、この圧縮形式は更新頻度が高くないデータに使用することをお薦めします。
COLUMN
STORE
COMPRESS
FOR
QUERY
は、データ・ウェアハウス環境で有効です。有効な値はLOW
およびHIGH
で、HIGH
の方が高い圧縮率が得られます。デフォルトはHIGH
です。
COLUMN
STORE
COMPRESS
FOR
ARCHIVE
を使用すると、COLUMN
STORE
COMPRESS
FOR
QUERY
より高い圧縮率が得られます。長期間格納するデータを圧縮する場合に有効です。有効な値はLOW
およびHIGH
で、HIGH
を指定すると実行可能な最も高い圧縮率が得られます。デフォルトはLOW
です。
COLUMN
STORE
COMPRESS
を指定することは、COLUMN
STORE
COMPRESS
FOR
QUERY
HIGH
を指定することと同じです。
COLUMN
STORE
COMPRESS
FOR
QUERY
またはCOLUMN
STORE
COMPRESS
FOR
ARCHIVE
が指定された表では、physical_attributes_clause
でPCTFREE
の値を明示的に設定しないかぎり、PCTFREE
値に0を使用して圧縮を最大限にします。これらの表では、PCTFREE
は、ダイレクト・パスINSERT
を使用してロードしたブロックには影響しません。PCTFREE
は、従来型INSERT
を使用してロードしたブロック、およびダイレクト・パスINSERT
を使用して最初にロードしたブロックに対してDML操作を行った結果作成されるブロックに適用されます。
[NO] ROW LEVEL LOCKING
ROW
LEVEL
LOCKING
を指定する場合、Oracle DatabaseはDML操作中に行レベル・ロックを使用します。これにより、ハイブリッド列圧縮したデータにアクセスする場合にこれらの操作のパフォーマンスが向上します。NO
ROW
LEVEL
LOCKING
を使用する場合、行レベル・ロックは使用されません。デフォルトはNO
ROW
LEVEL
LOCKING
です。
以前のリリースでは、ハイブリッド列圧縮は、COMPRESS
FOR
QUERY
およびCOMPRESS
FOR
ARCHIVE
を使用することで有効になっていました。この構文は、下位互換性のために引き続きサポートされています。
関連項目:
一部のOracleストレージ・システムに備わっているハイブリッド列圧縮機能の詳細は、『Oracle Database概要』を参照してください。
表の圧縮のノート
表の圧縮は、ヒープ構成表の次の部分に対して指定できます。
-
表全体の場合は、
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_desc
句のtable_partition_description
で指定します。 -
ネストした表の記憶表の場合は、
nested_table_col_properties
句で指定します。関連項目:
DBMS_COMPRESSION
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。これは、アプリケーションに適した圧縮レベルを選択するのに役立つパッケージです。例を含む表の圧縮の詳細は、『Oracle Database管理者ガイド』を参照してください。
表の圧縮の制限事項
表の圧縮には、次の制限事項があります。
-
BasicFiles LOBのデータ・セグメントは圧縮されません。SecureFiles LOBの圧縮の詳細は、「LOB_compression_clause」を参照してください。
-
COMPRESS
BASIC
を使用する表の列は削除できませんが、未使用に設定することはできます。ROW
STORE
COMPRESS
ADVANCED
、COLUMN
STORE
COMPRESS
FOR
QUERY
およびCOLUMN
STORE
COMPRESS
FOR
ARCHIVE
を使用する表では、ALTER
TABLE
...drop_column_clause
のすべての操作が有効です。 -
索引構成表、オーバーフロー・セグメント、オーバーフロー・セグメントのパーティションまたは索引構成表のマッピング表セグメントには、どのタイプの表の圧縮も指定できません。
-
外部表またはクラスタの一部である表には、どのタイプの表の圧縮も指定できません。
-
LONG
列またはLONG
RAW
列を持つ表、SYS
スキーマによって所有されたSYSTEM
表領域内の表、あるいはROWDEPENDENCIES
が使用可能な表に対しては、どのタイプの表の圧縮も指定できません。 -
フラッシュバック・アーカイブに対応した表に対しては、ハイブリッド列圧縮は指定できません。
-
オブジェクト表、
XMLType
表、抽象データ型を持つ列、表として格納されるコレクションまたはOPAQUE型(オブジェクトとして格納されるXMLType
列を含む)のオブジェクト・リレーショナル機能に対しては、ハイブリッド列圧縮は指定できません。 -
ハイブリッド列圧縮で圧縮された表の行を更新すると、行の
ROWID
が変更される可能性があります。 -
ハイブリッド列圧縮で圧縮された表では、単一の行に対する更新によって複数の行がロックされる可能性があります。そのため、書込みトランザクションの同時実効性が影響を受ける場合があります。
-
ハイブリッド列圧縮で圧縮された表に外部キー制約が定義されている場合、
INSERT
にAPPEND
ヒントを指定してデータを挿入すると、挿入するデータは通常のハイブリッド列圧縮より低いレベルで圧縮されます。ハイブリッド列圧縮でデータを圧縮するには、外部キー制約を使用禁止にし、INSERT
にAPPEND
ヒントを指定してデータを挿入してから、外部キー制約を使用可能にします。
inmemory_table_clause
この句を使用して、インメモリー列ストア(IM列ストア)の表を有効化または無効化します。IM列ストアは任意に入力できる静的なSGAプールです。ここには、迅速にスキャンできるように最適化された特殊な列形式で、表のコピーおよびパーティションが格納されています。IM列ストアでは、バッファ・キャッシュは置換しませんが、両方のメモリー領域において同じデータを異なる形式で格納するための補足としての役割を果たします。
-
INMEMORY
を指定して、IM列ストアの表を有効化します。オプションで
inmemory_attributes
句を使用して、表データをIM列ストアに格納する方法を指定できます。この句を使用すると、データ圧縮方法およびデータ移入優先度を指定できます。Oracle RAC環境では、Oracle RACインスタンス間のデータの分散および複製方法も指定できます。詳細は、inmemory_attributes句を参照してください。 -
NO
INMEMORY
を指定して、IM列ストアの表を無効化します。 -
inmemory_column_clause
を指定して、IM列ストアの特定の表の列を有効化または無効化し、特定の列のデータ圧縮方法を指定します。詳細は、「inmemory_clause」を参照してください。 -
INMEMORY ALL
を指定して、すべての列をインメモリーとしてマークします。NO INMEMORY ALL
を指定して、すべての列を非インメモリーとしてマークします。これらのオプションは、最初に表の列に適用されます。同じDDLで
INMEMORY ALL
およびNO INMEMORY ALL
を指定することはできません。
この句を省略すると、作成される表領域のデフォルトのIM列ストア設定が表に割り当てられます。表領域のデフォルトのIM列ストア設定の指定の詳細は、CREATE
TABLESPACE
のinmemory_clauseを参照してください。
Oracle Active Data Guard環境では、プライマリ・データベースの表にこの句を指定した場合、表はOracle Active Data GuardインスタンスのIM列ストアに対して有効化または無効化されます。
ノート:
INMEMORY_CLAUSE_DEFAULT
の初期化パラメータを使用すると、新しい表およびマテリアライズド・ビューに対してデフォルトのIM列ストア句を指定できます。INMEMORY_CLAUSE_DEFAULT初期化パラメータの詳細は、Oracle Databaseリファレンスを参照してください。
インメモリー列ストアの制限事項
インメモリー列ストアには、次の制限事項があります。
-
INMEMORY
句は、索引構成表には指定できません。 -
SYS
スキーマによって所有され、SYSTEM
またはSYSAUX
表領域にある表のINMEMORY
句は指定できません。 -
Oracle Database 18c以降は、外部表に対して
INMEMORY
句を指定できます。DDLが適切に解析できるようにするには、QUERY_REWRITE_INTEGRITY
初期化パラメータをstale_tolerated
に設定する必要があります。INMEMORY
が指定されている場合、ALTER
によってポリシーをstale_tolerated
以外に変更することはできません。 -
IM列ストアは、
LONG
またはLONG
RAW
列、表外列(LOB列、VARRAY列、ネストした表の列)または拡張データ型列をサポートしません。IM列ストアの表を有効化し、これらの型の列が含まれる場合、列はIM列ストアに移入されません。 -
IM列ストアに対して仮想列を含む表を有効化した場合、列がIM列ストアに移入されるのは、
INMEMORY_VIRTUAL_COLUMNS
初期化パラメータの値がENABLED
で、仮想列のSQL式がIM列ストアに対して有効化されている列のみを参照する場合のみです。
関連項目:
IM列ストアの概要は、『Oracle Database In-Memoryガイド』を参照してください。
inmemory_attributes
inmemory_memcompress
、inmemory_priority
、inmemory_distribute
およびinmemory_duplicate
句を使用して、表データをIM列ストアに格納する方法を指定します。
inmemory_spatial
句を指定すると、SDO_GEOMETRY
型の空間列にインメモリー属性を適用できます。
inmemory_memcompress
この句を使用して、IM列ストアに格納される表データの圧縮方法を指定します。このデータは、インメモリー・データと呼ばれます。
インメモリー・データを圧縮しないようデータベースに指示するには、NO
MEMCOMPRESS
を指定します。
削除、再圧縮、移入などのアクションを含むセグメントを管理するようデータベースに指示するには、MEMCOMPRESS
AUTO
を指定します。
インメモリー・データを圧縮するようデータベースに指示するには、MEMCOMPRESS
FOR
の後に次の方法のいずれかを指定します。
-
DML
- この方法はDML操作に対して最適化され、ほとんどデータ圧縮は実行されません。 -
QUERY
-QUERY
の指定は、QUERY
LOW
の指定と同じです。 -
QUERY
LOW
- この方法は最小限にインメモリー・データを圧縮する(DML
を除く)ため、最適な問合せパフォーマンスが得られます。これはデフォルトです。 -
QUERY
HIGH
- この方法はQUERY
LOW
よりインメモリー・データを圧縮しますが、CAPACITY
LOW
ほどではありません。 -
CAPACITY
-CAPACITY
の指定は、CAPACITY
LOW
の指定と同じです。 -
CAPACITY
LOW
- この方法はQUERY
HIGH
よりインメモリー・データを圧縮し、CAPACITY
HIGH
ほどではありませんが、優れた問合せパフォーマンスが得られます。 -
CAPACITY
HIGH
- この方法は最大限にインメモリー・データを圧縮し、適切な問合せパフォーマンスを得られます。
memcompressレベルはDDLを介して指定できますが、移入時には無視されます。すべてのインメモリー圧縮ユニット(IMCU)は、QUERY LOW
として透過的に移入されます。
inmemory_priority
PRIORITY
句を使用して、IM列ストアの表データのデータ移入優先度を指定します。この句が制御するのは、移入の優先度であり、移入の速度ではありません。
-
オンデマンドの移入には
NONE
を指定します。この場合、表が全表スキャンによってアクセスされるときに、データベースはIM列ストアに表データを移入します。表がアクセスされない場合、またはROWIDによる索引スキャンまたはフェッチによってのみアクセスされる場合は、移入は行われません。これはデフォルトです。 -
優先度ベースの移入には、優先度レベル
LOW
、MEDIUM
、HIGH
またはCRITICAL
のいずれかを指定します。この場合、データベースは、内部的に管理された優先度キューを使用してIM列ストアに表データを自動的に移入します。全体スキャンは移入に必要な条件ではありません。データベースは、指定された優先度レベルに基づいて表データの移入をキューに入れます。たとえば、INMEMORY
PRIORITY
CRITICAL
が設定された表は、INMEMORY
PRIORITY
HIGH
が設定された表より優先され、同様に、この表はINMEMORY
PRIORITY
LOW
が設定された表より優先されます。IM列ストアに十分な領域がない場合、データベースは領域が使用可能になるまで追加の表データを移入しません。
inmemory_distribute
Oracle Real Application Clusters (Oracle RAC)またはOracle Active Data Guardを使用している場合のみ、DISTRIBUTE
句を適用できます。これを使用すると、IM列ストアの表データをOracle RACインスタンス間で分散する方法を指定し、データの移入に適したデータベース・インスタンスを指定できます。
AUTOおよびBY
AUTO
句およびBY
句を使用して、IM列ストアの表データをOracle RACインスタンス間で分散する方法を指定します。次のオプションを指定できます。
-
AUTO
- Oracle DatabaseがOracle RACインスタンス間のデータの分散方法を制御します。アクセス・パターンに応じて、大きい表がOracle RACインスタンス間で分散されます。小さい表がインスタンス間で分散される場合があります。これはデフォルトです。 -
BY
ROWID
RANGE
- 特定の範囲のROWIDのデータが異なるOracle RACインスタンスに分散されます。 -
BY
PARTITION
- パーティションのデータが異なるOracle RACインスタンスに分散されます。 -
BY
SUBPARTITION
- サブパーティションのデータが異なるOracle RACインスタンスに分散されます。
AUTO
およびBY
は、Active Data Guardのプライマリ・インスタンスとスタンバイ・インスタンスの間ではなく、単一のOracle RACデータベースのインスタンス間でオブジェクトのインメモリー圧縮単位(IMCU)を分散する場合にのみ使用できます。
FOR SERVICE
FOR
SERVICE
句を使用して、オブジェクトの移入に適したOracle RACまたはOracle Active Data Guardのインスタンスを指定します。次のオプションを指定できます。
-
DEFAULT
- このオブジェクトは、PARALLEL_INSTANCE_GROUP
初期化パラメータで指定したすべてのインスタンスに対する移入の対象となります。このパラメータが設定されていない場合は、すべてのインスタンスでオブジェクトが移入されます。これはデフォルトです。 -
ALL
-PARALLEL_INSTANCE_GROUP
初期化パラメータの値にかかわらず、このオブジェクトはすべてのインスタンスに対する移入の対象になります。 -
service_name
- オブジェクトは指定したサービスに属するインスタンスに対してのみ、およびサービスがアクティブでインスタンス上でブロックされていない場合にのみ移入の対象となります。 -
NONE
- このオブジェクトは、すべてのインスタンスに対する移入の対象になりません。このオプションを使用すると、表の他のインメモリー属性を維持しつつ、IM列ストアへの移入を無効にできます。これらの属性が有効になるのは、FOR
SERVICE
DEFAULT
、FOR
SERVICE
ALL
、またはALTER
TABLE
文のinmemory_distribute
句のFOR
SERVICE
service_name
を指定して、表のIM列ストアへの移入を後から有効にする場合です。
Oracle RACでは、FOR
SERVICE
句は、Oracle RACデータベース内のインスタンスを指定します。Active Data Guardでは、プライマリ・データベースおよびスタンバイ・データベースは単一インスタンスまたはOracle RAC構成を使用できます。Active Data Guardでは、FOR
SERVICE
句でプライマリ・データベースのインスタンス、スタンバイ・データベースのインスタンスまたはプライマリ・インスタンスとスタンバイ・インスタンスの組合せを指定します。
inmemory_duplicate
エンジニアド・システムでOracle Real Application Clusters (Oracle RAC)を使用している場合のみ、DUPLICATE
句を適用できます。IM列ストアの表データをOracle RACインスタンス間で複製する方法を制御します。次のオプションを指定できます。
-
DUPLICATE
- データが1つのOracle RACインスタンスで複製され、合計2つのOracle RACインスタンスにデータが存在するようになります。 -
DUPLICATE
ALL
- データがすべてのOracle RACインスタンス間で複製されます。DUPLICATE
ALL
を指定する場合、inmemory_distribute
句の指定方法に関係なく、データベースはDISTRIBUTE
AUTO
設定を使用します。 -
NO
DUPLICATE
- データがOracle RACインスタンス間で複製されません。これはデフォルトです。
inmemory_column_clause
この句を使用して、IM列ストアの特定の表の列を有効化または無効化し、特定の列のデータ圧縮方法を指定します。NO
INMEMORY
表の作成時にこの句を指定した場合、IM列ストアで表またはパーティションが後で有効になると、列設定が有効になります。
-
INMEMORY
を指定して、IM列ストアの指定された表の列を有効化します。オプションで
inmemory_memcompress
句を使用して、特定の列のデータ圧縮方法を指定できます。「inmemory_memcompress」を参照してください。inmemory_memcompress
句を省略すると、表の列には、表のデータ圧縮方法が使用されます。特定の表の列のPRIORITY
、DISTRIBUTE
またはDUPLICATE
設定を指定できません。これらの設定は、表とすべての表の列で同じです。 -
NO
INMEMORY
を指定して、IM列ストアの指定された表の列を無効化します。
inmemory_column_clause
を省略すると、すべての表の列には、表のIM列ストア設定が使用されます。
inmemory_column_clauseの制限事項
-
この句は、
LONG
またはLONG
RAW
列、表外列(LOB列、VARRAY列、ネストした表の列)あるいは拡張データ型列に対して指定できません。 -
IM列ストアに対して仮想列を選択的に有効化するには、
INMEMORY_VIRTUAL_COLUMNS
初期化パラメータの値がENABLED
またはMANUAL
で、仮想列のSQL式がIM列ストアに対して有効化されている列のみを参照する必要があります。
inmemory_clause
この句を使用して、IM列ストアの表のパーティションを有効化または無効化します。この句を指定するには、IM列ストアに対して表を有効化する必要があります。この句を省略すると、表のパーティションには、表のIM列ストア設定が使用されます。
inmemory_attributes
句は、表のパーティションと表に同じセマンティクスを持ちます。詳細は、inmemory_attributes句を参照してください。
INMEMORY TEXT
IM全文列を有効にするには、INMEMORY TEXT
句を指定します。PRIORITY
句は、IM全文列の移入にも標準インメモリー列と同じ効果があります。デフォルトの優先度はNONE
です。
MEMCOMPRESS
句は、INMEMORY TEXT
では無効です。
例
CREATE TABLE mydoc(id NUMBER, docCreationTime DATE, doc CLOB, json_doc JSON) INMEMORY TEXT(DOC, JSON_DOC)
CREATE TABLE mydoc(id NUMBER, docCreationTime DATE, doc CLOB, json_doc JSON) INMEMORY PRIORITY CRITICAL INMEMORY TEXT(DOC, JSON_DOC)
インメモリー表の非スカラー列を検索するには、IMEMORY
TEXT
句を適用できます。この句を使用すると、 CONTAINS ()
演算子またはJSON_TEXTCONTAINS()
演算子を使用したテキスト、XMLまたはJSONドキュメントの高速インメモリー検索が可能になります。
INMEMORY TEXT ( column_name1, column_name2 )
には、IM全文として有効にする列のリストを指定します。列のタイプはCHAR
、VARCHAR2
、CLOB
、BLOB
またはJSON
であることが必要です。JSON
列では、自動的に JSON_TEXTCONTAINS()
が有効化されます。
INMEMORY TEXT ( column_name1 USING policy1, column_name2 USING policy2 )
は、カスタム索引付けポリシーとともにIM全文として有効にする列のリストを指定します。列のデータ型はCHAR
、VARCHAR2
、CLOB
またはBLOB
である必要があります。この句は、JSON
型の列では使用できません。
IMEMORY
PRIORITY
句を使用して、オブジェクトの移入順序を設定できます。
関連項目:
ORACLE_HIVE
、ORACLE_HDFS
およびORACLE_BIGDATA
のドライバ・タイプを使用する非パーティション表にINMEMORY
を指定できます。
ilm_clause
この句を使用すると、自動データ最適化ポリシーをtable
に追加できます。
この句のセマンティクスは、CREATE
TABLE
およびALTER
TABLE
で同じですが、追加で次の制限事項があります。CREATE
TABLE
に指定できるのは、ADD
POLICY
句のみです。この句のセマンティクスの詳細は、「ilm_clause」を参照してください。
関連項目:
自動データ最適化ポリシーの管理の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
自動データ最適化の制限事項
自動データ最適化には、次の制限事項があります。
-
オブジェクト・タイプ、索引構成表、クラスタ化表またはマテリアライズド・ビューを含む表では自動データ最適化はサポートされません。
-
時制有効性をサポートする表またはインデータベース・アーカイブの行アーカイブが有効な表では、行レベルのポリシーはサポートされません。
ilm_policy_clause
この句を使用すると、自動データ最適化ポリシーの説明を記述できます。
この句のセマンティクスは、CREATE
TABLE
およびALTER
TABLE
で同じです。この句のセマンティクスの詳細は、「ilm_policy_clause」を参照してください。
RECOVERABLE | UNRECOVERABLE
これらのキーワードは以前のリリースで非推奨になったもので、それぞれLOGGING
およびNOLOGGING
に置き換えられています。RECOVERABLE
およびUNRECOVERABLE
は、下位互換性のためにサポートされていますが、LOGGING
およびNOLOGGING
キーワードを使用することをお薦めします。
[UN]RECOVERABLEの制限事項
この句には、次の制限事項があります。
-
パーティション表またはLOB記憶特性に
RECOVERABLE
を指定できません。 -
パーティション表または索引構成表に
UNRECOVERABLE
を指定できません。 -
AS
subquery
でのみUNRECOVERABLE
を指定できます。
ORGANIZATION
ORGANIZATION
句を指定すると、表のデータ行が格納される順序を指定できます。
HEAP
を使用すると、table
のデータ行の格納順序を特定しないことを指定できます。これはデフォルトです。
INDEX
を使用すると、table
を索引構成表として作成することを指定できます。索引構成表では、表の主キーが定義された索引内にデータ行が格納されます。
EXTERNAL
を使用すると、表がデータベースの外部にある読取り専用表であることを指定できます。
関連項目:
「外部表の例」
index_org_table_clause
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の両方を格納できます。
関連項目:
「索引構成表の例」
索引構成表の制限事項
索引構成表には、次の制限事項があります。
-
索引構成表には、仮想列は定義できません。
-
索引構成表には、
composite_range_partitions
、composite_list_partitions
またはcomposite_hash_partitions
句は指定できません。 -
索引構成表がネストした表またはVARRAYである場合は、
table_partitioning_clauses
を指定できません。 -
索引構成表の主キーに属する文字データ型の列の照合は、
BINARY
、USING_NLS_COMP
、USING_NLS_SORT
またはUSING_NLS_SORT_CS
である必要があります。
PCTTHRESHOLD integer
索引ブロック内で、索引構成表の行を格納するために確保されている領域の割合を指定します。PCTTHRESHOLD
は、主キーを保持するために十分な大きさである必要があります。指定したしきい値を超える列から始まる行の後続列はすべて、オーバーフロー・セグメントに格納されます。PCTTHRESHOLD
は1から50の値を取る必要があります。PCTTHRESHOLD
を指定しない場合のデフォルト値は50です。
PCTTHRESHOLDの制限事項
PCTTHRESHOLD
は、索引構成表の個別パーティションに対して指定できません。
mapping_table_clauses
MAPPING
TABLE
を指定すると、ローカルから物理ROWID
へのマッピングを作成してヒープ構成表に格納するようデータベースに指示できます。このマッピングは、索引構成表のビットマップ索引の作成に必要です。索引構成表がパーティション化されている場合、マッピング表もパーティション化され、マッピング表のパーティションの名前および物理属性は実表のパーティションと同じになります。
マッピング表またはマッピング表のパーティションは、親である索引構成表またはパーティションと同じ表領域に作成されます。マッピング表またはそのパーティションの記憶特性に対して、問合せ、DML操作または変更は実行できません。
prefix_compression
prefix_compression
句を使用すると、索引構成表の接頭辞圧縮を有効または無効にできます。
-
COMPRESS
を指定して、索引構成表に対してキー圧縮とも呼ばれる接頭辞圧縮を有効化します。これによって、索引構成表の主キー列の値が重複しなくなります。integer
を使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。接頭辞の長さの有効範囲は、1から(主キー列数-1)までです。デフォルトでは(主キー列数-1)になります。
-
NOCOMPRESS
を指定すると、索引構成表での接頭辞圧縮が使用禁止になります。これはデフォルトです。
索引構成表の接頭辞圧縮の制限事項
パーティション・レベルでは、COMPRESS
を指定できますが、integer
で接頭辞の長さを指定できません。
iot_advanced_compression
iot_advanced_compression
を指定すると、索引構成表(IOT)の記憶域フットプリントを削減するためにIOTおよび表パーティションの索引を圧縮できます。
表の特定のパーティションのすべてのIOTについて低レベルの拡張索引圧縮を有効にし、他のパーティションは未圧縮のままにすることができます。
index_org_overflow_clause
index_org_overflow_clause
を指定すると、指定されたしきい値を超える索引構成表のデータ行を、この句で指定したデータ・セグメントに格納するようデータベースに指示できます。
-
索引構成表を作成した場合、各列の最大サイズが評価され、行の最大値が計算されます。オーバーフロー・セグメントが必要で、
OVERFLOW
を指定していない場合は、エラーが発生しCREATE
TABLE
文は実行されません。このチェック機能によって、索引構成表に対する後続のDML操作が、オーバーフロー・セグメントがないために失敗することを回避できます。 -
OVERFLOW
キーワードの後の句に指定するすべての物理属性および記憶特性は、表のオーバーフロー・セグメントにのみ適用されます。索引構成表自体の物理属性と記憶特性、すべてのパーティションに対するデフォルト値、および各パーティションに対する値は、このキーワードの前に指定する必要があります。 -
索引構成表に1つ以上のLOB列が含まれる場合は、LOBが表内に格納できるほど小さい場合でも、
OVERFLOW
を指定しないと、表外に格納されます。 -
表
がパーティション化されている場合、オーバーフロー・データ・セグメントが主キー索引セグメントと同一レベルでパーティション化されます。
INCLUDING column_name
索引構成表の行を索引部分とオーバーフロー部分に分割する列を指定します。主キー列は常に索引に格納されます。column_name
は、最後の主キー列でも主キー以外の列でもかまいません。column_name
に続くすべての主キー以外の列は、オーバーフロー・データ・セグメントに格納されます。
column_name
句で行を分割しようとした場合に、行の索引部分のサイズがPCTTHRESHOLD
の指定値またはデフォルト値を超えると、PCTTHRESHOLD
の値に基づいて行が切り離されます。
INCLUDING句の制限事項
この句は、索引構成表の個々のパーティションに対して指定できません。
ハイブリッド・パーティション表で表レベルの外部パラメータを指定するには、 EXTERNAL PARTITION ATTRIBUTES句を使用します。
external_table_clause
external_table_clause
を使用して外部表を作成します。これによって、データベース内からデータベース外に格納されているデータをデータベースにロードすることなく処理できます。
外部表を定義すると、データ・ディクショナリ内にメタデータのみが作成されます。これは、データベース外のデータを指し、このようなデータへのシームレスな読取り専用アクセスを提供します。
外部表の場合、データベースにデータが存在しないため、表の作成時に通常は使用可能な句の小規模のサブセットを定義します。
オペレーティング・ファイル・システムやビッグ・データ・ソースに存在する外部データ、およびHDFSやHiveなどの形式をサポートする以外に、Oracleでは、オブジェクトに存在する外部データをDBMS_CLOUD
パッケージを介してサポートします。
オブジェクト・ストア内のデータを操作するには、DBMS_CLOUD
パッケージを使用するか、外部表を手動で定義します。Oracle自律型データベースと完全に互換性のあるDBMS_CLOUD
を追加機能に使用することをお薦めします。
関連項目:
-
relational_properties
句内では、column
、datatype
、ENCRYPT
、inline_constraint
およびout_of_line_constraint
のみ指定できます。外部表にデータをロードするためにORACLE_DATAPUMP
アクセス・ドライバおよびAS
subquery
句を指定する場合にのみ、ENCRYPT
句を指定できます。inline_constraint
句およびout_of_line_constraint
句内では、CHECK
を除くすべての副次句を指定できます。 -
physical_properties_clause
内では、表の構成(ORGANIZATION
EXTERNAL
external_table_clause
)のみを指定できます。 -
table_properties
句内では、parallel_clause
を指定できます。parallel_clause
を使用すると、外部データに対する後続の問合せおよび外部表を移入する後続の操作をパラレル化できます。Oracle Database 12cリリース2 (12.2)以降は、パーティション化された外部表を作成できます。このために、
table_properties
内では、次のtable_partitioning_clauses
の副次句を指定できます。-
range_partitions
- レンジ・パーティションまたは時間隔パーティションの外部表を作成するには、この句を指定します。 -
list_partitions
- リスト・パーティションの外部表を作成するには、この句を指定します。この句内では、AUTOMATIC
句を指定できません。自動リスト・パーティション表を外部表にすることはできません。 -
composite_range_partitions
- レンジ-レンジ、レンジ-リスト、時間隔-レンジまたは時間隔-リスト・コンポジット・パーティション外部表を作成するには、この句を指定します。 -
composite_list_partitions
- リスト-レンジまたはリスト-リスト・コンポジット・パーティション外部表を作成するには、この句を指定します。この句内では、AUTOMATIC
句を指定できません。自動コンポジット・パーティション表を外部表にすることはできません。
-
-
外部表は、作成時に
AS
subquery
句を使用することによって移入できます。
同じCREATE
TABLE
文で他の句を指定することはできません。
関連項目:
-
列の投影のデフォルトのプロパティを変更することによる影響の詳細は、「
ALTER TABLE
」の「PROJECT COLUMN句」を参照してください。 -
外部表の使用方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』、『Oracle Database管理者ガイド』および『Oracle Databaseユーティリティ』を参照してください。
外部表には、次の制限事項があります。
-
外部表を一時表にすることはできません。
-
外部表に指定できる制約のタイプは、
NOT
NULL
制約、一意制約、主キー制約および外部キー制約のみです。一意制約、主キー制約または外部キー制約を指定する場合は、RELY
DISABLE
も指定する必要があります。これらの制約は宣言的であり、適用されません。より多くのオプティマイザ変換を考慮できるため、問合せパフォーマンスが向上し、リソース使用量が削減される可能性があります。オプティマイザがこれらのRELY
DISABLE
制約を利用できるようにするには、QUERY_REWRITE_INTEGRITY
初期化パラメータをtrusted
またはstale_tolerated
に設定する必要があります。 -
外部表に索引を作成することはできません。
-
外部表には、
INVISIBLE
の列を格納できません。 -
外部表にオブジェクト型、VARRAYまたは
LONG
列を含めることはできません。ただし、内部データベース表のVARRAYまたはLONG
データを外部表のLOB列に移入することはできます。 -
インメモリー列ストアに移入できる外部表で許可されているアクセス・タイプは、
ORACLE_LOADER
とORACLE_DATAPUMP
のみです。
TYPE
access_driver_type
を指定すると、外部表のアクセス・ドライバを指定できます。アクセス・ドライバは、データベースに対する外部データを解析するAPIです。Oracle Databaseでは次のアクセス・ドライバが提供されています: ORACLE_LOADER
、ORACLE_DATAPUMP
、ORACLE_HDFS
およびORACLE_HIVE
。TYPE
を指定しない場合、デフォルトのアクセス・ドライバORACLE_LOADER
が使用されます。AS
subquery
句を指定して1つのOracle Databaseからデータをアンロードし、同じ、または異なるOracle Databaseに再ロードする場合、ORACLE_DATAPUMP
アクセス・ドライバを指定する必要があります。
関連項目:
ORACLE_LOADER
、ORACLE_DATAPUMP
、ORACLE_HDFS
およびORACLE_HIVE
アクセス・ドライバの詳細は、『Oracle Databaseユーティリティ』を参照してください。
DEFAULT DIRECTORY
DEFAULT
DIRECTORY
を指定すると、外部データソースが存在するファイル・システムのディレクトリに対応するデフォルト・ディレクトリ・オブジェクトを1つ指定できます。デフォルト・ディレクトリは、アクセス・ドライバから使用でき、エラー・ログなどの補助ファイルを格納できます。
ACCESS PARAMETERS
オプションのACCESS
PARAMETERS
句を指定すると、この外部表用の特定のアクセス・ドライバのパラメータに値を割り当てることができます。
-
opaque_format_spec
は、ORACLE_LOADER
、ORACLE_DATAPUMP
、ORACLE_HDFS
およびORACLE_HIVE
アクセス・ドライバのすべてのアクセス・パラメータを指定します。ORACLE_LOADER
、ORACLE_DATAPUMP
、ORACLE_HDFS
およびORACLE_HIVE
アクセス・パラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。opaque_format_spec
で指定するフィールド名は、表定義の列と一致している必要があります。表定義の列と一致していないopaque_format_spec
のフィールドは無視されます。 -
USING
CLOB
subquery
を指定すると、副問合せを使用して、パラメータおよびその値を導出できます。副問合せには、集合演算子またはORDER
BY
句を含めません。CLOB
データ型の1つの項目を含む単一行を戻します。
opaque_format_spec
でパラメータを指定するか、副問合せを使用してそれらを導出するかに関係なく、この句は解析されません。この情報は、外部データに照らしてアクセス・ドライバによって解析されます。
インライン外部表および外部変更問合せ文では、opaque_format_spec
を一重引用符で囲んで使用する必要があります。DDL文では、opaque_format_spec
は単一引用符で囲まずに使用する必要があります。
LOCATION
LOCATION
句を使用すると、1つ以上の外部データソースを指定できます。通常、location_specifier
はファイルですが、ファイル以外も指定できます。Oracle Databaseでは、この句は解析されません。この情報は、外部データに照らしてアクセス・ドライバによって解析されます。
LOCATION
句は、次のように指定する必要があります。
-
パーティション化されていない外部表を作成する場合は、
external_table_data_props
句の表レベルでLOCATION
句を指定する必要があります。 -
パーティション化された外部表を作成する場合は、
external_part_subpart_data_props
句のパーティション・レベルでLOCATION
句を指定する必要があります。 -
コンポジット・パーティション外部表を作成する場合は、
external_part_subpart_data_props
句のサブパーティション・レベルでLOCATION
句を指定する必要があります。
REJECT LIMIT
REJECT
LIMIT
句を指定すると、Oracle Databaseエラーが戻され、問合せが異常終了するまでに、外部データの問合せで許容される変換エラーの数を指定できます。デフォルトの値は0。
CLUSTER句
CLUSTER
句は、表がcluster
の一部であることを示します。この句で指定する各列は、クラスタの各列に対応する表の列となります。一般に、表のクラスタ列は、主キーまたは主キーの一部を構成する1つ以上の列です。詳細は、「CREATE CLUSTER」を参照してください。
クラスタ・キー内の列ごとに表から1つの列を指定します。列は、名前ではなく位置で一致させます。
クラスタ表はクラスタの領域割当てを使用します。このため、PCTFREE
、PCTUSED
またはINITRANS
パラメータ、TABLESPACE
句またはstorage_clause
をCLUSTER
句とともに使用しないでください。
クラスタ表の制限事項
クラスタ表には、次の制限事項があります。
-
オブジェクト表、およびLOB列またはOracleが提供する
Any*
型の列を含む表はクラスタの一部にはできません。 -
クラスタの一部である表に
parallel_clause
、CACHE
またはNOCACHE
は指定できません。 -
クラスタが同じ
ROWDEPENDENCIES
またはNOROWDEPENDENCIES
設定で作成されていないかぎり、CLUSTER
をROWDEPENDENCIES
またはNOROWDEPENDENCIES
とともに指定することはできません。 -
クラスタ表には、
INVISIBLE
の列を格納できません。
table_properties
table_properties
を使用すると、表の特性をさらに詳しく定義できます。
column_properties
column_properties
句を使用すると、列の記憶域属性を指定できます。
object_type_col_properties
object_type_col_properties
を使用すると、オブジェクト列、属性、あるいは列または属性の集合要素の記憶特性を指定できます。
column
column
には、オブジェクト列または属性を指定します。
substitutable_column_clause
substitutable_column_clause
を使用すると、同じ階層のオブジェクト列または属性が互いに置換可能かどうかを指定できます。列が特定の型であるか、サブタイプのインスタンスを含むものであるか、またはその両方を指定できます。
-
ELEMENT
を指定すると、コレクション列または属性の要素型が宣言した型のサブタイプに制約されます。 -
IS
OF
[TYPE]
(ONLY
type
)
句を指定すると、オブジェクト列の型が宣言した型のサブタイプに制約されます。 -
NOT
SUBSTITUTABLE
AT
ALL
LEVELS
を指定すると、オブジェクト列がサブタイプに対応するインスタンスを持つことはできないことを指定できます。また、置換は、埋込みオブジェクト属性、埋込みのネストした表およびVARRAYの要素には使用できません。デフォルトは、SUBSTITUTABLE
AT
ALL
LEVELS
です。
substitutable_column_clauseの制限事項
この句には、次の制限事項があります。
-
この句は、オブジェクト列の属性には指定できません。ただし、オブジェクト表自体の代替性が設定されていない場合、リレーショナル表におけるオブジェクト型の列およびオブジェクト表のオブジェクト列に対してこの句を指定できます。
-
コレクション型の列の場合、この句で指定できる部分は
[NOT]
SUBSTITUTABLE
AT
ALL
LEVELS
のみです。
LOB_storage_clause
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_storage_clauseの制限事項:
サブパーティションでLOB_storage_clause
を指定する場合、使用できるのはTABLESPACE
句のみです。
関連項目:
-
サイズがGBになるLOBを作成する場合のガイドラインを含むLOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
LOB_item
表の表領域および記憶特性とは異なる表領域および記憶特性を明示的に定義する場合に、そのLOB列名またはLOBオブジェクト属性を指定します。作成する各LOB_item
に、システム管理された索引が自動的に作成されます。
SECUREFILE | BASICFILE
この句を使用して、LOB記憶域のタイプに、高パフォーマンスのLOB (SecureFiles)または従来のLOB (BasicFiles)を指定します。
関連項目:
SecureFiles LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
ノート:
LOBの記憶域の種類を変換することはできません。かわりに、オンライン再定義またはパーティション交換を使用して、SecureFileまたはBasicFileを移行する必要があります。
LOB_segname
LOBデータ・セグメントの名前を指定します。LOB_item
が複数指定されている場合は、LOB_segname
を使用できません。
LOB_storage_parameters
LOB_storage_parameters
句を使用すると、様々なLOB記憶域の要素を指定できます。
TABLESPACE句
この句を使用して、LOBデータが格納される表領域を指定します。
TABLESPACE SET句
この句は、CREATE
TABLE
のSHARDED
キーワードを指定してシャード表を作成する場合にのみ有効です。この句を使用して、LOBデータが格納される表領域セットを指定します。
storage_clause
storage_clause
を使用すると、LOBセグメント記憶域の様々な側面を指定できます。LOB記憶域に関して特に重要なのは、storage_clause
のMAXSIZE
句です。これは、LOB_parameters
のLOB_retention_clause
と組み合せて使用できます。詳細は、「storage_clause」を参照してください。
LOB_parameters
LOB記憶域にSecureFileを使用する場合、いくつかのLOB_parameters
は不要になります。PCTVERSION
およびFREEPOOLS
パラメータは、BasicFiles 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の保持に使用される割合(パーセント)の最大値を指定します。データベースが手動UNDOモードで実行されている場合、デフォルト値は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が必要ない場合に指定します。
RETENTION
パラメータを指定しないか、オプションの設定なしでRETENTION
を指定すると、RETENTION
がDEFAULT
に設定されます。この機能はAUTO
と同等です。
関連項目:
-
UNDO_RETENTION
初期化パラメータを設定するには、最小UNDO保存期間の設定を参照してください -
SecureFileを使用して簡略化されたLOB記憶域の詳細は、「
CREATE
TABLE
」の「LOB_storage_parameters」句を参照してください。 -
SecureFileの使用の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
-
データベースをフラッシュバック・モードにする方法については、「ALTER DATABASE」の「
flashback_mode_clause
」
を参照してください。
LOBセグメントに対する空きリストのグループ数を指定します。通常、integer
は、Oracle Real Application Clusters環境のインスタンス数です。単一インスタンス・データベースの場合、この値は1になります。
データベースが自動UNDOモードで稼働している場合にのみ、このパラメータを指定できます。このモードでは、storage_clause
でFREELIST
GROUPS
パラメータを指定しないかぎり、FREEPOOLS
がデフォルト値になります。FREEPOOLS
とFREELIST
GROUPS
のどちらも指定しない場合、データベースが自動UNDO管理モードで稼働している場合はFREEPOOLS
1
のデフォルト値が使用され、手動UNDO管理モードで稼働している場合はFREELIST
GROUPS
1
のデフォルト値が使用されます。
この句は、SECUREFILE
を指定した場合は無効です。SECUREFILE
とFREEPOOLS
の両方を指定した場合、FREEPOOLS
パラメータは特に警告もなく無視されます。
FREEPOOLSの制限事項
storage_clause
のFREEPOOLS
およびFREELIST
GROUPS
パラメータは指定できません。
この句は、SecureFiles LOBに対してのみ有効です。LOB_deduplicate_clause
を使用すると、重複するLOBデータを除外する、LOBの重複の除外を有効または無効にできます。
DEDUPLICATE
キーワードは、LOBの重複コピーを除外するようデータベースに対して指定します。セキュアなハッシュ索引を使用して重複を検出すると、同じ内容を持つLOBは単一のコピーに結合され、消費される記憶域が削減されて記憶域の管理が簡素化されます。
この句を指定しない場合、デフォルトでは、LOBの重複除外は無効です。
この句は、LOBセグメント全体に対して、LOBの重複除外を実装します。個々のLOBに対して重複除外を有効または無効にするには、DBMS_LOB.SETOPTIONS
プロシージャを使用します。
関連項目:
LOBの重複除外の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。DBMS_LOB
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
この句は、BasicFiles LOBではなく、SecureFiles LOBに対してのみ有効です。LOB_compression_clause
を使用すると、サーバー側のLOB圧縮を有効または無効にすることをデータベースに指定できます。サーバー側の圧縮されたLOBセグメントで、ランダムな読取り/書込みアクセスが可能です。LOB圧縮は、表の圧縮または索引の圧縮からは独立しています。この句を指定しない場合、NOCOMPRESS
がデフォルトになります。
HIGH
、MEDIUM
またはLOW
を指定して、圧縮の程度を変更できます。圧縮の程度をHIGH
にすると、待機時間はMEDIUM
よりも長くなりますが、圧縮率は高くなります。LOW
を指定すると、HIGH
またはMEDIUM
のいずれの場合よりも圧縮率がわずかに低くなるものの、解凍および圧縮の処理速度が大幅に向上します。このオプションのパラメータを指定しない場合、MEDIUM
がデフォルトになります。
この句は、LOBセグメント全体のサーバー側のLOB圧縮を実装します。個々のLOBの圧縮を有効または無効にするには、DBMS_LOB.SETOPTIONS
プロシージャを使用します。
関連項目:
サーバー側のLOB記憶域の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。提供されているパッケージUTL_COMPRESS
を使用したクライアント側のLOB圧縮およびDBMS_LOB
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
これらの句は、LOB記憶域にSecureFileを使用しているLOBに対してのみ有効です。ENCRYPT
を指定すると、列内のすべてのLOBを暗号化できます。DECRYPT
を指定すると、LOBをクリアテキストで保持できます。この句を指定しない場合、DECRYPT
がデフォルトになります。
この句の概要は、「encryption_spec」を参照してください。LOB列に適用するとencryption_spec
は個々のLOB列固有になるため、他のLOB列や他の非LOB列とは、暗号化アルゴリズムが異なる場合があります。column_definition
の一部としてencryption_spec
を使用すると、LOB列全体を暗号化できます。table_partition_description
でLOB_storage_clause
の一部としてencryption_spec
を使用すると、LOBパーティションを暗号化できます。
LOBのencryption_specの制限事項
LOB暗号化に対しては、encryption_spec
のSALT
句またはNO
SALT
句を指定できません。
関連項目:
LOB暗号化の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。DBMS_LOB
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
CACHE | NOCACHE | CACHE READS
これらの句の詳細は、「CACHE | NOCACHE | CACHE READS」を参照してください。
LOB_partition_storage
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_partition_storageの制限事項
LOB_partition_storage
には、次の制限事項があります。
-
LOB_storage_clause
のLOB_parameters
では、encryption_spec
を指定できません。パーティションおよびサブパーティションに対する暗号化アルゴリズムの指定は無効であるためです。 -
ハッシュ・パーティションおよびすべてのタイプのサブパーティションには、
TABLESPACE
句のみ指定できます。
varray_col_properties
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 [SECUREFILE | BASICFILE] LOB句
STORE
AS
LOB
を指定した場合に実行される処理は、次のとおりです。
-
VARRAYの最大サイズが約4000バイト未満で、行の記憶域を使用禁止にしていない場合、VARRAYは表内LOBに格納されます。
-
VARRAYの最大サイズが約4000バイトを超える場合または行の記憶域を使用禁止にしている場合、VARRAYは表外LOBとして格納されます。
STORE
AS
LOB
を指定しなかった場合、記憶域は、VARRAY列の実際のサイズではなく、VARRAYの最大サイズに基づいて決定されます。VARRAYの最大サイズは、要素数×要素サイズ+システム制御情報分の容量です。この句を指定しない場合、次のようになります。
-
VARRAYの最大サイズが約4000バイト未満の場合、VARRAYはLOBとしてではなく表内データとして格納されます。
-
最大サイズが約4000バイトを超える場合、VARRAYは常にLOBとして格納されます。
-
実際のサイズが約4000バイト未満の場合、VARRAYは表内LOBとして格納されます。
-
実際のサイズが約4000バイトを超える場合、VARRAYは表外LOBとして格納されます。これはその他のLOB列でも同様です。
-
substitutable_column_clause
substitutable_column_clause
の動作は、「object_type_col_properties」で説明されている動作と同じです。
関連項目:
VARRAY列のプロパティの制限事項
この句は、時間隔パーティション表には指定できません。
nested_table_col_properties
nested_table_col_properties
を使用すると、ネストした表に対して別々の記憶特性を指定し、そのネストした表を索引構成表として定義できるようになります。この句で特に明示的に指定しないかぎり、記憶表は次のとおり作成されます。
-
非パーティション表の場合、記憶表は親表と同じスキーマおよび同じ表領域内に作成されます。
-
パーティション表の場合、記憶表はスキーマのデフォルトの表領域内に作成されます。デフォルトでは、ネストした表はパーティション実表でパーティション化されます。
-
どちらの場合も、記憶表ではデフォルトの記憶特性が使用され、この表の作成の基になった列のネストした表の値が格納されます。
ネストした表の型を持つ列または列属性付きで表を作成する場合は、この句を挿入する必要があります。nested_table_col_properties
句内で、親表に対する場合と同じ働きをする句については、ここでは説明しません。
nested_item
型がネストした表である列、またはその表のオブジェクト型の最上位の属性の名前を指定します。
ネストした表がマルチレベル・コレクションの場合、内部のネストした表またはVARRAYには名前が割り当てられていない場合があります。この場合、nested_item
名のかわりにCOLUMN_VALUE
を指定します。
関連項目:
nested_item
およびCOLUMN_VALUE
の使用例は、「表の作成: マルチレベル・コレクションの例」を参照してください。
LOCAL | GLOBAL
ネストした表を実表でパーティション化するには、LOCAL
を指定します。これはデフォルトです。ネストしたパーティション表のローカル・パーティション索引は自動的に作成されます。
ネストした表が、パーティション実表のネストした非パーティション表であることを示すには、GLOBAL
を指定します。
storage_table
nested_item
の行を含む表の名前を指定します。
storage_table
に対して問合せやDML文を直接実行することはできませんが、その記憶特性は、ALTER
TABLE
文で名前を指定することによって変更できます。
関連項目:
ネストした表の列に対する記憶特性の変更方法については、「ALTER TABLE」を参照してください。
RETURN [AS]
問合せの結果として何を戻り値とするかを指定します。
-
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_column_properties
を指定すると、XMLTYPE
列に対する記憶域属性を指定できます。
XMLType_storage
XMLType
表および列のデータは、トランスポータブル・バイナリXML、バイナリXML、またはオブジェクト・リレーショナル記憶域内の一連のオブジェクトとして格納できます。
-
XMLデータを、スケーラブルで分散可能なトランスポータブル形式で格納するには、
TRANSPORTABLE BINARY XML
を指定します。例については、「トランスポータブル・バイナリXMLとしての表および列の作成」を参照してください。-
TRANSPORTABLE BINARY XML
は、SECUREFILE
にのみ格納できます。 -
指定したLOBパラメータは、トランスポータブル・バイナリXMLエンコード値を格納するために作成された、基礎となるBLOB列に適用されます。
-
TRANSPORTABLE BINARY XML
についてXMLSchema_spec
句を指定することはできません。
-
-
BINARY
XML
を指定すると、縮小されたバイナリXML書式でXMLデータを格納できます。指定したLOBパラメータは、バイナリXMLエンコード値を格納するために作成された、基礎となる
BLOB
列に適用されます。以前のリリースでは、バイナリXMLデータはデフォルトでBasicFiles LOBに格納されます。Oracle Database 11gリリース2 (11.2.0.2)以降では、
COMPATIBLE
初期化パラメータが11.2以上の場合にBASICFILE
またはSECUREFILE
を指定しないと、バイナリXMLデータは可能なかぎりSecureFiles LOBに格納されます。SecureFiles LOB記憶域を使用できない場合、バイナリXMLデータはBasicFiles LOBに格納されます。これは、次のいずれかの場合に発生します。-
XMLType
表の表領域で、自動セグメント領域管理が使用されていない。 -
init
.ora
ファイルの設定により、SecureFiles LOB記憶域が使用できない。例については、『Oracle Databaseリファレンス』のDB_SECUREFILE
パラメータを参照してください。
-
-
CLOB
を指定すると、CLOB
列にXMLType
データを格納できます。CLOB
列にデータを格納すると、元の内容が保持されるため、検索時間が短縮されます。LOB記憶域を定義する場合、LOBパラメータと
XMLSchema_spec
句のいずれかを指定できますが、両方は指定できません。XMLSchema_spec
句を指定すると、特定のスキーマ・ベースのXMLインスタンスに表や列を制限できます。この句で
BASICFILE
またはSECUREFILE
を指定しないと、CLOB
列はBasicFiles LOBに格納されます。ノート:
XMLType
データをCLOB
列に格納しないことをお薦めします。XMLType
のCLOB
記憶域は非推奨になっています。かわりにXMLType
のバイナリXML記憶域を使用してください。 -
OBJECT
RELATIONAL
を指定すると、オブジェクト・リレーショナル列にXMLType
データを格納できます。データ・オブジェクトをリレーショナルに格納すると、リレーショナル列に索引を定義できるため、問合せのパフォーマンスが向上します。オブジェクト・リレーショナル形式での格納を指定する場合、
XMLSchema_spec
句も指定する必要があります。ALL
VARRAYS
AS
句を使用すると、XMLType
列にすべてのVARRAYを格納できます。
以前のリリースでは、XMLType
データはデフォルトでBasicFiles LOBのCLOB
列に格納されます。Oracle Database 11gリリース2 (11.2.0.2)以降では、COMPATIBLE
初期化パラメータが11.2以上の場合にXMLType_storage
句を指定しないと、XMLType
データはSecureFiles LOBのバイナリXML列に格納されます。SecureFiles LOB記憶域を使用できない場合は、BasicFiles LOBのバイナリXML列に格納されます。
関連項目:
SecureFiles LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。
XMLSchema_spec
この句のセマンティクスの詳細は、「XMLSchema_spec」を参照してください。
関連項目:
-
LOB_segname
およびLOB_parameters
句の詳細は、「LOB_storage_clause」を参照してください -
オブジェクト・リレーショナル表の
XMLType
列の例は、「XMLType列の例」を参照し、XMLスキーマの作成例は、「SQL文でのXMLの使用方法」を参照してください。 -
DBMS_XMLSCHEMA
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
XMLType_virtual_columns
この句は、バイナリXML記憶域のXMLType
表に対してのみ有効です。この記憶域は、XMLType_storage
句で指定します。VIRTUAL
COLUMNS
句を指定して、仮想列を定義します。仮想列は、ファンクション索引または制約の定義で使用できます。そのような仮想列には表の作成時には制約を定義できませんが、その後、ALTER
TABLE
文を使用して制約を列に追加できます。
関連項目:
XML環境でこの句を使用する方法の例は、『Oracle XML DB開発者ガイド』を参照してください。
json_storage_clause
JSON
データ型のサポートにより、JSON_storage_clause
を使用してJSON
データ型の列を定義できます。
JSON型列を含む表の作成: 例
この例では、JSON
データ型のpo_document
列を持つj_purchaseorder
表を作成します。JSONデータはJSON
型として格納することをお薦めします。
CREATE TABLE j_purchaseorder (id VARCHAR2 (32) NOT NULL PRIMARY KEY, date_loaded TIMESTAMP (6) WITH TIME ZONE, po_document JSON );
関連項目:
read_only_clause
この句を使用すると、表、パーティションまたはサブパーティションを読取り専用または読取り/書込みのどちらのモードで作成するかを指定できます。
-
読取り専用モードを指定するには、
READ
ONLY
を使用します。オブジェクトが読取り専用モードの場合は、オブジェクトまたはオブジェクトのSELECT
...FOR
UPDATE
...文に影響するDML文は発行できません。表データを変更しないDDL文は発行できます。読取り専用オブジェクトで許可される操作および許可されない操作の完全なリストは、『Oracle Database管理者ガイド』を参照してください。 -
読取り/書込みモードを指定するには、
READ
WRITE
を使用します。これはデフォルトです。
パーティション表に対してこの句を指定する場合は、表のデフォルトの読取り専用モードまたは読取り/書込みモードを指定します。パーティション・レベルでモードを指定してこの動作を上書きする場合を除いて、このモードは、作成時に表のすべてのパーティションと、後で表に追加されるすべてのパーティションに割り当てられます。
コンポジット・パーティション表に対してこの句を指定する場合は、表のすべてのパーティションにデフォルトの読取り専用モードまたは読取り/書込みモードを指定します。この動作を上書きするには、特定のパーティションに対してこの句を指定します。サブパーティション・レベルでモードを指定してこの動作を上書きする場合を除いて、パーティションのデフォルトのモードは、作成時にパーティションのすべてのサブパーティションと、後でパーティションに追加されるすべてのサブパーティションに割り当てられます。
indexing_clause
indexing_clause
は、パーティション表に対してのみ有効です。この句を使用すると、表、表パーティション、または表サブパーティションに対して索引付けプロパティを設定できます。
-
INDEXING
ON
を指定すると、索引付けプロパティをON
に設定できます。これはデフォルトです。 -
INDEXING
OFF
を指定すると、索引付けプロパティをOFF
に設定できます。
この索引付けプロパティにより、表のパーティションとサブパーティションが、表の部分索引に含まれるかどうかが決まります。
-
単純なパーティション表の場合、索引付けプロパティが
ON
のパーティションは、その表の部分索引に含まれます。索引付けプロパティがOFF
のパーティションは除外されます。 -
コンポジット・パーティション表の場合、索引付けプロパティが
ON
のサブパーティションは、その表の部分索引に含まれます。索引付けプロパティがOFF
のサブパーティションは除外されます。
indexing_clause
は、表レベル、パーティション・レベル、またはサブパーティション・レベルで指定できます。indexing_clause
を表レベルでtable_properties
句内に指定すると、その表のデフォルトの索引付けプロパティを設定することになります。データベースが自動的に作成する時間隔パーティションは、常に表のデフォルトの索引付けプロパティを継承します。その他のタイプのパーティションおよびサブパーティションは、次のようにデフォルトの索引付けプロパティを継承します。
-
単純なパーティション表の場合、パーティションはその表のデフォルトの索引付けプロパティを継承します。この動作は、次のように、パーティションごとに
indexing_clause
を指定することで上書きできます。-
レンジ・パーティションの場合は、
range_partitions
句のtable_partition_description
で指定します。 -
ハッシュ・パーティションの場合は、
hash_partitions
句のindividual_hash_partitions
句で指定します。 -
リスト・パーティションの場合は、
list_partitions
句のtable_partition_description
で指定します。 -
参照パーティションの場合は、
reference_partitioning
句のreference_partition_desc
句のtable_partition_description
で指定します。 -
システム・パーティションの場合は、
system_partitioning
句のreference_partition_desc
句のtable_partition_description
で指定します。
-
-
コンポジット・パーティション表の場合、サブパーティションはその表のデフォルトの索引付けプロパティを継承します。この動作は、パーティションまたはサブパーティションごとに
indexing_clause
を指定することで上書きできます。次のように、パーティションに
indexing_clause
を指定すると、サブパーティションはそのパーティションの索引付けプロパティを継承します。-
コンポジット・レンジ・パーティションの場合は、
composite_range_partitions
句のtable_partition_description
で指定します。 -
コンポジット・リスト・パーティションの場合は、
composite_list_partitions
句のtable_partition_description
で指定します。 -
コンポジット・ハッシュ・パーティションの場合は、
composite_hash_partitions
句のindividual_hash_partitions
句で指定します。
サブパーティションの索引付けプロパティは、次のように、そのサブパーティションに
indexing_clause
を指定することで設定できます。-
レンジ・サブパーティションの場合は、
composite_range_partitions
句のrange_subpartition_desc
句で指定します。 -
リスト・サブパーティションの場合は、
composite_list_partitions
句のlist_subpartition_desc
句で指定します。 -
ハッシュ・サブパーティションの場合は、
composite_hash_partitions
句のindividual_hash_subparts
句で指定します。
-
関連項目:
表、表パーティション、または表サブパーティションの索引付けプロパティを確認する方法の詳細は、『Oracle Databaseリファレンス』を参照してください。
-
表のデフォルトの索引付けプロパティを確認するには、
*_PART_TABLES
ビューのDEF_INDEXING
列を問い合せます。 -
表パーティションの索引付けプロパティを確認するには、
*_TAB_PARTITIONS
ビューのINDEXING
列を問い合せます。 -
表サブパーティションの索引付けプロパティを確認するには、
*_TAB_SUBPARTITIONS
ビューのINDEXING
列を問い合せます。
indexing_clauseの制限事項
indexing_clause
には、次の制限事項があります。
-
indexing_clause
は、非パーティション表には指定できません。 -
indexing_clause
は、索引構成表には指定できません。
関連項目:
部分索引の詳細は、CREATE
INDEX
の「partial_index_clause」を参照してください。
table_partitioning_clauses
table_partitioning_clauses
を使用すると、パーティション表を作成できます。
一般的なパーティション化のノート
すべてのタイプのパーティション化には、次のノートがあります。
-
指定できるパーティションとサブパーティションの合計は1024K-1です。
-
パーティションが1つのみのパーティション表も作成できます。パーティションが1つの表は、非パーティション表とは異なります。たとえば、非パーティション表にはパーティションを追加できません。
-
すべての表とLOBパーティションおよびすべての表とLOBサブパーティションに名前を指定できますが、必須ではありません。名前を指定する場合は、スキーマ・オブジェクトのネーミング規則および「データベース・オブジェクトのネーミング規則」にある該当部分の記述に従って指定する必要があります。名前を省略すると、次のように名前が生成されます。
-
パーティション名を省略すると、
SYS_P
n
の形式で名前が生成されます。LOBデータおよびLOB索引パーティションに対するシステム生成名は、それぞれSYS_LOB_P
n
およびSYS_IL_P
n
の形式をとります。 -
subpartition_template
でサブパーティション名を指定すると、そのテンプレートで作成される各サブパーティションに対して、パーティション名とテンプレートのサブパーティション名を連結して名前が生成されます。LOBサブパーティションの場合、生成されるLOBサブパーティション名は、パーティション名とテンプレートのLOBセグメント名の連結です。COMPATIBLE
初期化パラメータが12
.2
以上に設定されている場合、連結の最大長は128バイトです。それ以外の場合、最大長は30バイトです。連結が最大長を超える場合、エラーが戻されて文は失敗します。 -
個々のサブパーティションを指定するときにサブパーティション名を指定せず、
subpartition_template
を指定していない場合、SYS_SUBP
n
という形式で名前が生成されます。LOBデータおよび索引サブパーティションに対する、対応するシステム生成名は、それぞれSYS_LOB_SUBP
n
およびSYS_IL_SUBP
n
です。
-
-
表領域の記憶域は、
CREATE
TABLE
文で、表セグメントとLOBセグメントの両方に対して様々なレベルで指定できます。表領域数は、パーティション数またはサブパーティション数と同じである必要はありません。パーティション数またはサブパーティション数が表領域数より多い場合は、表領域名が繰り返し使用されます。データベースでは、表領域の記憶域を、次の順序で(優先度の高いものから順に)評価します。
-
個々の表サブパーティションまたはLOBサブパーティション・レベルで指定された表領域の記憶域が、最も優先度が高くなります。次に、
subpartition_template
でパーティションまたはLOBに対して指定された記憶域です。 -
個々の表パーティションまたはLOBパーティション・レベルで指定された表領域の記憶域。ここで指定された記憶域パラメータは、
subpartition_template
よりも優先します。 -
表に対して指定された表領域の記憶域
-
ユーザーに対して指定されたデフォルトの表領域の記憶域
-
-
デフォルトでは、ネストした表はパーティション実表でパーティション化されます。
一般的なパーティション化の制限事項
すべてのパーティション化には、次の制限事項があります。
-
クラスタの一部である表は、パーティション化できません。
-
ネストした表をパーティション化したり、索引構成表として定義されているVARRAYをパーティション化することはできません。
-
LONG
またはLONG
RAW
列を含む表は、パーティション化できません。
ハイブリッド・パーティション表の制限
-
特に明記しないかぎり、外部表に適用される制限は、ハイブリッド・パーティション表にも適用されますDML操作のみが、ハイブリッド・パーティション表の内部パーティションでサポートされます(外部パーティションは読取り専用パーティションとして処理されます)。
-
単一レベルの
LIST
、RANGE
、時間隔および自動リスト・パーティション化のみがサポートされます。 -
次のDDLは、内部および外部のパーティションとサブパーティションでサポートされます:
ADD PARTITION
、ADD SUBPARTITION
、DROP PARTITION
、DROP SUBPARTITION
、EXCHANGE PARTITION
、EXCHANGE SUBPARTITION
。パーティションおよびサブパーティションは名前を変更することもできます。 -
DDLの
MOVE
、SPLIT
およびMERGE
は、内部パーティションおよびサブパーティションでのみサポートされます。 -
既存のDMLは内部パーティションでのみサポートされます。外部パーティションは読取り専用として処理されます。トリガーはすべてサポートされます。
-
必須の
RELY DISABLE
モードでの表レベルの非強制制約がサポートされています。サポートされている唯一の強制制約は、NOT NULL
制約です。 -
一意索引およびグローバル一意索引はサポートされていません。内部パーティションでは、一意でない部分索引のみがサポートされています。外部パーティションは索引付けできません。
-
HIVEについては、単一レベルのリスト・パーティション化のみがサポートされます。
-
属性クラスタリング(
CLUSTERING
句)は使用できません。 -
表レベルで定義されたインメモリーは、ハイブリッド・パーティション表の内部パーティションにのみ影響します。
-
列のデフォルト値は許可されていません。
-
非表示の列は使用できません。
-
CELLMEMORY
句は使用できません。 -
SPLIT
、MERGE
およびMOVE
メンテナンス操作は、外部パーティションに対しては使用できません。
ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
関連項目:
range_partitions
range_partitions
句を使用すると、列リストの値の範囲で表をパーティション化できます。索引構成表の場合、列リストは表の主キー列のサブセットである必要があります。
レンジ・パーティション化の制限事項
レンジ・パーティション化には、「一般的なパーティション化の制限事項」に示されている制限事項があります。次の追加の制限が適用されます。
-
指定できるパーティション化キー列は16以下です。
-
パーティション化キー列は、
CHAR
型、NCHAR
型、VARCHAR2
型、NVARCHAR2
型、VARCHAR
型、NUMBER
型、FLOAT
型、DATE
型、TIMESTAMP
型、TIMESTAMP
WITH
LOCAL
TIMEZONE
型またはRAW
型である必要があります。 -
XMLType
表またはXMLType
列を含む表に属しているか、あるいはシャーディング・キー列として使用される、文字列データ型の各レンジ・パーティション化キー列には、宣言された照合(BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。これらすべての照合では、パーティション・バウンドは、照合BINARY
を使用してチェックされます。 -
VALUES
句にNULLを指定することはできません。
column
行がどのパーティションに属するかを判断するために使用される、列の順序リストを指定します。これらの列は、パーティション化キーです。仮想列とINVISIBLE
の列は、パーティション化キー列として指定できます。
この句を使用すると、表の時間隔パーティションを設定できます。時間隔パーティションは、数値範囲または日時期間に基づくパーティションです。表に挿入されたデータがすべてのレンジ・パーティションを超える場合に、指定されたレンジまたは期間のパーティションを自動的に作成することをデータベースに指定することによって、レンジ・パーティション化を拡張します。自動的に作成された各パーティションには、SYS_P
n
の形式で名前が生成されます。自動的に生成されたパーティション名は一意で、ネームスペース規則に違反しないことが保証されます。
-
expr
には、有効な数値または期間式を指定します。 -
オプションの
STORE
IN
句を使用して、時間隔パーティション・データが格納される1つ以上の表領域を指定できます。 -
また、
range_partitions
のPARTITION
句を使用して、1つ以上のレンジ・パーティションを指定する必要があります。レンジ・パーティション・キーの値によって、遷移ポイントと呼ばれるレンジ・パーティションの上限が決まります。その遷移ポイントを超えるデータに対して時間隔パーティションが作成されます。
時間隔パーティション化の制限事項
INTERVAL
句には、「一般的なパーティション化の制限事項」および「レンジ・パーティション化の制限事項」に示されている制限事項があります。次の追加の制限が適用されます。
-
パーティション化キー列は1つのみ指定でき、
NUMBER
型、DATE
型、FLOAT
型またはTIMESTAMP
型である必要があります。 -
この句は索引構成表ではサポートされていません。
-
この句は、VARRAY列を含む表ではサポートされていません。
-
同一レベル・パーティション化されているネストした表を含む時間隔パーティション表は、作成できません。ネストした表またはXMLオブジェクト・リレーショナル・データ型を使用して時間隔パーティション表を作成すると、ネストした表は非パーティション表として作成されます。
-
この句は、XMLデータがバイナリXMLとして格納される場合にのみ、
XMLType
列を含む表に対してサポートされます。 -
時間隔パーティションは、サブパーティション・レベルではサポートされていません。
-
シリアル化可能トランザクションは、時間隔パーティションでは動作しません。セグメントが存在しない時間隔パーティション表のパーティションにデータを挿入しようとすると、エラーになります。
-
VALUES
句の場合:-
MAXVALUE
は指定できません(無限)。指定すると、必要に応じてパーティションを自動追加するという目的に反するためです。 -
パーティション化キー列には
NULL
値を指定できません。
-
関連項目:
時間隔パーティションの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
PARTITION partition
パーティション名を指定する際、partition
の名前は、スキーマ・オブジェクトのネーミング規則および「データベース・オブジェクトのネーミング規則」にある該当部分の記述に従う必要があります。partition
を省略すると、「一般的なパーティション化のノート」で説明されているように名前が生成されます。
range_values_clause
現行パーティションの上限(境界は含まない)を指定します。値リストは、range_partitions
句の列リストに対応するリテラル値を含む順序リストです。値リスト内のリテラルのかわりに、キーワードMAXVALUE
を使用できます。MAXVALUE
には、常に他の値(NULLを含む)より高位にソートされる最大値を指定します。
パーティション境界の上限にMAXVALUE
以外の値を指定した場合、表に暗黙の整合性制約が課せられます。
ノート:
表
がDATE
列でパーティション化されている場合および日付書式で年の最初の2桁の数字が指定されていない場合、年の「YYYY
」4文字書式マスクでTO_DATE
ファンクションを使用する必要があります。この句では、「RRRR
」書式マスクはサポートしていません。日付書式は、NLS_TERRITORY
によって暗黙的に決定され、NLS_DATE_FORMAT
によって明示的に決定されます。これらの初期化パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
関連項目:
パーティション・バウンドの詳細は、『Oracle Database概要』を参照してください。また、「レンジ・パーティション化の例」を参照してください。
table_partition_description
table_partition_description
を使用すると、表の物理特性および記憶特性を定義できます。
deferred_segment_creation
、segment_attributes_clause
、table_compression
、inmemory_clause
およびilm_clause
句の機能は、表全体のphysical_propertiesと同じです。
indexing_clause
を使用すると、レンジ、リスト、システムまたは参照の表パーティションに索引付けプロパティを設定できます。詳細は、 「indexing_clause」を参照してください。
prefix_compression
句およびOVERFLOW
句の機能は、index_org_table_clauseと同じです。
LOB_storage_clause
LOB_storage_clause
を使用すると、このパーティションまたはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のLOB項目に対してLOB記憶特性を指定できます。LOB項目にLOB_storage_clause
を指定しない場合、「一般的なパーティション化のノート」で説明されているように、各LOBデータ・パーティションに対する名前が生成されます。
varray_col_properties
varray_col_properties
を使用すると、このパーティション、またはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のVARRAY項目に対して記憶特性を指定できます。
nested_table_col_properties
nested_table_col_properties
を使用すると、このパーティション、またはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のネストした表の記憶域表項目に記憶特性を指定できます。この句に指定した記憶特性は、表レベルで指定したすべての記憶域属性を上書きします。
partitioning_storage_clause
partitioning_storage_clause
を使用すると、ハッシュ・パーティションおよびレンジ、ハッシュおよびリスト・サブパーティションの記憶特性を指定できます。
partitioning_storage_clauseの制限事項
この句には、次の制限事項があります。
-
TABLESPACE
SET
句は、CREATE
TABLE
のSHARDED
キーワードを指定してシャード表を作成する場合にのみ有効です。この句を使用して、表パーティション・データが格納される表領域セットを指定します。 -
OVERFLOW
句は、索引構成パーティション表にのみ関連し、individual_hash_partitions
句でのみ有効です。レンジ・パーティションやハッシュ・パーティションまたは任意のタイプのサブパーティションには有効ではありません。 -
index_compression
句のadvanced_index_compression
句は指定できません。 -
indexing_clause
のprefix_compression
句は索引構成表のパーティションにのみ指定できます。COMPRESS
またはNOCOMPRESS
を指定できますが、integer
で接頭辞の長さを指定できません。
list_partitions
list_partitions
句を使用すると、column
リスト内の列ごとにリテラル値のリストで表をパーティション化できます。リスト・パーティション化は、個々の行が固有のパーティションにマップする方法に関する制御に便利です。
リスト・パーティション化の制限事項
リスト・パーティション化には、「一般的なパーティション化の制限事項」に示されている制限事項があります。次の追加の制限が適用されます。
-
指定できるパーティション化キー列は16以下です。
-
索引構成表をパーティション化する場合は、複数のパーティション化キー列を指定できません。
-
パーティション化キー列は、
CHAR
型、NCHAR
型、VARCHAR2
型、NVARCHAR2
型、VARCHAR
型、NUMBER
型、FLOAT
型、DATE
型、TIMESTAMP
型、TIMESTAMP
WITH
LOCAL
TIMEZONE
型またはRAW
型である必要があります。 -
XMLType
表またはXMLType
列を含む表に属しているか、あるいはシャーディング・キー列として使用される、文字列データ型の各リスト・パーティション化キー列には、宣言されたBINARY
照合(BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。これらすべての照合では、パーティションの照合には照合BINARYが使用されます。
AUTOMATIC
AUTOMATIC
を指定して、自動リスト・パーティション表を作成します。このタイプの表により、データベースはオンデマンドで追加のパーティションを作成できます。
自動リスト・パーティション表を作成する場合は、通常のリスト・パーティション表を作成するときと同じようにパーティションおよびパーティション化キーの値を指定します。ただし、DEFAULT
パーティションは指定しません。データが表にロードされると、ロードされたパーティション化キー値が既存のどのパーティションにも対応していない場合は、自動的に新しいパーティションが作成されます。単一のパーティション化キー値でリスト・パーティション化が定義されている場合は、新しいパーティション化キー値ごとに新しいパーティションが作成されます。複数のパーティション化キー列でリスト・パーティション化が定義されている場合は、新しいパーティション化キー値のセットおよび一意のパーティション化キー値のセットごとに新しいパーティションが作成されます。自動的に作成された各パーティションには、SYS_P
n
の形式で名前が生成されます。自動的に生成されたパーティション名は一意で、ネームスペース規則に違反しないことが保証されます。
AUTOMATIC
キーワードは、リスト・パーティション表、およびリスト-レンジ、リスト-リスト、リスト-ハッシュおよびリスト-時間隔コンポジット・パーティション表に指定できます。コンポジット・パーティション表の場合、自動的に作成された各リスト・パーティションには、1つのサブパーティションが含まれます(表にサブパーティション・テンプレートが定義されていない場合)。
自動リスト・パーティション表にローカル・パーティション索引が定義されている場合、対応する表パーティションが作成されると、ローカル索引パーティションが作成されます。
自動リスト・パーティション化の制限事項
自動リスト・パーティション化には、「リスト・パーティション化の制限事項」に示されている制限事項があります。次の追加の制限が適用されます。
-
自動リスト・パーティション表の作成時には、少なくとも1つのパーティションが必要です。新規および未知のパーティション化キー値に対して新しいパーティションが自動的に作成されるため、自動リスト・パーティション表に
DEFAULT
パーティションを含めることはできません。 -
自動リスト・パーティション化は、索引構成表または外部表ではサポートされていません。
-
自動リストパーティション化は、VARRAY列を含む表ではサポートされていません。
-
ローカル・ドメイン索引は、自動リスト・パーティション表には作成できません。グローバル・ドメイン索引は、自動リスト・パーティション表に作成できます。
-
自動リスト・パーティション表は、参照パーティション化の子表または親表にすることはできません。
-
自動リスト・パーティション化は、サブパーティション・レベルではサポートされていません。
STORE IN
オプションのSTORE
IN
句を使用すると、自動的に作成されたリスト・パーティションのデータが格納される1つ以上の表領域を指定できます。
ノート:
自動リスト・パーティション表は、通常のリスト・パーティション表に変更でき、その逆の変更も可能です。自動的に作成されたリスト・パーティションのデータが格納される表領域を変更することもできます。詳細は、「ALTER
TABLE
」の「alter_automatic_partitioning」句を参照してください。
list_values_clause
各パーティションのlist_values_clause
では、1つ以上の値を割り当てる必要があります。1つのキー列で表がパーティション化されている場合は、list_values
構文の上位ブランチを使用して、その列の値リストを指定します。この場合、複数のパーティションに値(NULLを含む)を割り当てることはできません。複数のキー列で表がパーティション化されている場合は、list_values
構文の下位ブランチを使用して、値リストを指定します。各値リストはカッコで囲まれ、キー列の値のリストを表します。この場合、個々のキー列値を複数のパーティションに割り当てることができます。ただし、複数のパーティションに完全な値リストを割り当てることはできません。リスト・パーティションは、順序付けされていません。
VALUES
句のパーティション値にリテラルNULL
を指定した場合、後続の問合せで、そのパーティション内のデータにアクセスするには、WHERE
句で、比較条件ではなくIS
NULL
条件を使用する必要があります。
DEFAULT
キーワードを指定すると、行の挿入先となるパーティションが作成されます。この行は、別のパーティションにはマップされません。このため、DEFAULT
を指定できるのは1つのパーティションのみです。そのパーティションに対して、その他の値を指定することはできません。また、デフォルト・パーティションは、パーティションの中で最後に定義する必要があります。DEFAULT
は、レンジ・パーティションでMAXVALUE
を使用する場合と同様に使用します。
各パーティションの値のリストを構成する文字列は、最大4KBです。すべてのパーティションの値の総数を、64K-1以下に指定します。
リスト・パーティションのパーティション化キー列は、最大サイズが32,767バイトの拡張データ型列になることがあります。この場合、パーティションに指定する値のリストは、4Kバイトの制限を超過することがあります。この制限を回避するには、次のいずれかの方法を使用します。
-
4Kバイトの制限を超過する値に、
DEFAULT
パーティションを使用します。 -
パーティション・キー列でハッシュ・ファンクション(
STANDARD_HASH
など)を使用して、4Kバイトよりも短い一意の識別子を作成します。詳細は、「STANDARD_HASH」を参照してください。
list_values_clauseの制限事項
DEFAULT
パーティションは、自動リスト・パーティション表に指定できません。
関連項目:
拡張データ型の詳細は、「拡張データ型」を参照してください。
table_partition_description
table_partition_description
の副次句の動作は、「table_partition_description」のレンジ・パーティションで説明した動作と同じです。
hash_partitions
hash_partitions
句を使用すると、表がハッシュ方式でパーティション化されるように指定できます。列の値にパーティション化キーとして指定されたハッシュ・ファンクションを使用して、行がパーティションに割り当てられます。個々のハッシュ・パーティションを指定するか、または作成されるハッシュ・パーティションの数を指定できます。
ハッシュ・パーティション化の制限事項
ハッシュ・パーティション化には、「一般的なパーティション化の制限事項」に示されている制限事項があります。次の追加の制限が適用されます。
-
指定できるパーティション化キー列は16以下です。
-
パーティション化キー列は、
CHAR
型、NCHAR
型、VARCHAR2
型、NVARCHAR2
型、VARCHAR
型、NUMBER
型、FLOAT
型、DATE
型、TIMESTAMP
型、TIMESTAMP
WITH
LOCAL
TIMEZONE
型またはRAW
型である必要があります。 -
XMLType
表またはXMLType
列を含む表に属しているか、あるいはシャーディング・キー列として使用される、文字データ型の各ハッシュ・パーティション化キー列には、宣言された照合(BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。
column
行がどのパーティションに属するかを判断するために使用される、列の順序リストを指定します(パーティション化キー)。
individual_hash_partitions
この句を使用して、個々のパーティションを名前で指定します。
indexing_clause
を使用すると、ハッシュ・パーティションに索引付けプロパティを設定できます。詳細は、 「indexing_clause」を参照してください。
個々のハッシュ・パーティションを指定する場合の制限事項
partitioning_storage_clause
で指定できる句は、TABLESPACE
句および表の圧縮のみです。
ノート:
異なる文字セットを使用してデータベースを使用しているか、使用する予定がある場合は、文字列を分割する際に注意してください。文字のソート順序は、すべての文字セットで同一ではありません。文字セット・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
hash_partitions_by_quantity
個々のパーティションを定義するかわりに、ハッシュ・パーティションの数を指定します。この場合、SYS_P
n
の形式でパーティション名が割り当てられます。STORE
IN
句を使用すると、ハッシュ・パーティション・データが格納される1つ以上の表領域を指定できます。表領域の数とパーティションの数が同じである必要はありません。パーティション数が表領域数より多い場合は、表領域名が繰り返し使用されます。
ハッシュ・パーティション化の両方の方法でロード・バランシングを最適化するには、2の累乗のパーティション数を指定します。個々のハッシュ・パーティションを指定する際は、partitioning_storage_clause
にTABLESPACE
と表の圧縮の両方を指定できます。ハッシュ・パーティションを数で指定する場合は、TABLESPACE
のみを指定できます。ハッシュ・パーティションは、その他のすべての属性を表レベルのデフォルトから継承します。
table_compression
句の機能は、表の「table_properties」について説明されている機能と、ほぼ同じです。
prefix_compression
句およびOVERFLOW
句の機能は、index_org_table_clauseと同じです。
表レベルで指定された表領域の記憶域は、パーティション・レベルで指定された表領域の記憶域で上書きされ、パーティション・レベルで指定された表領域の記憶域は、サブパーティション・レベルで指定された表領域の記憶域で上書きされます。
individual_hash_partitions
句に含まれるpartitioning_storage_clause
のTABLESPACE
句は、作成される個々のパーティションのみについて、表領域の記憶域を決定します。hash_partitions_by_quantity
句では、STORE
IN
句によって、表の作成時のパーティションの位置と、後から追加されるパーティションのデフォルトの格納場所が決定されます。
ハッシュ・パーティションを数量で指定する場合の制限事項
index_compression
句のadvanced_index_compression
句は指定できません。
関連項目:
ハッシュ・パーティション化については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
composite_range_partitions
composite_range_partitions
句を使用すると、まず、表
をレンジ・パーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。
コンポジット・レンジ・パーティション化でのINTERVAL
句のセマンティクスは、レンジ・パーティション化の場合と同じです。詳細は、「INTERVAL句」を参照してください。
subpartition_by_range、subpartition_by_hashまたはsubpartition_by_listでは、各コンポジット・レンジ・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションまたは後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。
表のサブパーティション化のタイプ、およびオプションでサブパーティション・テンプレートを設定した後、1つ以上のレンジ・パーティションを定義する必要があります。
-
非コンポジット・レンジ・パーティションと同じ要件を持つrange_values_clauseを指定する必要があります。
-
table_partition_descriptionを使用すると、各パーティションの物理特性および記憶特性を定義できます。
-
range_partition_desc
で、range_subpartition_desc
、list_subpartition_desc
、individual_hash_subparts
またはhash_subparts_by_quantity
を使用して、パーティションの個々のサブパーティションの特性を指定します。これらの句で指定する値は、これらのサブパーティションについて、subpartition_template
で指定した値にかわるものです。 -
ハッシュ・サブパーティション、リスト・サブパーティションまたはLOBサブパーティションに指定できる特性は、
TABLESPACE
およびtable_compression
のみです。
コンポジット・レンジ・パーティション化の制限事項
サブパーティション化のタイプにかかわらず、コンポジット・レンジ・パーティションには次の制限事項があります。
-
サブパーティション・レベルで指定できる物理属性は、
TABLESPACE
および表の圧縮のみです。 -
コンポジット・パーティション化は、索引構成表に対して指定できません。そのため、コンポジット・パーティション表に対して、
table_partition_description
のOVERFLOW
句は無効です。 -
XMLType
列を含む表に対してはコンポジット・パーティション化を指定できません。 -
XMLType
表またはXMLType
列を含む表に属している、文字データ型の各レンジ・パーティション・キー列、リスト・パーティション・キー列またはハッシュ・パーティション・キー列には、宣言された照合(BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。
関連項目:
コンポジット・レンジ・パーティション化の例は、「コンポジット・パーティション表の例」を参照し、コンポジット・リスト・パーティション化の例は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
composite_list_partitions
composite_list_partitions
句を使用すると、まず、表
をリスト・パーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。
subpartition_by_range、subpartition_by_hashまたはsubpartition_by_listでは、各コンポジット・リスト・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションおよび後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。
各コンポジット・パーティションのサブパーティション化のタイプを設定し、オプションでサブパーティション・テンプレートを定義した後、1つ以上のリスト・パーティションを定義する必要があります。
-
list_partition_desc
で、非コンポジット・リスト・パーティションと同じ要件を持つlist_values_clauseを指定する必要があります。 -
table_partition_descriptionを使用すると、各パーティションの物理特性および記憶特性を定義できます。
-
list_partition_desc
で、range_subpartition_desc
、list_subpartition_desc
、individual_hash_subparts
またはhash_subparts_by_quantity
を使用して、パーティションの個々のサブパーティションの特性を指定します。これらの句で指定する値は、これらのサブパーティションについて、subpartition_template
で指定した値にかわるものです。
AUTOMATIC
を指定して、自動リスト-レンジ、リスト-リスト、リスト-ハッシュまたはリスト-時間隔コンポジット・パーティション表を作成します。このタイプの表により、データベースはオンデマンドで追加のパーティションを作成できます。オプションのSTORE
IN
句を使用すると、自動的に作成されたパーティションのデータが格納される1つ以上の表領域を指定できます。AUTOMATIC
句およびSTORE
IN
句のセマンティクスは、非コンポジット・リスト・パーティションと同じです。これらの句のセマンティクスの詳細は、「list_partitions」
の項目の「AUTOMATIC」および「STORE IN」を参照してください。自動コンポジット・パーティション表には、「コンポジット・リスト・パーティション化の制限事項」および「自動リスト・パーティション化の制限事項」に示されている制限事項があります。
コンポジット・リスト・パーティション化の制限事項
コンポジット・リスト・パーティション化には、「コンポジット・レンジ・パーティション化の制限事項」に示されているものと同じ制限事項があります。
composite_hash_partitions
composite_hash_partitions
句を使用すると、まず、ハッシュ方式で表
をパーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。
subpartition_by_range、subpartition_by_hashまたはsubpartition_by_listでは、各コンポジット・レンジ・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションまたは後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。
表のサブパーティション化のタイプを設定した後、individual_hash_partitionsまたはhash_partitions_by_quantityを指定する必要があります。
コンポジット・ハッシュ・パーティション化の制限事項
コンポジット・ハッシュ・パーティション化には、「コンポジット・レンジ・パーティション化の制限事項」に示されているものと同じ制限事項があります。
subpartition_template
subpartition_template
は、レンジ・サブパーティション化、リスト・サブパーティション化およびハッシュ・サブパーティション化のオプション要素です。このテンプレートを使用することで、表の各パーティションにデフォルトのサブパーティションを定義できます。明示的にサブパーティションを定義していないパーティションには、このデフォルト・サブパーティション特性が作成されます。この句は、対称型パーティションの作成時に有効です。パーティション・レベルでサブパーティションを明示的に定義すると(range_subpartition_desc
、list_subpartition_desc
、individual_hash_subparts
またはhash_subparts_by_quantity
句で指定)、この句を上書きできます。
サブパーティションとテンプレートを定義する場合、レンジ・サブパーティション、リスト・サブパーティションまたはハッシュ・サブパーティションを明示的に定義するか、ハッシュ・サブパーティション数量を定義できます。
-
サブパーティションを明示的に定義するには、
range_subpartition_desc
、list_subpartition_desc
またはindividual_hash_subparts
を使用します。各パーティションに名前を指定する必要があります。partitioning_storage_clause
のLOB_partitioning_clause
を指定する場合、LOB_segname
を指定する必要があります。 -
ハッシュ・サブパーティション数量を指定するには、
hash_subpartition_quantity
に正の整数を指定します。その数のサブパーティションが各パーティションに作成され、SYS_SUBP
n
という形式のサブパーティション名が割り当てられます。
ノート:
サブパーティションのテンプレートに対して表領域の記憶域を指定しても、table
のパーティションに対して明示的に指定した表領域の記憶域は上書きされません。サブパーティションに対して表領域の記憶域を指定するには、次のいずれかの操作を実行します。
-
パーティション・レベルでの表領域の記憶域を省略し、サブパーティションのテンプレートに対して表領域の記憶域を指定します。
-
固有の表領域の記憶域を持つサブパーティションを個別に定義します。
サブパーティション・テンプレートの制限事項
サブパーティション・テンプレートには、次の制限事項があります。
-
1つのLOBサブパーティションに対して
TABLESPACE
を指定した場合、次にそのLOB列のすべてのLOBサブパーティションに対してTABLESPACE
を指定する必要があります。複数のLOBサブパーティションに対して同じ表領域を指定できます。 -
subpartition_template
内で、または個々のサブパーティションを定義するときに、partitioning_storage_clause
を使用してリスト・サブパーティションに対して異なるLOB記憶域を指定した場合、LOBとVARRAY列の両方にLOB_segname
を指定する必要があります。
subpartition_by_range
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_list
subpartition_by_list
句を使用すると、column
リストからリテラル値のリストの表に各パーティションをサブパーティション化する必要があることを指定できます。最大16のリスト・サブパーティション化キー列を指定できます。
subpartition_template
を使用して、デフォルトのサブパーティション特性値を指定できます。「subpartition_template」を参照してください。データベースは、特性を明示的に指定していないこのパーティションの任意のサブパーティションに対して、これらの値を使用します。
range_partition_desc
またはlist_partition_desc
のlist_subpartition_desc
を使用して、各パーティションのリスト・サブパーティションを個別に定義することもできます。subpartition_template
とlist_subpartition_desc
の両方を指定しない場合、単一のDEFAULT
サブパーティションが作成されます。
リスト・サブパーティション化の制限事項
リスト・サブパーティション化には、「コンポジット・レンジ・パーティション化の制限事項」に示されているものと同じ制限事項があります。
subpartition_by_hash
subpartition_by_hash
句を使用すると、表
の各パーティションがハッシュ・サブパーティション化されるように指定できます。列リストのサブパーティション化はパーティション化キーには関連しませんが、同じ制限事項が適用されます(「column」を参照)。
subpartition_template
句またはSUBPARTITIONS
integer
句を使用すると、サブパーティションを定義できます。「subpartition_template」を参照してください。どちらの場合も、ロード・バランシングを最適化するには、2の累乗のパーティション数を指定する必要があります。
SUBPARTITIONS
integer
を指定する場合、表
の各パーティションにおけるデフォルトのサブパーティション数を設定します。また、サブパーティションが格納される1つ以上の表領域を指定することもできます。デフォルト値は1です。この句とsubpartition_template
の両方を指定しない場合、1つのハッシュ・サブパーティションを持つパーティションが作成されます。
コンポジット・パーティションのノート
コンポジット・パーティションには、次のノートがあります。
-
すべてのサブパーティションについて、
range_subpartition_desc
、list_subpartition_desc
、individual_hash_subparts
またはhash_subparts_by_quantity
を使用して、個々のサブパーティション名およびオプションでその他の特性を指定できます。 -
または、ハッシュ・サブパーティションおよびリスト・サブパーティションの場合:
-
サブパーティションの数を指定できます。また、サブパーティションが格納される1つ以上の表領域を指定することもできます。この場合、
SYS_SUBPn
という形式でサブパーティション名が割り当てられます。 -
サブパーティションの定義を省略すると、サブパーティションのテンプレートが作成されている場合は、そのテンプレートに基づいてサブパーティションが作成されます。サブパーティションのテンプレートが作成されていない場合、1つのハッシュ・サブパーティションまたは1つのデフォルト・リスト・サブパーティションが作成されます。
-
-
すべてのタイプのサブパーティションについて、サブパーティションの定義全体を指定しない場合、次のようにサブパーティション名が割り当てられます。
-
サブパーティションのテンプレートを指定し、またパーティション名を指定した場合、「
partition_name
アンダースコア(_)subpartition_name
」(たとえば、P1_SUB1
)という形式でサブパーティション名が生成されます。 -
サブパーティションのテンプレートを指定していない場合、またはサブパーティションのテンプレートは指定したがパーティション名を指定しなかった場合、
SYS_SUBP
n
という形式でサブパーティション名が生成されます。
-
reference_partitioning
この句を使用すると、参照によって表をパーティション化できます。参照によるパーティション化は、作成される表(子表)を既存のパーティション表(親表)への参照制約によって同一レベルでパーティション化する方法です。参照によって表をパーティション化すると、その後に親表で実行されるパーティションのメンテナンス操作は子表に自動的にカスケードします。そのため、パーティションのメンテナンス操作は、参照パーティション表で直接実行できません。
親表が時間隔パーティション表の場合は、親表の時間隔パーティションに対応する子の参照パーティション表内のパーティションが、子表への挿入時に作成されます。子表内に時間隔パーティションが作成されるときには、そのパーティションに関連する親表のパーティションからパーティション名が継承されます。子表に表レベルのデフォルト表領域がある場合は、その表領域が新しい時間隔パーティションの表領域として使用されます。それ以外の場合は、表領域が親表のパーティションから継承されます。時間隔パーティション表の参照方法の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
パーティション化参照制約は、次の条件を満たしている必要があります。
-
作成される表で定義される参照整合性制約を指定する必要があります。これは、親表の主キーまたは一意制約を参照する必要があります。制約は、
ENABLE
VALIDATE
NOT
DEFERRABLE
状態である必要があります。これは、表の作成時に参照整合性制約を指定するときのデフォルトです。 -
制約で参照されるすべての外部キー列は、
NOT
NULL
である必要があります。 -
制約を指定するときに、
references_clause
のON
DELETE
SET
NULL
句は指定できません。 -
制約で参照される親表は、既存のパーティション表である必要があります。これは、どの方法でパーティション化されていてもかまいません。
-
外部キーおよび親キーにはPL/SQLファンクションまたはLOB列を参照する仮想列を含めることはできません。
reference_partition_desc
このオプションの句を使用すると、パーティション名を指定し、パーティションの物理特性および記憶特性を定義できます。table_partition_description
の副次句の動作は、「table_partition_description」のレンジ・パーティションで説明した動作と同じです。
子の参照パーティション表を作成する場合、その親表が時間隔パーティション表のときに、この句を指定すると、子表の時間隔パーティション以外のパーティションには、パーティション記述子が使用されます。パーティション記述子は、時間隔パーティションには指定できません。
参照パーティション化の制限事項
参照パーティション化には、「一般的なパーティション化の制限事項」に示されている制限事項があります。次の追加の制限が適用されます。
-
参照パーティション化の制限事項は、親表のパーティション計画から導出されます。
-
親表と子表のどちらも自動リスト・パーティション表にすることはできません。
-
この句は、索引構成表、外部表またはドメイン索引記憶表に対して指定できません。
-
親表を参照でパーティション化することはできますが、
constraint
を自己参照型にすることはできません。作成される表を自己参照に基づいてパーティション化することはできません。 -
ROW
MOVEMENT
が親表に対して有効である場合、子表に対しても有効である必要があります。
関連項目:
参照によるパーティション化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。また、「参照パーティション化の例」を参照してください。
system_partitioning
この句を使用すると、システム・パーティションを作成できます。システム・パーティション化には、パーティション化キー列は必要ありません。またシステム・パーティションには、レンジ境界やリスト境界またはハッシュ・アルゴリズムはありません。システム・パーティションは、パーティション化された実表を持つネストした表やドメイン索引記憶表などの依存表を同一レベルでパーティション化する方法です。
-
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
文を使用してシステム・パーティション表にデータを挿入するには、拡張パーティション構文を使用して、副問合せによって戻された値が挿入されるパーティションを指定する必要があります。
関連項目:
システム・パーティション化の使用方法の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。また、「パーティション表と索引の参照」を参照してください。
consistent_hash_partitions
この句は、シャード表に対してのみ有効です。この句を使用すると、コンシステント・ハッシュ・パーティションを作成できます。
文字データ型の各シャーディング・キー列には、宣言された照合(BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。
directory_based_partitions
この句は、ディレクトリベースのシャーディングによるシャード表を作成する場合に使用します。
シャード表に適用される制限は、ディレクトリによってシャードされる表に適用されます。
例: ディレクトリごとのシャード表およびパーティションの作成
CREATE SHARDED TABLE departments ( department_id NUMBER(6) , department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL , manager_id NUMBER(6) , location_id NUMBER(4) , CONSTRAINT dept_id_pk PRIMARY KEY(department_id) ) PARTITION BY DIRECTORY (department_id) ( PARTITION p_1 TABLESPACE tbs1, PARTITION p_2 TABLESPACE tbs2 );
前述の例では、ディレクトリ別にパーティション化する場合、パーティション名p_1
およびp_2
の後に値リストがありません。これは、リストごとのパーティションとは異なります。
consistent_hash_with_subpartitions
この句は、シャード表に対してのみ有効です。この句を使用すると、サブパーティションがあるコンシステント・ハッシュを作成できます。
文字データ型の各シャーディング・キー列には、宣言された照合(BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。
range_partitionset_clause
この句を使用すると、レンジ・パーティション・セットを作成できます。
SUBPARTITION
BY
句のsubpartition_template
句内では、サブパーティションの表領域を指定できません。つまり、レンジ、リストおよび個々のハッシュ・サブパーティションには、partitioning_storage_clause
のTABLESPACE
句を指定できず、hash_subpartitions_by_quantity
句には、STORE
IN
(
tablespace
)
句を指定できません。
PARTITIONS
AUTO
句の、range_partitionset_desc
句のsubpartition_template
句内では、サブパーティションの表領域を指定できます。
文字データ型の各スーパー・シャーディング・キー列またはシャーディング・キー列には、宣言された照合(BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。
list_partitionset_clause
この句を使用すると、リスト・パーティション・セットを作成できます。
SUBPARTITION
BY
句のsubpartition_template
句内では、サブパーティションの表領域を指定できません。つまり、レンジ、リストおよび個々のハッシュ・サブパーティションには、partitioning_storage_clause
のTABLESPACE
句を指定できず、hash_subpartitions_by_quantity
句には、STORE
IN
(
tablespace
)
句を指定できません。
PARTITIONS
AUTO
句の、list_partitionset_desc
句のsubpartition_template
句内では、サブパーティションの表領域を指定できます。
文字データ型の各スーパー・シャーディング・キー列またはシャーディング・キー列には、宣言された照合(BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。
attribute_clustering_clause
この句を使用して、属性クラスタリングの表を有効化します。属性クラスタリングは、指定された列の内容に基づいて物理的に近いデータをクラスタリングできます。
属性クラスタリングは、table
の列または他の表の結合された値にのみ基づきます。後者は結合属性クラスタリングと呼ばれます。
関連項目:
属性クラスタリングの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
clustering_join
この句を使用して、属性クラスタリングを指定します。JOIN
句を使用して、属性クラスタリングの基になる他の表の結合された値を指定します。最大4個のJOIN
句を指定できます。
cluster_clause
この句を使用して、表に使用する順序のタイプ(線形順序またはインターリーブ順序)を指定します。LINEAR
またはINTERLEAVED
キーワードを指定しない場合、デフォルトはLINEAR
です。
BY LINEAR ORDER
この句を使用して、線形順序を指定します。このタイプの順序は、指定された列の順序に従ってデータを格納します。この句を指定する場合、最大で10個の列を含むことができる1つのクラスタリング列グループのみ指定できます。
BY INTERLEAVED ORDER
この句を使用して、インターリーブ順序を指定します。このタイプの順序は、複数列のクラスタリングを許可するz順序と似ている特殊な多次元クラスタリング技術を使用します。この句を指定する場合、すべてのグループで最大40個の列を使用した最大で4個のクラスタリング列グループを指定できます。
clustering_columns
この句を使用して、1つ以上のクラスタリング列グループを指定します。
clustering_column_group
この句を使用して、クラスタリング列グループに含まれる1つ以上の列を指定します。
属性クラスタリング列の制限事項
クラスタリング列グループの各文字列には、宣言された照合BINARY
またはUSING_NLS_COMP
のいずれかが必要です。
clustering_when
これらの句を使用して、ダイレクト・パス・インサート操作およびデータ移動操作中の属性クラスタリングを許可または禁止します。
ON LOAD
INSERT
またはMERGE
操作のいずれかの結果として実行されるダイレクト・パス・インサート(シリアルまたはパラレル)の実行中に属性クラスタリングをYES
ON
LOAD
を指定して許可するか、NO
ON
LOAD
を指定して禁止します。
デフォルトはYES
ON
LOAD
です。
ON DATA MOVEMENT
次の操作中に発生するデータ移動の属性クラスタリングをYES
ON
DATA
MOVEMENT
を指定して許可するか、NO
ON
DATA
MOVEMENT
を指定して禁止します。
-
DBMS_REDEFINITION
パッケージを使用したデータの再定義 -
ALTER
TABLE
の次の句で指定される表パーティションのメンテナンス操作:coalesce_table
、merge_table_partitions
、move_table_partition
およびsplit_table_partition
デフォルトはYES
ON
DATA
MOVEMENT
です。
zonemap_clause
この句を使用して、表のゾーン・マップを作成します。ゾーン・マップは、clustering_columns
句で指定された列を追跡します。
-
WITH
MATERIALIZED
ZONEMAP
を指定して、ゾーン・マップを作成します。zonemap_name
では、作成されるゾーン・マップの名前を指定します。zonemap_name
を省略する場合、ゾーン・マップの名前はZMAP$_
table
です。 -
WITHOUT
MATERIALIZED
ZONEMAP
を指定すると、ゾーン・マップを作成しません。これはデフォルトです。
後で表を削除するか、DROP
CLUSTERING
またはMODIFY
CLUSTERING
... WITHOUT
MATERIALIZED
ZONEMAP
に対してALTER
TABLE
文を使用すると、ゾーン・マップが削除されます。
関連項目:
ゾーン・マップの詳細は、CREATE MATERIALIZED ZONEMAPを参照してください。
属性クラスタリングの制限事項
属性クラスタリングには、次の制限事項があります。
-
属性クラスタリングは、一時表または外部表に対してサポートされていません。
-
作成される表はヒープ構成表である必要があります。ただし、
clustering_join
句で指定された表は、ヒープ構成表または索引構成表である可能性があります。 -
クラスタリング列は、スカラー・データ型である必要があり、暗号化できません。
-
BY
LINEAR
ORDER
を指定する場合、最大で10個の列を含むことができる1つのクラスタリング列グループのみ指定できます。 -
BY
INTERLEAVED
ORDER
を指定する場合、すべてのグループで最大40個の列を使用した最大で4個のクラスタリング列グループを指定できます。 -
結合属性クラスタリングの場合
-
ディメンション表の数が4を超えることはできません。
-
属性クラスタリング列を提供する表への結合は、一意のキーまたは行の重複を回避する主キー列で行う必要があります。
-
-
属性クラスタリングは、
MERGE
文または複数表挿入操作を使用して挿入された行を並べ替えません。
CACHE | NOCACHE | CACHE READS
これらの句を使用すると、バッファ・キャッシュ内でのブロックの格納方法を指定できます。LOB記憶域の場合、CACHE
、NOCACHE
またはCACHE
READS
を指定できます。他のタイプの記憶域の場合、CACHE
またはNOCACHE
のみ指定できます。
これらの句を指定しない場合、次のようになります。
-
CREATE
TABLE
文では、NOCACHE
がデフォルトです。 -
ALTER
TABLE
文では、既存の値は変更されません。
この項で説明するCACHE
およびNOCACHE
の動作は、直接読取りが使用される場合、またはパラレル問合せを使用して表スキャンが実行される場合には適用されません。
アクセス頻度が高いデータの場合、この句を使用して、全表スキャンの実行時に、この表に対して取得されたブロックがバッファ・キャッシュ内の最低使用頻度(LRU)リストの最高使用頻度側に配置されるように指定します。この属性は、小規模な参照表で有効です。
関連項目:
データベースによる最低使用頻度(LRU)リストの保持の詳細は、『Oracle Database概要』を参照してください。
LOB_storage_clause
のパラメータとしてCACHE
を使用すると、より高速なアクセスのために、LOBデータ値がバッファ・キャッシュに配置されます。このパラメータは、logging_clause
と組み合せて評価されます。この句を省略すると、BasicFiles LOBとSecureFiles LOBの両方のデフォルト値は、NOCACHE
LOGGING
になります。
CACHEの制限事項
CACHE
は、索引構成表に対して指定できません。ただし、索引構成表は暗黙的にCACHE
動作を提供します。
アクセス頻度が低いデータの場合、この句を使用して、全表スキャンの実行時に、この表に対して取得されたブロックがバッファ・キャッシュ内のLRUリストの最低使用頻度側に配置されるように指定します。NOCACHE
は、LOB記憶域のデフォルトです。
LOB_storage_clause
のパラメータとしてNOCACHE
を使用すると、LOB値はバッファ・キャッシュに入りません。NOCACHE
は、LOB記憶域のデフォルトです。
NOCACHEの制限事項
NOCACHE
は、索引構成表に対して指定できません。
CACHE
READS
はLOB記憶域にのみ適用されます。LOB値が書込み操作中ではなく読取り操作中にバッファ・キャッシュに入れられるように指定します。
logging_clause
この句を使用すると、データ・ブロックの記憶域を記録するかどうかを指定できます。
関連項目:
logging_clause
をLOB_parameters
の一部として指定した場合については、「logging_clause」を参照してください。
result_cache_clause
この句を使用すると、この表が指名されている文または問合せブロックの結果を、結果キャッシュに格納する対象とするかどうかを指定できます。
STANDBY
を有効または無効にして、結果キャッシュにモードDEFAULT
またはモードFORCE
を使用できます。
-
DEFAULT
: 結果キャッシュは表レベルでは決定されません。RESULT_CACHE_MODE
初期化パラメータがFORCE
に設定されているか、またはMANUAL
に設定されていて問合せにRESULT_CACHE
ヒントを指定する場合は、問合せが結果キャッシュの対象となります。これは、この句を指定しない場合のデフォルトです。 -
FORCE
: 問合せで指定したすべての表がこの設定になっている場合は、問合せにNO_RESULT_CACHE
ヒントが指定されていないかぎり、その問合せは常にキャッシュの対象となります。問合せで指定した1つ以上の表がDEFAULT
に設定されている場合、この問合せにおける有効な表の注釈はDEFAULT
であるとみなされ、前述したセマンティクスに従います。 -
STANDBY
のデフォルト値はDISABLE
です。 -
問合せの結果を結果キャッシュに保存するには、問合せのすべての依存オブジェクトに対して
STANDBY
を有効にする必要があります。 -
プライマリでのトランザクションのコミット時にREDOマーカーを生成するために、トランザクションでオブジェクトに対して
STANDBY
を有効にする必要があります。
DBA_
、ALL_
およびUSER_TABLES
データ・ディクショナリ・ビューのRESULT_CACHE
列を問い合せると、表の結果キャッシュのモードを確認できます。
RESULT_CACHE
およびNO_RESULT_CACHE
のSQLヒントは、これらの結果キャッシュの表の注釈およびRESULT_CACHE_MODE
初期化パラメータより優先されます。RESULT_CACHE_MODE
をFORCE
に設定すると、その設定がこの表の注釈句より優先されます。
ノート:
RESULT_CACHE_MODE
をFORCE
に設定することはお薦めしません。なぜなら、データベースとクライアントがすべての問合せをキャッシュしようとするため、パフォーマンスおよびラッチのオーバーヘッドが非常に大きくなる可能性があるためです。
関連項目:
-
結果キャッシュの概要は、『Oracle Call Interfaceプログラマーズ・ガイド』および『Oracle Database概要』を参照してください。
-
この句の使用方法の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。
-
RESULT_CACHE_MODE
初期化パラメータと*_TABLES
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。 -
ヒントの詳細は、「RESULT_CACHEヒント」および「NO_RESULT_CACHEヒント」を参照してください。
parallel_clause
parallel_clause
を使用すると、表をパラレル作成した後、問合せおよびDMLのINSERT
、UPDATE
、DELETE
およびMERGE
に対するデフォルトの並列度を設定できます。
ノート:
parallel_clause
構文は、以前のリリースの構文にかわるものです。以前のリリースの構文は下位互換用にサポートされていますが、説明されている動作とわずかに異なることがあります。
NOPARALLEL
を指定すると、シリアル実行が行われます。これはデフォルトです。
PARALLEL
PARALLEL
を指定すると、並列度を選択できます。並列度は、すべての関係するインスタンスで使用可能なCPUの数に、初期化パラメータPARALLEL_THREADS_PER_CPU
の値を掛けたものです。
PARALLEL integer
integer
には、パラレル操作で使用するパラレル・スレッド数である並列度を指定します。各パラレル・スレッドは、1、2個のパラレル実行サーバーを使用します。通常、最適な並列度が計算されるため、integer
に値を指定する必要はありません。
関連項目:
この句の詳細は、「parallel_clause」を参照してください。
NOROWDEPENDENCIES | ROWDEPENDENCIES
この句では、表
が行レベル依存の追跡を使用するかどうかを指定できます。この機能を使用すると、表の各行は、行を変更した最後のトランザクションのコミット時刻以降を示すシステム変更番号(SCN)を持つことになります。表
の作成後は、この設定を変更できません。
ROWDEPENDENCIES
ROWDEPENDENCIES
を指定すると、行レベル依存の追跡を有効にできます。この設定は、主にレプリケーション環境でパラレル伝播を許可する場合に便利です。各行につきサイズが6バイト増えます。
ROWDEPENDENCIES句の制限事項
Oracleでは、行レベル依存の追跡を使用する表の表圧縮はサポートされません。ROWDEPENDENCIES
句とtable_compression
句の両方を指定した場合、table_compression
句は無視されます。ROWDEPENDENCIES
属性を削除するには、DBMS_REDEFINITION
パッケージを使用して表を再定義するか、表を再作成する必要があります。
NOROWDEPENDENCIES
NOROWDEPENDENCIES
を指定すると、table
で行レベル依存の追跡機能が使用されなくなります。これはデフォルトです。
enable_disable_clause
enable_disable_clause
を使用すると、制約が適用されるかどうかを指定できます。デフォルトでは、制約はENABLE
VALIDATE
状態で作成されます。
制約の有効化および無効化の制限事項
制約を有効および無効にするには、次の制限事項があります。
-
整合性制約を使用可能または使用禁止にする場合、この文または前の文に制約を定義する必要があります。
-
参照された一意キー制約または主キー制約が使用可能でない場合は、外部キー制約を使用可能にできません。
-
using_index_clause
のindex_properties
句で、INDEXTYPE
IS
...句は制約の定義において有効ではありません。
関連項目:
制約の詳細は、「constraint」を参照してください。また、「表の作成: ENABLE/DISABLEの例」も参照してください。
ENABLE句
この句を使用すると、表のデータに制約を適用できます。この句の詳細は、制約に関する項目の「ENABLE句」を参照してください。
DISABLE句
この句を使用すると、整合性制約を無効にできます。この句の詳細は、制約に関する項目の「DISABLE句」を参照してください。
UNIQUE
句を使用すると、指定された列または列の組合せに対して定義された一意制約を有効または無効にできます。
PRIMARY
KEY
句を使用すると、表に対して定義された主キー制約を有効または無効にできます。
CONSTRAINT
句を使用すると、constraint_name
に指定する整合性制約を有効または無効にできます。
KEEP | DROP INDEX
この句を使用すると、一意キー制約または主キー制約を適用するためにOracle Databaseで使用する索引を保持または削除できます。
索引の保持と削除の制限事項
一意キー制約または主キー制約が無効になっている場合にのみ、この句を指定できます。
using_index_clause
using_index_clause
を使用すると、一意キー制約または主キー制約を適用するためにOracle Databaseで使用する索引を指定するか、制約の適用に使用される索引を作成するようデータベースに指示できます。
関連項目:
-
index_attributes、global_partitioned_indexおよびlocal_partitioned_index句の詳細、および索引に関連する
NOSORT
とlogging_clause
の詳細は、「CREATE INDEX」を参照してください。 -
using_index_clause
、PRIMARY
KEY
制約およびUNIQUE
制約の詳細は、「constraint」を参照してください。 -
索引を使用した制約の適用例は、「明示的な索引の制御例」を参照してください。
CASCADE
CASCADE
を指定すると、指定した整合性制約に依存する整合性制約を無効にできます。参照整合性制約を構成する主キーまたは一意キーを使用禁止にする場合、この句を指定します。
CASCADEの制限事項
DISABLE
を指定した場合のみ、CASCADE
を指定できます。
row_movement_clause
row_movement_clause
を使用すると、表の行が移動されるかどうかを指定できます。表の圧縮時や、パーティション・データの更新操作時などに、行を移動できます。
ノート:
データ・アクセスで静的なROWIDが必要な場合は、行移動を有効にしないでください。通常の表(ヒープ構成表)の場合は、行を移動すると、その行のROWIDが変更されます。索引構成表での行の移動の場合は、論理ROWIDの物理推測コンポーネントは不正確になりますが、論理ROWIDは有効のままです。
-
ENABLE
を指定すると、行の移動を許可できます。このとき、ROWIDは変更されます。 -
DISABLE
を指定すると、行の移動を禁止できます。このとき、ROWIDは変更されません。
この句を省略すると、行移動は使用禁止になります。
行の移動の制限事項
この句は、非パーティション索引構成表に対して指定できません。
logical_replication_clause
この句は、Oracle GoldenGateなどのユーザーのために部分的なデータベース・レプリケーションを実行し、サプリメンタル・ロギングが有効になっている関心のあるスキーマ内で関心のない表のサプリメンタル・ロギングのオーバーヘッドを削減するために使用します。
ENABLE LOGICAL REPLICATION
ALLKEYS
、ALLOW NOVALIDATE KEYS
および[NO] PARTIAL JSON
を任意の順序で使用してENABLE LOGICAL REPLICATION
を指定できます。すべてのレベル(データベース、コンテナ、スキーマ、表)のサプリメタル・ログの設定が優先されます。この表には、IDまたはスケジュール・キー・サプリメンタル・ロギングは追加されません。
DISABLE LOGICAL REPLICATION
論理レプリケーションが表に対して無効になっている場合は、データベース・レベルのサプリメンタル・ロギングのみが適用されることを意味します。これにより、部分的なデータベース・レプリケーションのユーザー(データベース・レベルの列データのサプリメンタル・ロギングを有効にしないユーザー)は、関心のない表のサプリメンタル・ロギングを無効にできるため、サプリメンタル・ロギングがスキーマ・レベルで有効な場合でも、関心のない表の列データのサプリメンタル・ロギングはありません。
DISABLE LOGICAL REPLICATION
を使用して表を作成すると、その表の論理レプリケーションは無効になります。データベースおよびコンテナ・レベルのサプリメンタル・ログの設定が優先されますが、表レベルおよびスキーマ・レベルのサプリメンタル・ログの設定は無視されます。
ENABLE LOGICAL REPLICATION ALL KEYS
このオプションは、Golden Gate AUTO_CAPTURE
の表を有効にする場合に使用します。
IDおよびスケジューリングのキー、主キー(PK
)、外部キー(FK
)、一意索引(UI
)およびすべてのキー・サプリメンタル・ロギング(ALLKEYS
)は、表に対して暗黙的に有効になります。
ENABLE LOGICAL REPLICATION ALLOW NOVALIDATE KEYS
このオプションは、Golden Gate AUTO_CAPTURE
の表を有効にする場合に使用します。
IDおよびスケジューリングのキー、主キー(PK
)、外部キー(FK
)、一意索引(UI
)およびすべてのキー・サプリメンタル・ロギング(ALLKEYS
)は、表に対して暗黙的に有効になります。NOVALIDATE
モードの主キー制約は、表の一意識別子としてサプリメンタル・ログに記録できます。NOVALIDATE KEYS
は、行識別キーとして許容されています。
ENABLE LOGICAL REPLICATION ALLOW NOVALIDATE KEYS
を使用して表を作成すると、表に対してIDとスケジュール・キーが暗黙的に有効になります。NOVALIDATE
モードの主キー制約は、表の一意識別子としてサプリメンタル・ログに記録できます。
NO PARTIAL JSON
この句は、レプリケーションのターゲット・データベースがネイティブJSON
、部分的なJSON
またはJSON DIFF
をサポートしていない場合に使用します。これには、Oracle以外のターゲット・データベースと、DB互換性が23未満のOracleターゲット・データベースが含まれます。
NO PARTIAL JSON
は、JSON
型の列の有無にかかわらず指定できます。
表またはスキーマで列レベルのデータ・サプリメンタル・ロギングを有効にしていると、部分的なJSON
更新が無効になります。これは、JSON
更新により、常に完全なJSON
ドキュメントを含む新しいJSON
インスタンスが生成されることを意味します。これは、[NO] PARTIAL JSON
が未指定の場合のデフォルトです。
エラーなしでNO
PARTIAL JSON
を使用するには、データベース互換性初期化パラメータを23以上に設定する必要があります。
PARTIAL JSON
このオプションは、レプリケーションのターゲット・データベースがOracle Databaseで、データベース互換性初期化パラメータが23以上に設定されていて、ターゲット・データベースで部分的なJSON
およびJSON DIFF
をサポートできる場合に使用します。
PARTIAL JSON
は、JSON
型の列の有無にかかわらず指定できます。
PARTIAL JSON
を使用することで、表の部分的なJSON
更新を有効にできます。JSON_TRANSFORM
を使用して更新されたJSON
列は、表またはスキーマに列レベルのデータ・サプリメンタル・ロギングが追加されている場合でも、内部的に既存のJSON
インスタンスを部分的に更新できます。
エラーなしでPARTIAL JSON
を使用するには、データベース互換性初期化パラメータを23以上に設定する必要があります。
flashback_archive_clause
この句を指定するには、指定されたフラッシュバック・アーカイブに対するFLASHBACK
ARCHIVE
オブジェクト権限が必要です。この句を使用すると、表の履歴追跡を有効または無効にできます。
-
表の追跡を有効にするには、
FLASHBACK
ARCHIVE
を指定します。flashback_archive
は、この表に特定のフラッシュバック・アーカイブを指定する場合に指定できます。指定するフラッシュバック・アーカイブは、すでに存在している必要があります。flashback_archive
を省略すると、システムに対して指定されているデフォルトのフラッシュバック・アーカイブが使用されます。システムにデフォルトのフラッシュバック・アーカイブが指定されていない場合は、flashback_archive
を指定する必要があります。 -
表の追跡を無効にするには、
NO
FLASHBACK
ARCHIVE
を指定します。これはデフォルトです。
flashback_archive_clauseの制限事項
フラッシュバック・データ・アーカイブには、次の制限事項があります。
-
この句は、ネストした表、クラスタ化表、一時表、リモート表または外部表に対しては指定できません。
-
ハイブリッド列圧縮によって圧縮された表に対しては、この句を指定できません。
-
この句を指定する表には、
LONG
列またはネストした表の列を含めることはできません。 -
この句を指定した後でエクスポート・ユーティリティ、インポート・ユーティリティまたはトランスポータブル表領域機能を使用して表を別のデータベースにコピーすると、コピー先の表では追跡は有効にならず、元の表のアーカイブ・データは使用できません。
関連項目:
-
フラッシュバック・タイム・トラベルの使用についての一般情報は、Oracle Database開発ガイドを参照してください。
-
フラッシュバック・アーカイブの割当て制限属性と保存属性の変更およびフラッシュバック・アーカイブにおける表領域の記憶域の追加と変更の詳細は、ALTER FLASHBACK ARCHIVEを参照してください。
ROW ARCHIVAL
この句を指定すると、table
で行のアーカイブを有効にできます。この句によりインデータベース・アーカイブを実装でき、表の行をアクティブまたはアーカイブ済として指定できます。その後、表内のアクティブな行のみを対象に問合せを実行できます。
この句を指定すると、非表示列ORA_ARCHIVE_STATE
が表に作成されます。この列のデータ型は、VARCHAR2
です。この列に値0
または1
を指定すると、行がアクティブであるか(0
)アーカイブ対象であるか(1
)を示すことができます。表へのデータの挿入時、ORA_ARCHIVE_STATE
に値を指定しなかった場合、その値は0
に設定されます。
-
セッションが
ROW
ARCHIVE
VISIBILITY
=
ACTIVE
の場合、データベースは表に対する問合せの実行時に、アクティブな行のみを考慮します。 -
セッションが
ROW
ARCHIVE
VISIBILITY
=
ALL
の場合、データベースは表に対する問合せの実行時に、すべての行を考慮します。
関連項目:
-
セッションにおける行のアーカイブの可視性を構成する方法を学習するには、「
ALTER
SESSION
」の「セマンティクス」の句を参照してください。 -
既存の表の行アーカイブを有効または無効にする方法を学習するには、「
ALTER
TABLE
」の「[NO] ROW ARCHIVAL」句を参照してください。 -
インデータベース・アーカイブの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
FOR EXCHANGE WITH TABLE
この句を使用すると、既存のパーティション表の構造に一致する表を作成できます。これら2つの表は、パーティションとサブパーティションの交換に適格となります。table
には、既存のパーティション表を指定します。schema
には、既存のパーティション表を含むスキーマを指定します。schema
を指定しない場合、表は自分のスキーマ内にあるとみなされます。
この操作により、パーティション表のメタデータ・クローン(データなし)が作成されます。このクローンには、元の表と同じ列順序および列プロパティが含まれます。この操作中にクローンにコピーされる列プロパティには、使用禁止列、非表示列、仮想式列、ファンクション索引式列、および他の内部設定と属性が含まれます。既存のパーティション表の索引は、クローン表には作成されません。
後でALTER
TABLE
のexchange_partition_subpart
句を使用して、2つの表の間でパーティションまたはサブパーティションを交換できます。詳細は、「ALTER
TABLE
」の項目の「exchange_partition_subpart」を参照してください。
文字データ型の各スーパー・シャーディング・キー列またはシャーディング・キー列には、宣言された照合(BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。
FOR EXCHANGE WITH TABLEの制限事項
FOR
EXCHANGE
WITH
TABLE
句には、次の制限事項があります。
-
この句を指定する場合、
relational_properties
句は指定できません。 -
この句を指定する場合、
table_properties
句内で指定できるのは、table_partitioning_clause
のみです。 -
table_partitioning_clause内では、文字データ型が指定された各キー列には、宣言された照合(
BINARY
、USING_NLS_COMP
、USING_NLS_SORT
、USING_NLS_SORT_CS
のいずれか)が必要です。 -
コンポジット・パーティション表のパーティションのクローンを作成する場合は、交換するパーティションのサブパーティション化に厳密に一致する適切な
table_partitioning_clause
を明示的に指定する必要があります。 -
パーティション表の統計設定はクローニングされません。たとえば、増分統計が有効になっているパーティション表との交換を実行する場合は、クローン表の表シノプシスの作成を手動で有効にする必要があります。パーティション表の増分統計のメンテナンスの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。
-
外部表のクローンを作成することはできません。
-
FOR EXCHANGE WITH TABLE
句で指定された表がファイングレイン監査(FGA)ポリシーによって保護されている場合、表を作成しているユーザーがSYS
ユーザーでない場合には、CREATE TABLE
文が失敗します。 -
ターゲット表でVPDポリシーが有効になっている場合、この句は使用できません。
AS subquery
副問合せを指定して表の内容を定義します。表の作成時に、副問合せの結果として戻された行を表の中に挿入します。
オブジェクト表の場合、subquery
には表の型に対応する1つの式、または表の型の最上位属性の数のどちらかを設定できます。詳細は、「SELECT」を参照してください。
subquery
が、既存のマテリアライズド・ビューと部分的または完全に同じビューを戻す場合、subquery
に指定された1つ以上の表のかわりにマテリアライズド・ビューがクエリー・リライトに使用されることがあります。
関連項目:
マテリアライズド・ビューおよびクエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
データ型およびデータ長は、副問合せから導出されます。整合性制約や、その他の列および表の属性には次の規則が適用されます。
-
副問合せで、列を含む式ではなく列を選択した場合、選択した表の列に
NOT
NULL
制約が明示的に作成されていると、新しい表の対応する列にもNOT
DEFERRABLE
およびVALIDATE
状態の同じ制約が自動的に定義されます。制約に違反する行がある場合、表は作成されずエラーが戻されます。 -
選択した表の列に暗黙的に作成された
NOT
NULL
制約(たとえば、主キー)は、新しい表には引き継がれません。 -
主キー、一意キー、外部キー、CHECK制約、パーティション化条件、索引および列のデフォルト値は、新しい表に引き継がれません。
-
選択した表がパーティション化されている場合、新しい表を同じ方法でパーティション化するか、別の方法でパーティション化するか、またはパーティション化しないかを選択できます。パーティション化は、新しい表に引き継がれません。
AS
subquery
句の前に、CREATE
TABLE
文の一部として、必要なパーティション化を指定します。 -
選択した表で透過的データ暗号化を使用して暗号化された列は、新しい表の作成時に暗号化として列を定義しないかぎり、新しい表では暗号化されません。
ノート:
機密列は、データを移入する前に暗号化することをお薦めします。これにより、機密データのクリア・テキスト・コピーの作成を回避できます。
subquery
によって返される各列に列名がある場合、または指定した列別名を持つ式である場合、表定義から列を完全に省略できます。この場合、table
の列名はsubquery
の列の名前と同じになります。索引構成表の作成は例外です。この場合、主キー列を指定する必要があるため、表定義で列を指定する必要があります。
TO_LOB
ファンクションと組み合せてsubquery
を使用すると、別の表のLONG
列の値を、作成する表の列のLOB値に変換できます。
関連項目:
-
LONG
データをLOBにコピーする理由およびタイミングについては、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。 -
TO_LOB
ファンクションの使用方法は、「変換ファンクション」を参照してください。 -
order_by_clause
の詳細は、「SELECT」を参照してください。 -
AS
subquery
句を使用するときの統計収集の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。
parallel_clause
この文でparallel_clause
を指定した場合、INITIAL
記憶域パラメータに対して指定する値は無視され、かわりにNEXT
パラメータの値が使用されます。
関連項目:
これらのパラメータの詳細は、「storage_clause」を参照してください。
ORDER BY
ORDER
BY
句を使用すると、副問合せによって戻される行の順序付けを行うことができます。
この句をCREATE
TABLE
で指定した場合、この句が表全体にわたるデータを順序付けるとはかぎりません。たとえば、パーティション間での順序付けは行われません。同じキーの索引をORDER
BY
キー列として作成する場合に、この句を指定します。Oracle Databaseは、ORDER
BY
キーのデータをクラスタ化し、索引キーに対応させます。
表を定義する問合せの制限事項
表問合せには、次の制限事項があります。
-
表中の列数は、副問合せ中の式の数と同じである必要があります。
-
列定義では、列名、デフォルト値および整合性制約のみを指定できます。データ型は指定できません。
-
表が参照パーティション表で、なおかつ制約が表のパーティション化参照制約である場合を除いては、
AS
subquery
を含むCREATE
TABLE
文には、外部キー制約を定義できません。それ以外のすべての場合は、制約を指定せずに表を作成し、後でALTER
TABLE
文を使用してその制約を追加する必要があります。
FOR STAGING
FOR STAGING
は、Oracle Databaseのステージング・データ用に最適化されたステージング表を作成する場合に指定します。通常、ステージング表は存続期間が短く、データが絶え間なく変化する揮発性の表です。
ステージング表はパーティションの有無にかかわらずCREATE TABLE t FOR STAGING
を使用して作成することも、ALTER TABLE t FOR STAGING
を使用して既存の表をステージング表に変換することもできます。
例: ステージング表の作成
CREATE TABLE staging_table (col1 number, col2 varchar2(100)) FOR STAGING;
例: パーティションを含むステージング表の作成
CREATE TABLE part_staging_table (col1 number, col2 varchar2(100)) PARTITION BY RANGE (col1) (PARTITION p1 VALUES LESS THAN (100), PARTITION pmax VALUES LESS THAN (MAXVALUE)) FOR STAGING;
ステージング表には、パーティションの有無にかかわらず次の特性があります。
-
圧縮は明示的にオフにされ、表とそのパーティションおよびサブパーティションに対する将来のデータ・ロードでは禁止されます。既存の表をステージング表に変更しても、既存のデータの格納には影響しませんが、将来のデータ・ロードにのみ影響があります。
-
ALTER TABLE
を使用して、ステージング表、そのパーティションまたはサブパーティション、将来のデータ・ロードのデフォルト属性を変更することはできません。 ALTER TABLE
を使用して、データの移動と圧縮を伴うパーティション・メンテナンス操作を実行することはできません。-
ステージング表をパーティション化して、そのパーティションに圧縮を指定することはできません。
-
ステージング表の問合せには、動的サンプリングが使用されます。これは、ステージング表またはそのパーティションの統計が収集できないことを意味します。
-
ステージング表を削除すると、設定に関係なく、ごみ箱をバイパスして即座に削除されます。
ディクショナリ・ビューのUSER_TABLES
、ALL_TABLES
およびDBA_TABLES
では、ステージング表のプロパティが新しい列STAGING
に保持されます。STAGING
の値は、ステージングされた表の場合はYES
になり、それ以外の場合はNO
になります。
object_table
OF
句を使用すると、明示的にobject_type
型のオブジェクト表を作成できます。オブジェクト表の各列は、object_type
型の最上位の属性に対応します。各行には、オブジェクト・インスタンスが入り、また各インスタンスには、行の挿入時に一意のシステム生成オブジェクト識別子が割り当てられます。schema
を省略した場合、自分のスキーマ内にオブジェクト表が作成されます。
オブジェクト表、XMLType
表、オブジェクト・ビューおよびXMLType
ビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_ID
が定義されます。問合せでこの列名を使用し、WITH
OBJECT
IDENTIFIER
句を指定して、オブジェクト・ビューを作成できます。
関連項目:
object_table_substitution
object_table_substitution
句を使用すると、サブタイプに対応する行オブジェクトの、このオブジェクト表への挿入を許可するかどうかを指定できます。
NOT SUBSTITUTABLE AT ALL LEVELS
NOT
SUBSTITUTABLE
AT
ALL
LEVELS
を指定すると、作成するオブジェクト表は置換できなくなります。また、置換は、すべての埋込みオブジェクト属性および埋込みのネストした表と配列の要素には使用禁止です。デフォルトは、SUBSTITUTABLE
AT
ALL
LEVELS
です。
関連項目:
-
オブジェクト型の作成の詳細は、「CREATE TYPE」を参照してください。
-
REF
型の使用方法の詳細は、「ユーザー定義型」、「ユーザー定義ファンクション」、「SQL式」、「CREATE TYPE」および『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。
object_properties
オブジェクト表のプロパティは、基本的にリレーショナル表と同じです。ただし、列を指定するかわりに、オブジェクトの属性を指定します。
attribute
には、オブジェクト内の項目の修飾した列名を指定します。
oid_clause
oid_clause
を使用すると、オブジェクト表のオブジェクト識別子がシステム生成されるか、表の主キーを基に作成されるかを指定できます。デフォルトはSYSTEM
GENERATED
です。
oid_clauseの制限事項
この句には、次の制限事項があります。
-
主キー制約を表に指定していないと、
OBJECT
IDENTIFIER
IS
PRIMARY
KEY
は指定できません。 -
この句は、ネストした表には指定できません。
ノート:
主キー・オブジェクト識別子はローカルで一意ですが、グローバルで一意であるとはかぎりません。グローバルで一意の識別子が必要な場合は、主キーがグローバルで一意であることを確認してください。
oid_index_clause
この句は、oid_clause
をSYSTEM
GENERATED
として指定している場合のみに適用されます。非表示のオブジェクト識別子列に索引を指定します。また、任意に記憶特性を指定します。
index
には、非表示のシステム生成オブジェクト識別子列の索引の名前を指定します。index
を省略すると、名前が生成されます。
physical_propertiesおよびtable_properties
これらの句のセマンティクスについては、リレーショナル表の対応する項を参照してください。「physical_properties」および「table_properties」を参照してください。
XMLType_table
XMLType_table
構文を使用すると、XMLType
データ型の表を作成できます。XMLType
表の作成に使用されるほとんどの句のセマンティクスは、オブジェクト表のセマンティクスと同じです。この項では、XMLType
表固有の句について説明します。
オブジェクト表、XMLType
表、オブジェクト・ビューおよびXMLType
ビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_ID
が定義されます。問合せでこの列名を使用し、WITH
OBJECT
IDENTIFIER
句を指定して、オブジェクト・ビューを作成できます。
XMLSchema_spec
この句を使用すると、登録済XMLスキーマ(XMLSCHEMA
句で登録するかELEMENT
句の一部として登録)のURLおよびXML要素名を指定できます。
XMLスキーマのURLは省略可能ですが、要素は必ず指定します。XMLスキーマのURLを指定する場合は、DBMS_XMLSCHEMA
パッケージを使用してXMLスキーマをあらかじめ登録しておく必要があります。
オプションのSTORE
ALL
VARRAYS
AS
句を使用すると、XMLType
表または列に含まれるすべてのVARRAYの格納方法を指定できます。
-
STORE
ALL
VARRAYS
AS
LOBS
を指定すると、すべてのVARRAYがLOBとして格納されます。 -
STORE
ALL
VARRAYS
AS
TABLES
を指定すると、すべてのVARRAYが表として格納されます。
オプションのALLOW
| DISALLOW
句は、BINARY
XML
記憶域を指定した場合にのみ有効です。
-
ALLOW
NONSCHEMA
を指定すると、スキーマ・ベース以外のドキュメントをXMLType
列に格納できます。 -
DISALLOW
NONSCHEMA
を指定すると、スキーマ・ベース以外のドキュメントはXMLType
列に格納できません。これはデフォルトです。 -
ALLOW
ANYSCHEMA
を指定すると、スキーマ・ベースの任意のドキュメントをXMLType
列に格納できます。 -
DISALLOW
ANYSCHEMA
を指定すると、スキーマ・ベースの任意のドキュメントはXMLType
列に格納できません。これはデフォルトです。
関連項目:
-
DBMS_XMLSCHEMA
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
XMLデータの作成方法および使用方法の詳細は、『Oracle XML DB開発者ガイド』を参照してください。
MEMOPTIMIZE FOR READ
高速参照を有効にするには、この句を使用します。高速参照を使用すると、頻度の高いデータ問合せ操作でパフォーマンスが向上します。MEMOPTIMIZE_POOL_SIZE
初期化パラメータは、memoptimizeプールのサイズを制御します。この機能は、SGAから追加のメモリーを使用することに注意してください。
-
この句は、表の最上位の属性として指定する必要があり、パーティション・レベルまたはサブパーティション・レベルで指定することはできません。
-
表からデータを読み取る前に、
MEMOPTIMIZE FOR READ
に対して表を明示的に有効にする必要があります。
MEMOPTIMIZE FOR WRITE
高速収集を有効にするには、この句を使用します。高速収集は、モノのインターネット(IoT)アプリケーションから1行データを挿入する頻繁な操作でメモリーを最適化します。
-
MEMOPTIMZE FOR WRITE
は最上位の属性であり、パーティションまたはサブパーティション・レベルでは使用できません。 -
表のデータをIGAに書き込むには、その表であらかじめ
MEMOPTIMIZE FOR WRITE
が有効になっている必要があります。
制限事項
ブロックチェーンおよび不変表は、MEMOPTIMZE FOR WRITE
をサポートしていません。
BFILE
データ型の列は、MEMOPTIMZE FOR WRITE
をサポートしていません。
PARENT
この句を使用して、シャード表ファミリに子表を作成できます。
シャード表ファミリは、同様にシャーディングされた一連の表です。表ファミリにあるすべてのテーブルに対応するパーティションは、同じシャードに格納されます。これにより、表ファミリのデータを問い合せるときに、マルチシャード結合の数を最小限に抑えることができます。
シャード表ファミリの作成方法は2種類あります。参照パーティション化を使用する方法をお薦めします。ただし、参照パーティション化に必要な主キー制約と外部キー制約を作成できない場合や、作成が望ましくない場合は、PARENT
句を使用してシャード表ファミリを作成できます。
シャード表ファミリを作成するための規則は、使用する方法によって異なります。PARENT
句を使用してシャード表ファミリを作成する場合は、次の規則が適用されます。
-
シャード表ファミリには2レベルの表(親表と1つ以上の子表)のみを含めることができます。
-
ファミリ内のすべての表は、同じパーティション化スキームを使用して明示的にパーティション化する必要があります。各表は、別々のサブパーティション化スキームを使用することも、一切使用しないこともできます。
-
最初に親表を作成する必要があります。また、この表はシャード表にする必要があります。
-
CREATE
SHARDED
TABLE
...PARENT
...文を使用して、各子表を作成できます。table
には、親表の名前を指定します。schema
には、親表を含むスキーマを指定します。schema
を省略すると、親表は自分のスキーマ内にあるとみなされます。
システム・シャーディングを使用すれば複数のシャード表ファミリを作成できますが、コンポジットまたはユーザー定義のシャーディングを使用する場合は最大1つのみを作成できます。
関連項目:
例
表の作成: 一般的な例
次の文は、人事情報のサンプル・スキーマ(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 8M);
DEFAULT ON NULL列値を含む表の作成: 例
次の文では、従業員データを格納するために使用できる、表myemp
を作成します。department_id
列は、値が50のDEFAULT
ON
NULL
列値で定義されています。そのため、それ以降のINSERT
文でNULL値をdepartment_id
に割り当てようとすると、そのかわりに値50が割り当てられるようになります。
CREATE TABLE myemp (employee_id number, last_name varchar2(25), department_id NUMBER DEFAULT ON NULL 50 NOT NULL);
employees
表内のemployee_id
178は、department_id
にNULL値を保持しています。
SELECT employee_id, last_name, department_id FROM employees WHERE department_id IS NULL; EMPLOYEE_ID LAST_NAME DEPARTMENT_ID ----------- ------------------------- ------------- 178 Grant
employees
表のemployee_id
列、last_name
列、およびdepartment_id
列のデータを、myemp
表に移入します。
INSERT INTO myemp (employee_id, last_name, department_id) (SELECT employee_id, last_name, department_id from employees);
myemp
表のemployee_id
178は、department_id
に50の値を保持しています。
SELECT employee_id, last_name, department_id FROM myemp WHERE employee_id = 178; EMPLOYEE_ID LAST_NAME DEPARTMENT_ID ----------- ------------------------- ------------- 178 Grant 50
ID列を含む表の作成例:
次の文では、ID列id
を含む表t1
を作成します。この順序ジェネレータは、増加する整数値を常にid
に割り当てます。この整数値は、1
から始まります。
CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY);
次の文では、ID列id
を含む表t2
を作成します。この順序ジェネレータは、デフォルトで、100から始まり10ずつ増加する整数値をid
に割り当てるようになります。
CREATE TABLE t2 (id NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 10));
表の作成: 一時表の例
次の文は、販売員が使用するサンプル・データベースの一時表today_sales
を作成します。各販売員のセッションは、自身のその日の販売データを表に格納します。一時的なデータは、セッションの終わりに削除されます。
CREATE GLOBAL TEMPORARY TABLE today_sales ON COMMIT PRESERVE ROWS AS SELECT * FROM orders WHERE order_date = SYSDATE;
遅延セグメント作成を使用する表の作成: 例
次の文は、遅延セグメント作成を使用する表を作成します。この表のデータを保持するためのセグメントは、表にデータが挿入されるまで作成されません。
CREATE TABLE later (col1 NUMBER, col2 VARCHAR2(20)) SEGMENT CREATION DEFERRED;
置換可能な表および列のサンプル
次の文は、置換可能な表の作成に使用できる型の階層を作成します。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;
表の作成: ENABLE/DISABLEの例
次の文は、サンプル表departments
の作成方法を示しています。この例では、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列の例
次の文は、いくつかのLOB記憶特性が追加された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 ) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab_new LOB (ad_sourcetext, ad_finaltext) STORE AS (TABLESPACE example STORAGE (INITIAL 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 ) OVERFLOW STORAGE ( INITIAL 4K );
外部表の例
次の文は、サンプル表hr
.departments
のサブセットを示す外部表を作成します。TYPE
句は、表のアクセス・ドライバ・タイプをORACLE_LOADER
に指定します。ACCESS
PARAMETERS()
句は、ORACLE_LOADER
アクセス・ドライバのパラメータ値を指定します。これらのパラメータはイタリック体で表され、opaque_format_spec
を形成します。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;
関連項目:
admin
ディレクトリの作成方法は、「ディレクトリの作成: 例」を参照してください。
この項では、XMLType
表またはXMLType
列の作成例について説明します。これらの例の詳細は、「SQL文でのXMLの使用方法」を参照してください。
XMLType表の例
次の例は、暗黙的な1つのバイナリXML列を持つ非常に単純なXMLType
表を作成します。
CREATE TABLE xwarehouses OF XMLTYPE;
次の例では、XMLSchemaベースの表を作成します。XMLスキーマは事前に作成しておく必要があります(詳細は、「SQL文でのXMLの使用方法」を参照してください)。
CREATE TABLE xwarehouses OF XMLTYPE XMLSCHEMA "http://www.example.com/xwarehouses.xsd" ELEMENT "Warehouse";
XMLスキーマベースの表に制約を定義したり、索引を作成できるため、後続の問合せのパフォーマンスが大幅に向上します。XMLType
表にオブジェクト・リレーショナル・ビューを作成することも、オブジェクト・リレーショナル表にXMLType
ビューを作成することもできます。
関連項目:
-
制約の追加例は、「SQL文でのXMLの使用方法」を参照してください。
-
索引の作成例は、「XMLType表の索引の作成例:」を参照してください。
-
XMLType
ビューの作成例は、「XMLTypeビューの作成: 例」を参照してください。
XMLType列の例
次の例は、CLOB
として格納されるXMLType
列を持つ表を作成します。この表ではXMLスキーマが必要ないため、コンテンツ構造は事前に定義しません。
CREATE TABLE xwarehouses ( warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE warehouse_spec STORE AS CLOB (TABLESPACE example STORAGE (INITIAL 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";
次の例では、SecureFiles CLOB
として格納されたXMLType
列を持つ別の同様の表を作成します。この表ではXMLスキーマが必要ないため、コンテンツ構造は事前に定義しません。SecureFiles LOBには自動セグメント領域管理が行われる表領域が必要であるため、この例では「表領域に対するセグメント領域管理の指定: 例」で作成した表領域を使用します。
CREATE TABLE xwarehouses ( warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE warehouse_spec STORE AS SECUREFILE CLOB (TABLESPACE auto_seg_ts STORAGE (INITIAL 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およびパーティショニング・ガイド』を参照してください。
Live SQLのレンジ・パーティション化の例
次の文は、レンジによってパーティション化された表を作成します。
CREATE TABLE empl_h ( employee_id NUMBER(6) PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHAR2(20), hire_date DATE DEFAULT SYSDATE, job_id VARCHAR2(10), salary NUMBER(8, 2), part_name VARCHAR2(25) ) PARTITION BY RANGE (hire_date) ( PARTITION hire_q1 VALUES less than(to_date('01-APR-2014', 'DD-MON-YYYY')), PARTITION hire_q2 VALUES less than(to_date('01-JUL-2014', 'DD-MON-YYYY')), PARTITION hire_q3 VALUES less than(to_date('01-OCT-2014', 'DD-MON-YYYY')), PARTITION hire_q4 VALUES less than(to_date('01-JAN-2015', 'DD-MON-YYYY')) );
次の文は行をパーティションに挿入します。
INSERT INTO empl_h (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, Part_name) VALUES (1, 'Jane', 'Doe', 'example.com', '415.555.0100', '10-Feb-2014', '1001', 5001,'HIRE_Q1'); INSERT INTO empl_h (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, Part_name) VALUES (2, 'John', 'Doe', 'example.net', '415.555.0101', '10-Apr-2014', '1002', 7001,'HIRE_Q2'); INSERT INTO empl_h (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, Part_name) VALUES (3, 'Isabelle', 'Owl', 'example.org', '415.555.0102', '10-Sep-2014', '1003', 10001,'HIRE_Q3'); INSERT INTO empl_h (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, Part_name) VALUES (4, 'Smith', 'Jones', 'example.in', '415.555.0103', '10-Dec-2014', '1004', 12001,'HIRE_Q4');
次の文は、データ・ディクショナリ表を使用してパーティション名を表示します。
SELECT PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'EMPL_H'; PARTITION_NAME ---------------- HIRE_Q1 HIRE_Q2 HIRE_Q3 HIRE_Q4 SELECT TABLE_NAME, PARTITIONING_TYPE, STATUS FROM USER_PART_TABLES WHERE TABLE_NAME = 'EMPL_H'; TABLE_NAME PARTITIONING_TYPE STATUS ---------- ----------------- ------ EMPL_H RANGE VALID
次の文は、データ・ディクショナリ表user_tab_partitions
から特定の列を選択することにより、parts
という名前の表を作成します。
CREATE TABLE parts (p_name) AS SELECT PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'EMPL_H';
次の文は表データを表示します。
select * from parts; P_NAME ----------- HIRE_Q1 HIRE_Q2 HIRE_Q3 HIRE_Q4
次の文は2つの表の列を比較し、比較に基づいて情報を表示します。
select E.HIRE_DATE,E.JOB_ID,P.p_name from empl_h E, parts P where E.Part_name = P.p_name; HIRE_DATE JOB_ID P_NAME --------- ---------- ------------ 10-FEB-14 1001 HIRE_Q1 10-APR-14 1002 HIRE_Q2 10-SEP-14 1003 HIRE_Q3 10-DEC-14 1004 HIRE_Q4
時間隔パーティションの例
次の例は、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(40)) 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));
LOB列のあるパーティション表の例
次の文は、2つのパーティションp1
とp2
、およびいくつかのLOB列を持つパーティション表print_media_demo
を作成します。この文では、サンプル表pm.print_media
を使用しています。
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 (INITIAL 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)) NESTED TABLE ad_textdocs_ntab STORE AS nt_p1 (TABLESPACE example), PARTITION P2 VALUES LESS THAN (MAXVALUE) LOB (ad_composite, ad_finaltext) STORE AS SECUREFILE (TABLESPACE auto_seg_ts) NESTED TABLE ad_textdocs_ntab STORE AS nt_p2 ) TABLESPACE tbs_03;
パーティションp1
は、表領域tbs_01
にあります。ad_composite
およびad_photo
に対するLOBデータのパーティションは、表領域tbs_02
にあります。残りのLOB列に対するLOBデータのパーティションは、表領域tbs_01
にあります。LOB列ad_composite
およびad_photo
に、記憶域属性INITIAL
を指定します。他の属性は、デフォルトの表レベルの指定から継承されます。表レベルで指定されていないデフォルトのLOB記憶域属性は、ad_composite
列およびad_photo
列については表領域tbs_02
から継承されます。残りのLOB列については、表領域tbs_01
から継承されます。LOB索引パーティションは、対応するLOBデータ・パーティションと同じ表領域に存在します。他の記憶域属性は、LOBデータ・パーティションの対応する属性値および索引パーティションがある表領域のデフォルト属性に基づきます。ad_textdocs_ntabのネストされた表パーティションは、nt_p1
として表領域example
に格納されます。
パーティションp2
は、デフォルトの表領域tbs_03
内にあります。ad_composite
およびad_finaltext
に対するLOBデータは、SecureFiles LOBとして表領域auto_seg_ts
内に存在します。残りのLOB列に対するLOBデータは、表領域tbs_03
にあります。ad_composite
列およびad_finaltext
列に対するLOB索引は、表領域auto_seg_ts
内にあります。残りのLOB列に対するLOB索引は、表領域tbs_03
にあります。ad_textdocs_ntab
のネストされた表パーティションは、nt_p2
としてデフォルト表領域tbs_03
に格納されます。
ハッシュ・パーティション化の例
サンプル表oe.product_information
は、パーティション化されていません。次の例は、パフォーマンス上の理由で、このような大規模な表をハッシュでパーティション化します。この例では、表領域は仮想の名前です。
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_obj_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') );
表作成時の注釈の追加: 例
次の例では、値Sort
およびGroup
を持つ2つの操作と、値を持たないスタンドアロンのHidden
を表t1
に追加します。
CREATE TABLE t1 (T NUMBER) ANNOTATIONS(Operations 'Sort', Operations 'Group', Hidden);
次の例に示すように、注釈の前にキーワードADD
(何も指定されていない場合のデフォルトの操作)を付けることができます。
CREATE TABLE t1 (T NUMBER) ANNOTATIONS (ADD Hidden);
表の列への注釈の追加
CREATE TABLE t1 (T NUMBER ANNOTATIONS(Operations 'Sort' , Hidden) );
表および列への注釈の追加
CREATE TABLE Employee ( Id NUMBER(5) ANNOTATIONS(Identity, Display ’Employee ID’, Group ’Emp_Info’), Ename VARCHAR2(50) ANNOTATIONS(Display ’Employee Name’, Group ’Emp_Info’), Sal NUMBER TAG ANNOTATIONS(Display ’Employee Salary’, UI_Hidden) ) ANNOTATIONS (Display ’Employee Table’);
CREATE TABLEを使用したドメインへの表の列の関連付け: 例
表の列は、CREATE TABLE
またはALTER TABLE MODIFY
でドメインに関連付けできます。
すべての列の定義後に、文の最後でドメイン関連付けを指定する必要があります。
指定する場合は、DOMAIN
キーワードの後にドメイン名を指定する必要があります。
表の列とドメインの関連付け: 例
次の例では、ドメインdn1
を作成します。
CREATE DOMAIN dn1 AS NUMBER;
次の例では、ドメインdn2
を作成します。
CREATE DOMAIN dn2 AS (c1 AS NUMBER NOT NULL, c2 as NUMBER DEFAULT 1);
次の例では、ドメインdm1
を作成します。
CREATE DOMAIN dm1 AS (ann AS NUMBER NOT NULL , bnnpos AS NUMBER NOT NULL CONSTRAINT CHECK (bnnpos > 0), c AS VARCHAR2(10) DEFAULT 'abc', ddon AS NUMBER DEFAULT ON NULL 10) CONSTRAINT CHECK (ann+ddon < = 100) CONSTRAINT CHECK (length(c) > bnnpos);
次の例では、列c1
、c2
、c3
、c4
をドメインdm1
に関連付けて、列c5
およびc6
をドメインdn2
に関連付けます。また、列c7
をdn1
に関連付けます。
CREATE TABLE tm1 (c1 NUMBER, c2 NUMBER, c3 VARCHAR2(15),c4 NUMBER, c5 NUMBER, c6 NUMBER, c7 NUMBER, DOMAIN dm1 (c1, c2, c3, c4), DOMAIN dn2(c5, c6), DOMAIN dn1(c7));
トランスポータブル・バイナリXMLとしての表および列の作成
トランスポータブル・バイナリXMLとして格納される表の作成
CREATE TABLE t1 OF XMLTYPE XMLTYPE STORE AS TRANSPORTABLE BINARY XML;
トランスポータブル・バイナリXMLとして格納される列の作成
CREATE TABLE t2 (id NUMBER, doc XMLTYPE) XMLTYPE doc STORE AS TRANSPORTABLE BINARY XML;
トランスポータブル・バイナリXMLとして格納された列の表への追加
ALTER TABLE t3 ADD (doc XMLTYPE) XMLTYPE doc STORE AS TRANSPORTABLE BINARY XML;