ALTER TABLE
目的
ALTER
TABLE
文を使用すると、非パーティション表、パーティション表、表パーティションおよび表サブパーティションの定義を変更できます。オブジェクト表またはオブジェクト列を含むリレーショナル表の場合は、ALTER
TABLE
を使用して型が変更された後に、表を参照する型の最新の定義に変換します。
ノート:
マテリアライズド・ビュー・ログ表の操作では、可能な場合は常に、ALTER
TABLE
文ではなくALTER
MATERIALIZED
VIEW
LOG
文を使用することをお薦めします。
関連項目:
-
表の作成については、「CREATE TABLE」を参照してください。
-
Oracle Textとともに使用する
ALTER
TABLE
文については、『Oracle Textリファレンス』を参照してください。
前提条件
表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、その表に対するALTER
オブジェクト権限またはALTER
ANY
TABLE
システム権限が必要です。
パーティション化操作のその他の前提条件
表の所有者ではない場合、drop_table_partition
またはtruncate_table_partition
句を使用するには、DROP
ANY
TABLE
権限が必要です。
add_table_partition
、modify_table_partition
、move_table_partition
およびsplit_table_partition
句を使用する場合、領域を確保する表領域に領域割当て制限が必要です。
パーティション化操作が子の参照パーティション表にカスケードする場合、子の参照パーティション表では権限は必要ありません。
exchange_partition_subpart
句を使用する際、交換される表データにID列が含まれており、自分が交換に関与する両方の表の所有者ではない場合は、ALTER
ANY
SEQUENCE
システム権限が必要です。
オブジェクト型を持つ非パーティション表はパーティション化できません。
制約およびトリガーのその他の前提条件
一意キー制約または主キー制約を有効にする場合は、表に索引を作成するための権限が必要です。Oracle Databaseでは、表を含むスキーマにおいて、一意キーまたは主キーの列に索引を作成するため、この権限が必要になります。
トリガーを使用可能または使用禁止にする場合、トリガーが自分のスキーマ内にある必要があります。自分のスキーマにない場合は、ALTER
ANY
TRIGGER
システム権限が必要です。
関連項目:
索引を作成する場合に必要な権限については、「CREATE INDEX」を参照してください。
オブジェクト型を使用する場合のその他の前提条件
表を変更するときに列定義でオブジェクト型を使用する場合、そのオブジェクトが、変更する表と同じスキーマに属している必要があります。または、EXECUTE
ANY
TYPE
システム権限またはそのオブジェクト型に対するEXECUTE
オブジェクト権限が必要です。
フラッシュバック・データ・アーカイブ操作のその他の前提条件
flashback_archive_clause
を使用して表の履歴追跡を有効化するには、履歴データが格納されるフラッシュバック・アーカイブに対するFLASHBACK
ARCHIVE
オブジェクト権限が必要です。flashback_archive_clause
を使用して表の履歴追跡を無効にするには、FLASHBACK
ARCHIVE
ADMINSTER
システム権限を持っているか、またはSYSDBA
としてログインしている必要があります。
エディション・オブジェクトの参照に対するその他の前提条件
evaluation_edition_clause
またはunusable_editions_clause
でエディションを指定するには、そのエディションに対するUSE
権限が必要になります。
構文
alter_table::=
ノート:
table
の後に句を指定する必要があります。必須の句はありませんが、1つ以上の句を指定する必要があります。
ALTER TABLE構文のグループは、次のとおりです。
各句の後には、そのコンポーネントの副次句の参照先が記載されています。
memoptimize_read_clause::=
memoptimize_write_clause
alter_table_properties::=
ノート:
MODIFY
CLUSTERING
句を指定する場合、clustering_when
またはzonemap_clause
句のいずれかを指定する必要があります。
(physical_attributes_clause::=、logging_clause::=、table_compression::=、inmemory_table_clause::=、ilm_clause::=、supplemental_table_logging::=、allocate_extent_clause::=、deallocate_unused_clause::=、upgrade_table_clause::=、records_per_block_clause::=、parallel_clause::=、row_movement_clause::=、flashback_archive_clause::=、shrink_clause::=、attribute_clustering_clause::=、clustering_when::=、zonemap_clause::=、alter_iot_clauses::=、alter_XMLSchema_clause::=)
logging_clause::=
table_compression::=
inmemory_table_clause::=
inmemory_attributes::=
(inmemory_memcompress::=、inmemory_priority::=、inmemory_distribute::=、inmemory_duplicate::=)
inmemory_memcompress::=
inmemory_priority::=
inmemory_distribute::=
inmemory_duplicate::=
ilm_clause::=
ilm_policy_clause::=
(ilm_compression_policy::=、ilm_tiering_policy::=、ilm_inmemory_policy::=)
ilm_inmemory_policy::=
ilm_time_period::=
supplemental_table_logging::=
supplemental_log_grp_clause::=
supplemental_id_key_clause::=を参照
records_per_block_clause::=
row_movement_clause::=
logical_replication_clause
flashback_archive_clause::=
alter_iot_clauses::=
index_org_table_clause::=
(mapping_table_clauses::=、prefix_compression::=、index_org_overflow_clause::=)
mapping_table_clauses::=
index_compression::=
prefix_compression::=
advanced_index_compression::=
partition_extended_name::=
subpartition_extended_name::=
segment_attributes_clause::=
(physical_attributes_clause::=、TABLESPACE
SET
: ALTER
TABLE
ではサポートされていません、logging_clause::=)
alter_overflow_clause::=
(segment_attributes_clause::=、allocate_extent_clause::=、shrink_clause::=、deallocate_unused_clause::=)
alter_mapping_table_clauses::=
shrink_clause::=
attribute_clustering_clause::=
(clustering_join::=、cluster_clause::=、clustering_when::=、zonemap_clause::=)
clustering_join::=
cluster_clause::=
clustering_columns::=
clustering_column_group::=
clustering_when::=
zonemap_clause::=
column_clauses::=
(add_column_clause::=、modify_column_clauses::=、drop_column_clause::=、add_period_clause::=、drop_period_clause::=、rename_column_clause::=、modify_collection_retrieval::=、modify_LOB_storage_clause::=、alter_varray_col_properties::=)
add_column_clause::=
(column_definition::=、virtual_column_definition::=、column_properties::=、out_of_line_part_storage::=)
column_definition::=
(identity_clause::=、encryption_spec::=、inline_constraint
およびinline_ref_constraint
: constraint::=)
identity_clause::=
identity_options::=
virtual_column_definition::=
(evaluation_edition_clause::=、unusable_editions_clause::=、constraint::=)
evaluation_edition_clause::=
unusable_editions_clause::=
modify_column_clauses::=
(modify_col_properties::=、modify_virtcol_properties::=、modify_col_visibility::=、modify_col_substitutable::=)
modify_col_properties::=
(identity_clause::=、encryption_spec::=、inline_constraint
: constraint::=、LOB_storage_clause::=、alter_XMLSchema_clause::=)
encryption_spec::=
modify_virtcol_properties::=
modify_col_visibility::=
modify_col_substitutable::=
drop_column_clause::=
add_period_clause::=
period_definition::=
drop_period_clause::=
rename_column_clause::=
drop_constraint_clause::=
out_of_line_part_storage::=
substitutable_column_clause::=
object_properties::=
(constraint::=のinline_constraint
、inline_ref_constraint
、out_of_line_constraint
、out_of_line_ref_constraint
を参照)
supplemental_logging_props::=
(supplemental_log_grp_clause::=、supplemental_id_key_clause::=)
physical_properties::=
(deferred_segment_creation::=、segment_attributes_clause::=、table_compression::=、inmemory_table_clause::= (CREATE
TABLE
構文の一部)、ilm_clause::=、heap_org_table_clause::=、index_org_table_clause::=、external_table_clause::= (CREATE
TABLE
構文の一部))
deferred_segment_creation::=
heap_org_table_clause::=
(table_compression::=、inmemory_table_clause::= (CREATE
TABLE
構文の一部)、ilm_clause::=)
LOB_storage_parameters::=
(TABLESPACE
SET
: ALTER
TABLE
ではサポートされていません、LOB_parameters::=、storage_clause::=)
LOB_parameters::=
(LOB_retention_clause::=、LOB_deduplicate_clause::=、LOB_compression_clause::=、encryption_spec::=、logging_clause::=)
modify_LOB_storage_clause::=
modify_LOB_parameters::=
(storage_clause::=、LOB_retention_clause::=、LOB_compression_clause::=、encryption_spec::=、logging_clause::=、allocate_extent_clause::=、shrink_clause::=、deallocate_unused_clause::=)
LOB_retention_clause::=
LOB_deduplicate_clause::=
LOB_compression_clause::=
LOB_partition_storage::=
(LOB_storage_clause::=、varray_col_properties::=、LOB_partitioning_storage::=)
LOB_partitioning_storage::=
(TABLESPACE
SET
: ALTER
TABLE
ではサポートされていません)
XMLType_column_properties::=
XMLType_storage::=
XMLSchema_spec::=
alter_XMLSchema_clause::=
alter_external_table::=
(add_column_clause::=、modify_column_clauses::=、drop_column_clause::=、parallel_clause::=、external_table_data_props::=)
external_table_data_props::=
external_part_subpart_data_props::=
alter_table_partitioning::=
(modify_table_default_attrs::=、alter_automatic_partitioning::=、alter_interval_partitioning::=、set_subpartition_template::=、modify_table_partition::=、modify_table_subpartition::=、move_table_partition::=、move_table_subpartition::=、add_table_partition::=、coalesce_table_partition::=、drop_table_partition::=、drop_table_subpartition::=、rename_partition_subpart::=、truncate_partition_subpart::=、split_table_partition::=、split_table_subpartition::=、merge_table_partitions::=、merge_table_subpartitions::=、exchange_partition_subpart::=)
modify_table_default_attrs::=
(partition_extended_name::=、deferred_segment_creation::=、read_only_clause::=、indexing_clause::=、segment_attributes_clause::=、table_compression::=、inmemory_clause::=、prefix_compression::=、alter_overflow_clause::=、LOB_parameters::=)
read_only_clause::=
indexing_clause::=
alter_automatic_partitioning::=
alter_interval_partitioning::=
set_subpartition_template::=
(range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=)
modify_table_partition::=
(modify_range_partition::=、modify_hash_partition::=、modify_list_partition::=)
modify_range_partition::=
(partition_extended_name::=、partition_attributes::=、add_range_subpartition::=、add_hash_subpartition::=、add_list_subpartition::=、coalesce_table_subpartition::=、alter_mapping_table_clauses::=、read_only_clause::=、indexing_clause::=)
modify_hash_partition::=
(partition_extended_name::=、coalesce_table_subpartition::=、partition_attributes::=、alter_mapping_table_clauses::=、read_only_clause::=、indexing_clause::=)
modify_list_partition::=
(partition_extended_name::=、partition_attributes::=、list_values::=、add_range_subpartition::=、add_list_subpartition::=、add_hash_subpartition::=、coalesce_table_subpartition::=、read_only_clause::=、indexing_clause::=)
modify_table_subpartition::=
(subpartition_extended_name::=、allocate_extent_clause::=、deallocate_unused_clause::=、shrink_clause::=、modify_LOB_parameters::=、list_values::=、read_only_clause::=、indexing_clause::=)
move_table_partition::=
(partition_extended_name::=、table_partition_description::=、filter_condition::=、update_index_clauses::=、parallel_clause::=、allow_disallow_clustering::=)
filter_condition::=
allow_disallow_clustering::=
move_table_subpartition::=
(subpartition_extended_name::=、indexing_clause::=、partitioning_storage_clause::=、update_index_clauses::=、filter_condition::=、parallel_clause::=、allow_disallow_clustering::=)
add_table_partition::=
(add_range_partition_clause::=、add_list_partition_clause::=、add_system_partition_clause::=、add_hash_partition_clause::=、dependent_tables_clause:=)
add_range_partition_clause::=
(range_values_clause::=、table_partition_description::=、external_part_subpart_data_props::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=、update_index_clauses::=)
add_hash_partition_clause::=
(partitioning_storage_clause::=、update_index_clauses::=、parallel_clause::=、read_only_clause::=、indexing_clause::=)
add_list_partition_clause::=
(list_values_clause::=、table_partition_description::=、external_part_subpart_data_props::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=、update_index_clauses::=)
add_system_partition_clause::=
add_range_subpartition::=
(range_subpartition_desc::=、dependent_tables_clause:=、update_index_clauses::=)
add_hash_subpartition::=
(individual_hash_subparts::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=)
add_list_subpartition::=
(list_subpartition_desc::=、dependent_tables_clause:=、update_index_clauses::=)
coalesce_table_partition::=
(update_index_clauses::=、parallel_clause::=、allow_disallow_clustering::=)
coalesce_table_subpartition::=
(update_index_clauses::=、parallel_clause::=、allow_disallow_clustering::=)
drop_table_partition::=
(partition_extended_names::=、update_index_clauses::=、parallel_clause::=)
drop_table_subpartition::=
(subpartition_extended_names::=、update_index_clauses::=、parallel_clause::=)
rename_partition_subpart::=
truncate_partition_subpart::=
(partition_extended_names::=、subpartition_extended_names::=、update_index_clauses::=、parallel_clause::=)
partition_extended_names::=
subpartition_extended_names::=
split_table_partition::=
(partition_extended_name::=、range_partition_desc::=、list_values::=、list_partition_desc::=、partition_spec::=、split_nested_table_part::=、filter_condition::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=、allow_disallow_clustering::=)
split_nested_table_part::=
nested_table_partition_spec::=
split_table_subpartition::=
(subpartition_extended_name::=、range_subpartition_desc::=、list_values::=、list_subpartition_desc::=、subpartition_spec::=、filter_condition::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=、allow_disallow_clustering::=)
subpartition_spec::=
merge_table_partitions::=
(partition_or_key_value::=、partition_spec::=、filter_condition::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=、allow_disallow_clustering::=)
partition_or_key_value::=
merge_table_subpartitions::=
(subpartition_or_key_value::=、range_subpartition_desc::=、list_subpartition_desc::=、filter_condition::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=、allow_disallow_clustering::=)
subpartition_or_key_value::=
exchange_partition_subpart::=
(partition_extended_name::=、subpartition_extended_name::=、exceptions_clause::=、update_index_clauses::=、parallel_clause::=)
exceptions_clause::=
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::=、LOB_storage_clause::=、varray_col_properties::=)
range_partition_desc::=
(range_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=)
list_partition_desc::=
(list_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=)
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::=
partitioning_storage_clause::=
(TABLESPACE
SET
: ALTER
TABLE
ではサポートされていません、table_compression::=、index_compression::=、inmemory_clause::=、LOB_partitioning_storage::=)
partition_attributes::=
(physical_attributes_clause::=、logging_clause::=、allocate_extent_clause::=、deallocate_unused_clause::=、shrink_clause::=、table_compression::=、inmemory_clause::=、modify_LOB_parameters::=)
update_index_clauses::=
(update_global_index_clause::=、update_all_indexes_clause::=)
update_global_index_clause::=
update_all_indexes_clause::=
update_index_partition::=
(index_partition_description::=、index_subpartition_clause::=)
update_index_subpartition::=
index_partition_description::=
parallel_clause::=
move_table_clause::=
(filter_condition::=、segment_attributes_clause::=、table_compression::=、index_org_table_clause::=、LOB_storage_clause::=、varray_col_properties::=、parallel_clause::=、allow_disallow_clustering::=、update_index_partition::=)
modify_to_partitioned::=
modify_opaque_type::=
immutable_table_clauses::=
blockchain_table_clauses::=
index_properties::=
(global_partitioned_index::=、local_partitioned_index::= (CREATE
INDEX
の一部)、index_attributes::=、domain_index_clause
: using_index_clause
ではサポートされません)
index_attributes::=
(physical_attributes_clause::=、logging_clause::=、index_compression::=、partial_index_clause
およびparallel_clause
: (using_index_clause
ではサポートされません))
セマンティクス
ALTER
TABLE
文の多くの句の機能は、CREATE
TABLE
文での機能と同じです。これらの句の詳細は、「CREATE TABLE」を参照してください。
ノート:
ALTER
TABLE
文を実行すると、変更した表にアクセスするプロシージャおよびストアド・ファンクションが無効になる場合があります。無効になる条件および具体的な状況については、『Oracle Database開発ガイド』を参照してください。
schema
表が含まれているスキーマを指定します。schema
を指定しない場合、表は自分のスキーマ内にあるとみなされます。
table
変更する表の名前を指定します。
ノート:
変更対象の表が、1つ以上のマテリアライズド・ビューのマスター表である場合は、そのマテリアライズド・ビューの状態がINVALID
に設定されます。無効なマテリアライズド・ビューは、クエリー・リライトには使用できず、リフレッシュもできません。マテリアライズド・ビューを再び有効にする方法は、「ALTER MATERIALIZED VIEW」を参照してください。
関連項目:
マテリアライズド・ビューに関する一般的な情報については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
一時表の変更の制限事項
一時表の列を変更または削除したり、一時表の名前を変更できます。ただし、一時表に対して次のことはできません。
-
ネストした表型の列の追加(他の型の列は追加できます)。
-
追加または変更された列の参照整合性(外部キー)制約の指定。
-
追加または変更されたLOB列に対する次の
LOB_storage_clause
の句の指定:TABLESPACE
、storage_clause
、logging_clause
、allocate_extent_clause
またはdeallocate_unused_clause
。 -
physical_attributes_clause
、nested_table_col_properties
、parallel_clause
、allocate_extent_clause
、deallocate_unused_clause
または索引構成表(IOT)句の指定。 -
パーティション表と一時表の間でのパーティションの交換。
-
logging_clause
の指定。 -
MOVE
の指定。 -
INVISIBLE
の列の追加、または既存の列をINVISIBLE
にするための変更。
外部表の変更の制限事項
外部表の列を追加、削除または変更できます。ただし、外部表に対して次のことはできません。
-
LONG
、LOBまたはオブジェクト型の列の追加、または外部表の列のデータ型をこれらのデータ型のいずれかに変換 -
外部表の記憶域パラメータの変更。
-
logging_clause
の指定。 -
MOVE
の指定。 -
INVISIBLE
の列の追加、または既存の列をINVISIBLE
にするための変更。
memoptimize_read_clause
この句を使用して、頻度の高いデータ問合せ操作のパフォーマンスを向上させます。MEMOPTIMIZE_POOL_SIZE
初期化パラメータは、memoptimizeプールのサイズを制御します。この機能は、SGAから追加のメモリーを使用することに注意してください。
-
この句は、表の最上位の属性として指定する必要があり、パーティション・レベルまたはサブパーティション・レベルで指定することはできません。
-
表からデータを読み取る前に、
MEMOPTIMIZE FOR READ
に対して表を明示的に有効にする必要があります。 -
表が不要になった場合は、
NO MEMOPTIMIZE FOR READ
に対して表を明示的に無効にする必要があります。
memoptimize_write_clause
高速収集を有効にするには、この句を使用します。高速収集は、ディスクに書き込む前に挿入を格納するバッファ・プールを利用して、モノのインターネット(IoT)アプリケーションから1行データを挿入する頻繁な処理を最適化します。
alter_table_properties
alter_table_clauses
を使用すると、データベースの表を変更できます。
physical_attributes_clause
physical_attributes_clause
を使用すると、PCTFREE
、PCTUSED
およびINITRANS
パラメータの値と記憶特性を変更できます。これらのパラメータおよび特性の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。
表の物理属性の変更の制限事項
物理属性の変更には、次の制限事項があります。
-
PCTUSED
パラメータは、索引構成表の索引セグメントに対して指定できません。 -
ローカル管理表領域にある表の記憶域属性を変更しようとすると、Oracle Databaseエラーが発生します。ただし、パーティション表のセグメントのいくつかがローカル管理表領域にあり、それ以外のセグメントがディクショナリ管理表領域にある場合は、ディクショナリ管理表領域のセグメントの記憶域属性は変更されますが、ローカル管理表領域のセグメントの記憶域属性は変更されず、エラーも発生しません。
-
自動セグメント領域管理のセグメントの場合は、
PCTUSED
設定の変更は無視されます。PCTFREE
設定を変更した場合、その変更をセグメントに割当て済のブロックに実装するには、DBMS_REPAIR.SEGMENT_FIX_STATUS
プロシージャを実行する必要があります。
表の物理属性の変更の注意事項
この句で指定する値は、次のように表に影響します。
-
非パーティション表の場合、作成時に表に指定した値は新しく指定した値によって上書きされます。
-
レンジ・パーティション表、リスト・パーティション表またはハッシュ・パーティション表の場合、新しく指定した値がその表のデフォルト値およびすべての既存パーティションに対する実際の値となり、そのパーティションにすでに設定されていた値は上書きされます。既存のパーティション値を上書きせずにデフォルトの表属性を変更する場合は、
modify_table_default_attrs
句を使用してください。 -
コンポジット・パーティション表の場合、新しく指定した値がその表とその表のすべてのパーティションのデフォルト値、およびその表のすべてのサブパーティションに対する実際の値となり、そのサブパーティションにすでに設定されていた値は上書きされます。既存のサブパーティションの値を上書きせずにデフォルトのパーティション属性を変更する場合は、
FOR
PARTITION
句とともにmodify_table_default_attrs
句を使用してください。
logging_clause
logging_clause
を使用すると、表のロギング属性を変更できます。また、logging_clause
では、後続のALTER
TABLE
... MOVE
およびALTER
TABLE
... SPLIT
操作のログを記録するかどうかを指定します。
modify_table_default_attrs
句とともにこの句を使用した場合、パーティション表のロギング属性が影響を受けます。
関連項目:
-
この句の詳細は、「logging_clause」を参照してください。
-
logging_clause
およびパラレルDMLの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
table_compression
table_compression
句は、ヒープ構成表に対してのみ有効です。この句を使用すると、ディスクおよびメモリーの使用量を削減するために、データ・セグメントを圧縮するかどうかを指定できます。この句のセマンティクスの詳細および表の圧縮を使用したオブジェクトの作成方法の詳細は、「CREATE
TABLE
」の「table_compression」を参照してください。
ノート:
初めて、圧縮データが追加されるように表を変更する場合は、表のすべてのビットマップ索引およびビットマップ索引パーティションにUNUSABLE
のマークを付ける必要があります。
inmemory_table_clause
この句を使用して、インメモリー列ストア(IM列ストア)の表または表の列を有効化または無効化するか、表または表の列のインメモリーの属性を変更します。
-
INMEMORY
を指定して、IM列ストアの表を有効化するか、IM列ストアにすでに有効化されている表のinmemory_attributes
を変更します。 -
NO
INMEMORY
を指定して、IM列ストアの表を無効化します。 -
inmemory_column_clause
を指定して、IM列ストアの表の列を有効化または無効化するか、表の列のinmemory_memcompress
設定を変更します。IM列ストアに対して表またはパーティションが無効になっているときにこの句を指定した場合、列の設定は、その後IM列ストアに対して表またはパーティションが有効化されたときに有効になります。IM列ストアに対して表またはパーティションが有効になっているか無効になっているかにかかわらず、列に対してNO
INMEMORY
を指定した場合は、列に対して以前に指定されたinmemory_memcompress
設定が失われます。この句のセマンティクスの詳細は、「CREATE
TABLE
」の「inmemory_column_clause」を参照してください。
このinmemory_table_clause
のセマンティクスはCREATE
TABLE
のinmemory_table_clauseと同じですが、次の追加点があります。
-
inmemory_memcompress
句を指定して、IM列ストアにすでに有効化されている表のデータ圧縮方法を変更する場合、以前に特定のデータ圧縮方法を割り当てた列にデータ圧縮方法が保持されます。この句の詳細は、CREATE
TABLE
のinmemory_memcompress句を参照してください。 -
inmemory_distribute
句を指定する際に1つの副句を省略した場合、設定は変更されないままです。つまり、AUTO
またはBY
句のみを指定した場合、表のFOR
SERVICE
設定は変更されないままで、FOR
SERVICE
句のみを指定した場合、表のAUTO
またはBY
設定は変更されないままです。両方の副句を省略してDISTRIBUTE
キーワードのみを指定した場合、表にはDISTRIBUTE
AUTO
設定が割り当てられ、FOR
SERVICE
設定は変更されないままです。この句の詳細は、CREATE
TABLE
のinmemory_distribute句を参照してください。 -
NO
INMEMORY
を指定してIM列ストアのパーティション表または非パーティション表を無効化すると、列レベルのインメモリー設定が失われます。その後、IM列ストアの表を有効化すると、表を有効化するときに特に指定しないかぎり、すべての列で表のインメモリー設定が使用されます。 -
NO
INMEMORY
を指定してIM列ストアのパーティションを無効化した場合は、表のすべてのパーティションが無効化されていても、列レベルのインメモリー設定が保持されます。その後、IM列ストアの表またはパーティションを有効化すると、表またはパーティションを有効化するときに特に指定しないかぎり、列レベルのインメモリー設定が有効になります。 -
表が現在IM列ストアに移入されており、
PRIORITY
以外の表のinmemory_attribute
を変更した場合、データベースではIM列ストアからその表を削除します。再移入動作はPRIORITY
設定によって異なります。
inmemory_clause
この句を使用して、IM列ストアの表のパーティションを有効化または無効化するか、表のパーティションのインメモリーのパラメータを変更します。この句のセマンティクスは、CREATE
TABLE
およびALTER
TABLE
で同じです。この句のセマンティクスの詳細は、CREATE
TABLE
のドキュメントのinmemory_clauseを参照してください。
ORACLE_HIVE
、ORACLE_HDFS
、およびORACLE_BIGDATA
のドライバを使用する非パーティション表にIMEMORY
を指定できます。
制限
ディスク上のセグメントが64KB以下の場合、IM列ストアに移入されません。したがって、IM列ストアに対して有効になっている小規模データベース・オブジェクトは、移入されないことがあります。
ilm_clause
この句を使用すると、表の自動データ最適化ポリシーの追加、削除、有効化または無効化を実行できます。
ADD POLICY
この句を指定すると、表にポリシーを追加できます。
ポリシーを指定するには、ilm_policy_clause
を使用します。この句のセマンティクスの詳細は、「ilm_policy_clause」を参照してください
ポリシーにはP
n
という形式の名前が割り当てられます。n
は整数値です。
{ DELETE | ENABLE | DISABLE } POLICY
これらの句を指定して、表のポリシーの削除、表のポリシーの有効化または表のポリシーの無効化をそれぞれ実行します。
ilm_policy_name
には、ポリシーの名前を指定します。ポリシー名は、DBA_ILMPOLICIES
ビューのPOLICY_NAME
列に問い合せて確認できます。
{ DELETE_ALL, ENABLE_ALL, DISABLE_ALL }
これらの句を指定して、表のすべてのポリシーの削除、表のすべてのポリシーの有効化または表のすべてのポリシーの無効化をそれぞれ実行します。
関連項目:
自動データ最適化ポリシーの管理の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
ilm_policy_clause
この句を使用すると、自動データ最適化ポリシーを指定できます。ilm_compression_policy
句を使用して圧縮ポリシーを指定し、ilm_tiering_policy
句を使用して記憶域階層化ポリシーを指定し、ilm_inmemory_policy
句を使用してインメモリー列ストア・ポリシーを指定できます。
ilm_compression_policy
この句を使用すると、圧縮ポリシーを指定できます。このタイプのポリシーは、指定された条件が満たされた場合、データを圧縮するようデータベースに指示します。SEGMENT
、GROUP
またはROW
句を使用して、セグメントレベル、グループレベルまたは行レベルの圧縮ポリシーを指定します。
table_compression
table_compression
句を使用して、圧縮タイプを指定します。この句は、セグメントレベルおよびグループレベルの圧縮ポリシーに適用されます。
現在の圧縮タイプより高い圧縮タイプを指定する必要があります。圧縮タイプを、最低のものから最高のものの順に示します。
NOCOMPRESS
ROW
STORE
COMPRESS
BASIC
ROW
STORE
COMPRESS
ADVANCED
COLUMN
STORE
COMPRESS
FOR
QUERY
LOW
COLUMN
STORE
COMPRESS
FOR
QUERY
HIGH
COLUMN
STORE
COMPRESS
FOR
ARCHIVE
LOW
COLUMN
STORE
COMPRESS
FOR
ARCHIVE
HIGH
この句のセマンティクスの詳細は、「table_compression」を参照してください。
SEGMENT
SEGMENT
を指定して、セグメントレベルの圧縮ポリシーを作成します。このタイプのポリシーは、AFTER
句で指定した条件が満たされた場合またはON
句で指定したPL/SQLファンクションがTRUE
を返す場合に表セグメントを圧縮するようデータベースに指示します。
ALTER TABLE
を使用してセグメントを変更できないことに注意してください。
GROUP
GROUP
を指定して、グループレベルの圧縮ポリシーを作成します。このタイプのポリシーは、AFTER
句で指定した条件が満たされた場合またはON
句で指定したPL/SQLファンクションがTRUE
を返す場合に、表とその従属オブジェクト(索引やセキュア・ファイルLOBなど)を圧縮するようデータベースに指示します。
ROW
ROW
を指定して、行レベルの圧縮ポリシーを作成します。このタイプのポリシーは、指定された期間にすべての行が変更されていないデータベース・ブロックを圧縮するようデータベースに指示します。行レベルのポリシーを作成する場合は、ROW
STORE
COMPRESS
ADVANCED
またはCOLUMN
STORE
COMPRESS
FOR
QUERY
圧縮を指定し、AFTER
ilm_time_period
OF
NO
MODIFICATION
を指定する必要があります。ROW
STORE
COMPRESS
ADVANCED
およびCOLUMN
STORE
COMPRESS
FOR
QUERY
句の完全なセマンティックスについては、「table_compression」を参照してください。
AFTER
この句を使用すると、ポリシーを有効にするために満たす必要のある条件を定義できます。条件は、ilm_time_period
句で指定する時間と、次のいずれかの条件タイプで構成されます。
-
OF
NO
ACCESS
: 指定した時間にわたってtableがアクセスされないと、ポリシーが有効になります。 -
OF
NO
MODIFICATION
: 指定した時間にわたってtableが変更されないと、ポリシーが有効になります。 -
OF
CREATION
: tableが作成されてから指定した時間が経過すると、ポリシーが有効になります。
ilm_time_period
その期間の経過後に条件が満たされている必要がある期間の長さを、日数、月数または年数で指定します。integer
に、正の整数を指定します。DAY
キーワードとDAYS
キーワードは、区別なしに使用できますが、意味を明確にするために用意されています。これはMONTH
キーワードとMONTHS
キーワード、およびYEAR
キーワードとYEARS
キーワードの場合も同様です。
ON
この句を使用すると、ブール値を戻すPL/SQLファンクションを指定できます。function_name
に、ファンクションの名前を指定します。このファンクションがTRUE
を返すと、ポリシーが有効になります。
ノート:
ON function_name
句は、表領域ではサポートされません。
ilm_tiering_policy
この句を使用すると、記憶域階層化ポリシーを指定できます。このタイプのポリシーは、特定の条件が満たされたか、またはデータ使用量が指定された制限に達したいずれかの場合に、データを指定された表領域に移行するようデータベースに指示します。SEGMENT
またはGROUP
句を使用して、セグメントレベルまたはグループレベルのポリシーを指定します。データは、読取り/書込み表領域または読取り専用表領域に移行できます。
TIER TO tablespace
この句を使用すると、データを読取り/書込みtablespace
に移行できます。
-
ON
function
句を指定した場合、functionがTRUE
を返すときにデータが移行されます。この句のセマンティックスの詳細は、ON句を参照してください。 -
ON
function
句を省略すると、表領域割当てのデータ使用量がTBS_PERCENT_USED
で定義された割合に達した場合、データが移行されます。表領域割当ての空き領域量がTBS_PERCENT_FREE
で定義されたパーセントに達するだけの十分な量のデータが可能なかぎり移行されます。DBMS_ILM_ADMIN
パッケージの定数であるTBS_PERCENT_USED
およびTBS_PERCENT_FREE
の詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください。
TIER TO tablespace READ ONLY
この句を使用すると、データを読取り専用表領域に移行できます。データを表領域に移行する際、データベースは一時的に表領域を読取り/書込みモードにしてデータを移行し、その後表領域を読取り専用モードに戻します。
-
AFTER
句を指定した場合、指定した条件が満たされたときにデータが移行されます。この句のセマンティックスの詳細は、AFTER句を参照してください -
ON
function
句を指定した場合、functionがTRUE
を返すときにデータが移行されます。この句のセマンティックスの詳細は、ON句を参照してください。
SEGMENT | GROUP
SEGMENT
を指定すると、セグメントレベルの記憶域階層化ポリシーを作成できます。このタイプのポリシーは、表セグメントをtablespace
に移行するようデータベースに指示します。GROUP
を指定して、グループレベルの記憶域階層化ポリシーを作成します。このタイプのポリシーは、表とその従属オブジェクト(索引やセキュア・ファイルLOBなど)をtablespace
に移行するようデータベースに指示します。デフォルトはSEGMENT
です。
ノート:
ON function_name
句は、表領域ではサポートされません。
ilm_inmemory_policy
この句を使用すると、インメモリー列ストア(IM列ストア)ポリシーを指定できます。このタイプのポリシーは、指定した条件が満たされた場合に、IM列ストアの表を有効化または無効化するか、IM列ストアの表の圧縮方法を変更するようにデータベースに指示します。
SET INMEMORY
この句を使用すると、指定された条件が満たされた場合に、IM列ストアの表を有効化できます。オプションでinmemory_attributes
句を使用して、表データをIM列ストアに格納する方法を指定できます。この句のセマンティクスの詳細は、「inmemory_attributes」を参照してください。
MODIFY INMEMORY
この句を使用すると、指定された条件が満たされた場合に、IM列ストアに格納されている表データの圧縮方法を変更できます。IM列ストアに対して表が有効化されている必要があります。
現在の圧縮方法より高い圧縮方法を指定する必要があります。圧縮方法を、最低のものから最高のものの順に示します。
NO
INMEMORY
MEMCOMPRESS
FOR
DML
MEMCOMPRESS
FOR
QUERY
LOW
MEMCOMPRESS
FOR
QUERY
HIGH
MEMCOMPRESS
FOR
CAPACITY
LOW
MEMCOMPRESS
FOR
CAPACITY
HIGH
この句のセマンティクスの詳細は、「inmemory_memcompress」を参照してください。
NO INMEMORY
この句を使用すると、指定された条件が満たされた場合に、IM列ストアの表を無効化できます。
SEGMENT
SEGMENT
キーワードはオプションで、セマンティクスを明確化するために使用されます。IM列ストア・ポリシーは、常にセグメントレベルのポリシーです。
AFTER | ON
AFTER
およびON
句を使用すると、IM列ストア・ポリシーが有効になるために満たされる必要がある条件を指定できます。
-
AFTER
句を指定すると、指定された条件が満たされたときにポリシーが有効になります。この句のセマンティックスの詳細は、AFTER句を参照してください -
ON
ファンクション句を指定した場合は、ファンクションからTRUE
が戻されたときにポリシーが有効になります。この句のセマンティックスの詳細は、ON句を参照してください。
ノート:
ON function_name
句は、表領域ではサポートされません。
関連項目:
IM列ストアでの自動データ最適化ポリシーの使用方法の詳細は、『Oracle Database In-Memoryガイド』を参照してください。
supplemental_table_logging
supplemental_table_logging
句を使用すると、REDOログ・グループ、またはサプリメンタル・ログが記録されるREDOログ・グループの1つ以上の列を追加または削除できます。
-
ADD
句でsupplemental_log_grp_clause
を使用すると、指定したサプリメンタル・ログ・グループを作成できます。supplemental_id_key_clause
を使用すると、システム生成のログ・グループを作成できます。 -
DROP
句でGROUP
log_group
構文を使用すると、指定したサプリメンタル・ログ・グループを削除できます。supplemental_id_key_clause
を使用すると、システム生成のログ・グループを削除できます。
supplemental_log_grp_clause
およびsupplemental_id_key_clause
は、CREATE
TABLE
文およびALTER
TABLE
文で同じセマンティクスを持ちます。これらの句の詳細は、「CREATE
TABLE
」の「supplemental_log_grp_clause」および「supplemental_id_key_clause」を参照してください。
関連項目:
サプリメンタルREDOログ・グループの詳細は、『Oracle Data Guard概要および管理』を参照してください。
allocate_extent_clause
allocate_extent_clause
を使用すると、表、パーティション、サブパーティション、オーバーフロー・データ・セグメント、LOBデータ・セグメントまたはLOB索引に新しいエクステントを明示的に割り当てることができます。
表エクステントの割当ての制限事項
一時表、レンジ・パーティション表またはコンポジット・パーティション表にエクステントを割り当てることはできません。
関連項目:
この句の詳細は、「allocate_extent_clause」および「エクステントの割当て: 例」を参照してください。
deallocate_unused_clause
deallocate_unused_clause deallocate_unused_clause
を使用すると、表、パーティション、サブパーティション、オーバーフロー・データ・セグメント、LOBデータ・セグメントまたはLOB索引の最後にある未使用領域の割当てを明示的に解除できます。解放された領域は、表領域の他のセグメントから利用できます。
関連項目:
この句の詳細は、「deallocate_unused_clause」および「未使用領域の割当て解除: 例」を参照してください。
CACHE | NOCACHE
CACHE
句およびNOCACHE
句のセマンティクスは、CREATE
TABLE
文およびALTER
TABLE
文で同じです。これらの句の詳細は、「CREATE
TABLE
」の「CACHE | NOCACHE | CACHE READS」を参照してください。ALTER
TABLE
文でこれらの句をいずれも省略した場合、既存の値は変更されません。
RESULT_CACHE
RESULT_CACHE
句は、CREATE
TABLE
文およびALTER
TABLE
文と同じセマンティクスを持ちます。この句の詳細は、「CREATE
TABLE
」の「RESULT_CACHE句」を参照してください。ALTER
TABLE
文でこの句を指定しない場合、既存の設定は変更されません。
upgrade_table_clause
upgrade_table_clause
が意味を持つのは、オブジェクト表や、オブジェクト列を持つリレーショナル表に対して使用する場合です。ターゲットとなる表のメタデータが、参照される型それぞれの最新バージョンに準拠するように変換されます。表がすでに有効なものである場合は、表のメタデータは変更されません。
オブジェクト表および列のアップグレードの制限事項
この句内で、column_properties
の句としてobject_type_col_properties
を指定することはできません。
INCLUDING DATA
INCLUDING
DATA
を指定すると、表のデータを型の最新バージョンの形式に変換できます。column_propertiesおよびLOB_partition_storageを使用して表をアップグレードする間に、新しいすべての列の記憶域を定義できます。これはデフォルトです。
ALTER
TYPE
文のdependent_handling_clause
にCASCADE
INCLUDING
TABLE
DATA
を指定すると、型の更新時に表のデータを変換できます。この句の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。表が古いバージョンの型に基づくデータを含むかどうかを確認するには、USER_TAB_COLUMNS
データ・ディクショナリ・ビューのDATA_UPGRADED
列を参照します。
NOT INCLUDING DATA
NOT
INCLUDING
DATA
を指定すると、列データは変更されません。
NOT INCLUDING DATAの制限事項
表にOracle8リリース8.0.xのイメージ・フォーマットの列が含まれる場合、NOT
INCLUDING
DATA
は指定できません。表がこのような列を含むかどうかを確認するには、USER_TAB_COLUMNS
データ・ディクショナリ・ビューのV80_FMT_IMAGE
列を参照します。
関連項目:
-
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
-
表が依存する型を変更する際に、依存表のデータを変換する場合の詳細は、「ALTER TYPE」を参照してください。
records_per_block_clause
records_per_block_clause
を使用すると、1ブロックに格納できるレコード数を制限するかどうかを指定できます。この句によって、この後、表に作成されるビットマップ索引はできるだけ縮小されます。
ブロックのレコードの制限事項
record_per_block_clause
には、次の制限事項があります。
-
表にすでにビットマップ索引が定義されている場合は、
MINIMIZE
またはNOMINIMIZE
のいずれも指定できません。まず、ビットマップ索引を削除する必要があります。 -
この句は、索引構成表またはネストした表に対して指定できません。
MINIMIZE
MINIMIZE
を指定すると、表の各ブロックの最大レコード数を計算し、ブロックに含まれるレコード数がその数を超えないように挿入操作を制限できます。
MINIMIZE
を指定する前に、表にデータのサンプル・セットを定義しておくことをお薦めします。表の圧縮を使用している場合(「table_compression」を参照)、圧縮データのサンプル・セットは、すでに表に存在している必要があります。
MINIMIZEの制限事項
空の表にMINIMIZE
を指定することはできません。
NOMINIMIZE
NOMINIMIZE
を指定すると、MINIMIZE
機能が無効になります。これはデフォルトです。
row_movement_clause
親表でも行の移動が無効化されている場合を除き、参照パーティション表で行の移動を無効にすることはできません。それ以外では、この句のセマンティクスは、CREATE
TABLE
文およびALTER
TABLE
文で同じです。これらの句の詳細は、「CREATE
TABLE
」の「row_movement_clause」を参照してください。
flashback_archive_clause
この句を指定するには、指定されたフラッシュバック・アーカイブに対するFLASHBACK
ARCHIVE
オブジェクト権限が必要です。この句を使用すると、表の履歴追跡を有効または無効にできます。
-
表の追跡を有効にするには、
FLASHBACK
ARCHIVE
を指定します。flashback_archive
は、この表に特定のフラッシュバック・アーカイブを指定する場合に指定できます。指定するフラッシュバック・アーカイブは、すでに存在している必要があります。アーカイブ名を指定しない場合、データベースは、システムに指定されたデフォルトのフラッシュバック・アーカイブを使用します。システムにデフォルトのフラッシュバック・アーカイブが指定されていない場合は、
flashback_archive
を指定する必要があります。FLASHBACK
ARCHIVE
を指定して、この表のフラッシュバック・アーカイブを変更することはできません。かわりに、まずALTER
TABLE
文にNO
FLASHBACK
ARCHIVE
句を付けて実行し、次に、ALTER
TABLE
文にFLASHBACK
ARCHIVE
句を付けて実行します。 -
表の追跡を無効にするには、
NO
FLASHBACK
ARCHIVE
を指定します。
関連項目:
追跡が有効な表の作成の詳細は、CREATE
TABLE
のflashback_archive_clauseを参照してください。デフォルトのフラッシュバック・アーカイブの作成の詳細は、CREATE FLASHBACK ARCHIVEを参照してください。
RENAME TO
RENAME
句を使用すると、table
の名前をnew_table_name
に変更できます。
この句を使用した場合、依存するすべてのマテリアライズド・ビューは無効になります。マテリアライズド・ビューの詳細は、「CREATE MATERIALIZED VIEW」および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
表にドメイン索引が定義されている場合、ODCIIndexAlter()メソッドがRENAME
オプション付きで起動されます。この操作によって、索引タイプ・メタデータと実表の間の対応が確立されます。
表名の変更の制限事項
シャード表または重複表の名前は変更できません。
shrink_clause
shrink_clauseを使用すると、表、索引構成表またはそのオーバーフロー・セグメント、索引、パーティション、サブパーティション、LOBセグメント、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログの領域を手動で縮小できます。この句は、自動セグメント管理を使用した表領域のセグメントに対してのみ有効です。デフォルトでは、セグメントが縮小されて最高水位標が調整され、再生領域がすぐに解放されます。
セグメントの縮小では、行移動が必要です。したがって、この句を指定する前に、縮小するオブジェクトの行移動を使用可能にする必要があります。また、アプリケーションでROWIDに基づいたトリガーを使用している場合、この句を発行する前にこのトリガーを使用禁止にする必要があります。
ノート:
shrink_clause
を指定する前に、索引構成表に対して行の移動を有効にしないでください。索引構成表のROWID
は、その主キーであり、変更できません。このため、そのような表に対して行の移動は関係なく、有効でもありません。
制限事項:
shrink_clause
は、IOTパーティション表でサポートされていません。
COMPACT
COMPACT
を指定すると、セグメント領域のデフラグのみが行われ、後で領域を解放できるように表の行が縮小されます。最高水位標の再調整および領域の解放は、すぐに行われません。操作を完了するには、後で別のALTER
TABLE
... SHRINK
SPACE
文を発行する必要があります。この句は、1回の長いステップのかわりに2回の短いステップで縮小操作を実行する場合に便利です。
索引や索引構成表の場合は、ALTER
[INDEX
| TABLE
] ... SHRINK
SPACE
COMPACT
を指定することはALTER
[INDEX
| TABLE
... COALESCE
を指定することと同じです。shrink_clause
はカスケード実行できます(次のCASCADE
句を参照)。また結合操作の場合よりもセグメントを高密度に圧縮できるため、パフォーマンスが向上します。ただし、未使用領域を解放しない場合は、適切なCOALESCE
句を使用します。
CASCADE
CASCADE
を指定すると、table
のすべての依存オブジェクト(索引構成表の2次索引を含む)に対して同じ操作を実行できます。
shrink_clauseの制限事項
shrink_clause
には、次の制限事項があります。
-
同じ
ALTER
TABLE
文で、この句と別の句を組み合せて使用することはできません。この句は、クラスタ、クラスタ化表または
LONG
列を含むすべてのオブジェクトには指定できません。 -
セグメントの縮小は、ファンクション索引、ドメイン索引またはビットマップ結合索引を含む表ではサポートされません。
-
CASCADE
を指定しても、この句では索引構成表のマッピング表を縮小できません。 -
この句は、高度な行圧縮が有効な(
ROW
STORE
COMPRESS
ADVANCED
)表に対して指定できます。その他の種類の表圧縮が有効な表に対しては、この句を指定できません。 -
ON
COMMIT
マテリアライズド・ビューのマスター表は縮小できません。ROWIDマテリアライズド・ビューは、縮小操作の実行後に再構築する必要があります。
READ ONLY | READ WRITE
READ
ONLY
を指定すると、表を読取り専用モードに設定できます。表がREAD
ONLY
モードの場合は、表に影響するDML文またはSELECT
... FOR
UPDATE
文は発行できません。表データを変更しないDDL文は発行できます。表がREAD
ONLY
モードの場合は、表に関連する索引の操作は可能です。読取り専用表で許可される操作および許可されない操作の完全なリストは、『Oracle Database管理者ガイド』を参照してください。
READ
WRITE
を指定すると、読取り専用表を読取り/書込みモードに戻すことができます。
REKEY encryption_spec
REKEY
句を使用すると、新しい暗号化キーの生成または異なるアルゴリズム間の切替えができます。この操作は、表内のLOB列を含むすべての暗号化された列が再度暗号化された後にのみ戻されます。
DEFAULT COLLATION
この句を使用すると、表のデフォルト照合を変更できます。collation_name
には、有効な名前付き照合または疑似照合を指定します。
表の新しいデフォルト照合は、ALTER
TABLE
ADD
文を使用して後から表に追加されたか、またはALTER
TABLE
MODIFY
文を使用して非文字データ型から変更された文字データ型の列に割り当てられます。表の既存列の照合は変更されません。この句のセマンティクスの詳細は、「CREATE
TABLE
」の「DEFAULT COLLATION」句を参照してください。
[NO] ROW ARCHIVAL
この句を指定すると、table
の行アーカイブを有効化または無効化できます。
-
table
の行アーカイブを有効にするには、ROW
ARCHIVAL
を指定します。非表示列ORA_ARCHIVE_STATE
が表に作成されます。テーブルにデータがすでに移入されている場合、表内の既存の各行でORA_ARCHIVE_STATE
の値が0
に設定されます。その後、UPDATE
文を使用して、アーカイブする行のORA_ARCHIVE_STATE
の値を1
に設定できます。 -
table
の行アーカイブを無効にするには、NO
ROW
ARCHIVAL
を指定します。非表示列ORA_ARCHIVE_STATE
が表から削除されます。
[NO] ROW ARCHIVALの制限事項
この句には、次の制限事項が適用されます。
-
ROW
ARCHIVAL
句は、ORA_ARCHIVE_STATE
という名前の列がすでに含まれている表に対しては指定できません。 -
NO
ROW
ARCHIVAL
句は、SYS
が所有する表に対しては指定できません。
関連項目:
-
この句のセマンティクスの詳細は、「
CREATE
TABLE
」の「ROW ARCHIVAL」句を参照してください。 -
インデータベース・アーカイブの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
attribute_clustering_clause
ADD
attribute_clustering_clause
を使用して、属性クラスタリングの表を有効化します。attribute_clustering_clause
は、ALTER
TABLE
およびCREATE
TABLE
と同じセマンティクスを持ちます。CREATE TABLEのドキュメントのattribute_clustering_clause
を参照してください。
MODIFY CLUSTERING
この句を使用して、ダイレクト・パス・インサート操作またはデータ移動操作中の表の属性クラスタリングを許可または禁止します。表の属性クラスタリングを有効化する必要があります。clustering_when
句およびzonemap_clause
は、ALTER
TABLE
およびCREATE
TABLE
と同じセマンティクスを持ちます。CREATE
TABLE
のドキュメントのclustering_when句およびzonemap_clauseを参照してください。
DROP CLUSTERING
この句を使用して、属性クラスタリングの表を無効化します。
CREATE
TABLE
またはALTER
TABLE
のWITH
MATERIALIZED
ZONEMAP
句を使用して表のゾーン・マップが作成された場合、ゾーン・マップが削除されます。CREATE
MATERIALIZED
ZONEMAP
文を使用して表のゾーン・マップが作成された場合、ゾーン・マップが削除されません。
alter_iot_clauses
index_org_table_clause
この句を使用すると、既存の索引構成表の特性の一部を変更できます。索引構成表は主キーでデータをソートするため、主キーベースのアクセスおよび操作に最適です。「CREATE
TABLE
」のコンテキストで、「index_org_table_clause」を参照してください。
関連項目:
prefix_compression
prefix_compression
句を使用して、表の接頭辞圧縮を有効化します。COMPRESS
を指定すると、ブロックを再利用するために、索引構成表の主キー索引ブロックを空きブロックに結合できます(可能な場合)。この句はparallel_clause
とあわせて指定できます。NOCOMPRESS
を指定して、表の接頭辞圧縮を無効化します。
PCTTHRESHOLD integer
「CREATE
TABLE
」の「PCTTHRESHOLD integer」を参照してください。
INCLUDING column_name
「CREATE
TABLE
」の「INCLUDING column_name」を参照してください。
overflow_attributes
overflow_attributes
を使用すると、索引構成表に対して、変更するオーバーフロー・データ・セグメントの物理記憶域属性およびロギング属性を指定できます。この句に指定するパラメータの値は、オーバーフロー・データ・セグメントにのみ適用されます。
関連項目:
add_overflow_clause
add_overflow_clause
を使用すると、指定した索引構成表にオーバーフロー・データ・セグメントを追加できます。また、この句を使用すると、エクステントを明示的に割り当てたり、既存のオーバーフロー・セグメントから未使用領域の割当てを解除することができます。
STORE
IN
tablespace
句を使用すると、オーバーフロー・セグメント全体に対する表領域の記憶域を指定できます。PARTITION
句を使用すると、パーティションによるセグメントに対する表領域の記憶域を指定できます。
パーティション化された索引構成表の場合、次の点に注意してください。
-
PARTITION
を指定しない場合、それぞれのパーティションに自動的にオーバーフロー・セグメントが割り当てられます。これらのセグメントの物理属性は表のレベルから継承されます。 -
1つ以上のパーティションに別々の物理属性を指定する場合は、その属性を表のすべてのパーティションに対して指定する必要があります。パーティションの名前を指定する必要はありませんが、パーティションが作成された順番で属性を指定する必要があります。
パーティションの順番を確認するには、USER_IND_PARTITIONS
ビューのPARTITION_NAME
およびPARTITION_POSITION
列を問い合せます。
TABLESPACE
を指定していないパーティションがある場合、表に対して指定された表領域が使用されます。表レベルでTABLESPACE
を指定していない場合は、そのパーティションの主キー索引セグメントの表領域が使用されます。
オーバーフロー属性の制限事項
segment_attributes_clause
内では、次の制限事項があります。
-
physical_attributes_clause
のOPTIMAL
パラメータを指定できません。 -
この句を使用して、オーバーフロー・セグメントの表領域の記憶域を指定できません。非パーティション表の場合、
ALTER
TABLE
...MOVE
...OVERFLOW
を使用して、セグメントを異なる表領域に移動します。パーティション表の場合、ALTER
TABLE
...MODIFY
DEFAULT
ATTRIBUTES
...OVERFLOW
を使用して、オーバーフロー・セグメントのデフォルト表領域を変更します。
table
がローカル管理表領域にある場合、表領域のセグメント属性の中にはデータベースによって自動的に管理されるものがあるため、制限事項が追加されます。
関連項目:
add_overflow_clause
句の詳細は、「allocate_extent_clause」および「deallocate_unused_clause」を参照してください。
alter_overflow_clause
alter_overflow_clause
を使用すると、既存の索引構成表のオーバーフロー・セグメントの定義を変更できます。
add_overflow_clause
の制限事項は、alter_overflow_clause
にも適用されます。
ノート:
索引構成表に列を追加した場合、各列の最大サイズが評価され、行の最大値が計算されます。オーバーフロー・セグメントが必要で、OVERFLOW
を指定していない場合は、エラーが発生しALTER
TABLE
文は実行されません。このチェック機能によって、索引構成表に対する後続のDML操作が、オーバーフロー・セグメントがないために失敗することを回避できます。
alter_mapping_table_clauses
alter_mapping_table_clauses
は、table
が索引構成されており、マッピング表を持つ場合にのみ有効です。
allocate_extent_clause
allocate_extent_clause
を使用すると、新しいエクステントを索引構成表のマッピング表の終わりに割り当てることができます。この句の詳細は、「allocate_extent_clause」を参照してください。
deallocate_unused_clause
deallocate_unused_clause
を指定すると、索引構成表のマッピング表の終わりにある未使用領域の割当てを解除できます。この句の詳細は、「deallocate_unused_clause」を参照してください。
マッピング表またはそのパーティションに関する他のすべての属性は、自動的に管理されます。
COALESCE句
COALESCE
を指定すると、ブロックを再利用するために、索引構成表の管理に使用される索引の索引ブロックの内容を空きブロックにマージできます(可能な場合)。この句とshrink_clauseの関係については、「shrink_clause」を参照してください。
alter_XMLSchema_clause
この句は、BINARY
XML
記憶域のXMLType
表を変更する場合にのみ、alter_table_properties
の一部として有効です。ALLOW
およびDISALLOW
句の詳細は、「CREATE
TABLE
」の「XMLSchema_spec」を参照してください。
column_clauses
これらの句を指定すると、列を追加、削除または変更できます。
add_column_clause
add_column_clause
を使用すると、表に列を追加できます。
関連項目:
この句のキーワードとパラメータの詳細は、「CREATE TABLE」および「表の列の追加: 例」を参照してください。
column_definition
既存の表に列を追加するときのcolumn_definition
の要素の動作は、この項で特に述べられていないかぎり、新しい表の作成時に列を追加するときの動作と同じです。詳細は、「CREATE
TABLE
」の「column_definition」句を参照してください。
column_definitionの制限事項
SORT
パラメータは、新しい表の作成時にのみ有効です。ALTER
TABLE
... ADD
文のcolumn_definitionでは、SORT
を指定できません。
列を追加するときに、DEFAULT
句を指定していないと、新しい列の各行の初期値はNULLになります。
パーティション化された索引構成表の各パーティションには、オーバーフロー・データ・セグメントを追加できます。
非パーティションおよびパーティション表にLOB列を追加できます。表、およびパーティションまたはサブパーティションのレベルでLOB記憶域を指定できます。
SELECT
*
構文を使用して、表からすべての列を選択するように指定した問合せを使用してビューを作成した場合、table
に列を追加しても、新しい列がビューに自動的に追加されることはありません。ビューに新しい列を追加する場合、CREATE
VIEW
文にOR
REPLACE
句を指定してビューを再作成してください。詳細は、「CREATE VIEW」を参照してください。
列の追加の制限事項
列の追加には、次の制限事項があります。
-
LOB列または
INVISIBLE
の列は、クラスタ表には追加できません。 -
LOB列をハッシュ・パーティション表に追加する場合、新しいパーティションに対して指定できる属性は、
TABLESPACE
のみです。 -
table
に行がある場合、DEFAULT
句を指定しないかぎり、NOT
NULL
制約のある列を追加できません。 -
索引構成表にこの句を指定した場合、同じ文では他の句を指定できません。
-
重複表には列を追加できません。
DEFAULT
DEFAULT
句を使用すると、新しい列にデフォルト値を指定したり、既存の列に新しいデフォルト値を指定することができます。後続のINSERT
文で列に値を指定しない場合、この値が自動的に割り当てられます。
この式のデータ型は、列に指定したデータ型と一致している必要があります。列には、この式を保持できる大きさが必要です。
DEFAULT
式には、リテラル引数、列の参照またはネストしたファンクションの起動を戻さない、任意のSQLファンクションを含めることができます。
このDEFAULT
式には、順序疑似列のCURRVAL
とNEXTVAL
を含めることができます。ただし、順序が存在していて、その順序にアクセスするために必要な権限を所持している必要があります。それ以降に、DEFAULT
式を使用して挿入を実行するユーザーには、表に対するINSERT
権限と、順序に対するSELECT
権限が必要になります。その後で順序が削除されると、それ以降のDEFAULT
式を使用する挿入文でエラーが発生します。新しい列を表に追加すると、既存の各行に割り当てられるNEXTVAL
の順序は、非決定的になります。順序の所有者を指定して完全修飾(たとえば、SCOTT
.SEQ1
)していない場合、Oracle Databaseは、ALTER
TABLE
文を発行したユーザーを順序のデフォルトの所有者にします。たとえば、ユーザーMARY
がSCOTT
.TABLE
に列を追加して、SEQ2
のように完全修飾していない順序を参照すると、その列は順序MARY
.SEQ2
を使用するようになります。順序に対するシノニムは完全に名前解決され、完全修飾された順序としてデータ・ディクショナリに格納されます。これは、パブリック・シノニムとプライベート・シノニムに当てはまります。たとえば、ユーザーBETH
が、パブリック・シノニムまたはプライベート・シノニムのSYN1
を参照する列を追加したときに、そのシノニムがPETER
.SEQ7
を参照していると、その列はデフォルトとしてPETER
.SEQ7
を格納するようになります。
列にDEFAULT
句を指定すると、デフォルト値はメタデータとして格納されますが、列自体にはデータは移入されません。ただし、デフォルト値が結果セットに戻されるように、新しい列を指定する後続の問合せは再書込みされます。この最適化された動作には、次の制限事項があります。
-
対象となる表は、索引構成化したり、一時表またはクラスタ化された表にすることはできません。また、キュー表、オブジェクト表またはマテリアライズド・ビューのコンテナ表にすることもできません。
-
表が仮想プライベート・データベース(VPD)ポリシーを持つ場合、
ALTER
TABLE
...ADD
文を発行するユーザーにEXEMPT
ACCESS
POLICY
システム権限がないかぎり、最適化された動作は有効ではありません。 -
追加する列は暗号化できず、オブジェクト列、ネストした表の列またはLOB列にすることはできません。
-
この
DEFAULT
式には、順序疑似列のCURRVAL
またはNEXTVAL
を含めることができません。
前述の制限事項のために最適な動作が実行できない場合、Oracle Databaseは、新しく作成した列の各行をデフォルト値で更新します。この場合、データベースは表に定義されたUPDATE
トリガーを起動しません。
デフォルト列値の制限事項
デフォルト列値には、次の制限事項があります。
-
DEFAULT
式に、PL/SQLファンクション、他の列、疑似列LEVEL
、PRIOR
およびROWNUM
への参照または完全に指定されていない日付定数は指定できません。 -
式には、スカラー副問合せ式を除くすべての書式を使用できます。
ON NULL
ON
NULL
句を指定すると、Oracle Databaseは、それ以降のINSERT
文でNULLに評価される値を割り当てようとするときに、DEFAULT
の列値を割り当てるようになります。
ON
NULL
を指定すると、NOT
NULL
制約と、NOT
DEFERRABLE
制約状態が暗黙的に指定されます。NOT
NULL
およびNOT
DEFERRABLE
と競合する表内制約を指定すると、エラーが発生します。
関連項目:
identity_clause
identity_clause
はID列を追加する場合、ID列を作成する場合と同じセマンティクスを持ちます。詳細は、CREATE
TABLE
の「identity_clause」を参照してください。
新しいID列を追加すると、既存のすべての行は順序ジェネレータを使用して更新されます。既存の各行に割り当てられる値の順序は、非決定的になります。
identity_options
identity_options
句を使用すると、順序ジェネレータを構成できます。identity_options
句のパラメータは、CREATE
SEQUENCE
文と同じです。これらのパラメータと特性の詳細は、「CREATE SEQUENCE」を参照してください。identity_options
に固有のSTART
WITH
LIMIT VALUE
は例外であり、ALTER
TABLE
MODIFY
でのみ使用できます。詳細は、「identity_options」を参照してください。
inline_constraint
inline_constraint
を使用すると、新しい列に制約を追加できます。
inline_ref_constraint
この句を使用すると、新しいREF
型の列を定義できます。制約の型の構文や制限などの詳細は、「constraint」を参照してください。
virtual_column_definition
virtual_column_definition
は列を追加する場合、列を作成する場合と同じセマンティクスを持ちます。
関連項目:
詳細は、「CREATE
TABLE
」の「virtual_column_definition」および「仮想表の列の追加: 例」を参照してください。
仮想列の追加の制限事項
仮想列のSQL式にOracle Data Redactionポリシーが定義されている列が関与するときには、仮想列は追加できません。
object_type_col_properties
この句は、新しいオブジェクト型の列または属性の追加時にのみ有効です。modify_column_clauses
を使用すると、既存のオブジェクト型列のプロパティを変更できます。この句のセマンティクスは、特に指定がないかぎり、CREATE
TABLE
と同じです。
object_type_col_properties
句を使用すると、新しいオブジェクト列、オブジェクト属性、コレクション列およびコレクション属性の要素に対する記憶特性を指定できます。
この句の詳細は、「CREATE
TABLE
」の「object_type_col_properties」を参照してください。
nested_table_col_properties
nested_table_col_properties
句を使用すると、ネストした表に対して別の記憶特性を指定し、そのネストした表を索引構成表として定義できます。ネストした表の型を持つ列または列属性付きで表を作成する場合は、この句を挿入する必要があります。(この句の中で、親オブジェクト表に対する場合と同じ働きをする句は、ここでは繰り返されません。これらの句の詳細は、「CREATE
TABLE
」の句「nested_table_col_properties」を参照してください。
-
nested_item
には、型がネストした表である列(または、ネストした表のオブジェクト型の最上位の属性)の名前を指定します。ネストした表がマルチレベル・コレクションで、内部のネストした表には名前が割り当てられていない場合、
nested_item
名のかわりにCOLUMN_VALUE
を指定します。 -
storage_table
には、nested_item
の行を含む表の名前を指定します。記憶表は、親表と同じスキーマ、および親表と同じ表領域内に作成されます。
ネストした表の列のプロパティの制限事項
ネストした表の列のプロパティには、次の制限事項があります。
-
parallel_clause
は指定できません。 -
physical_properties
句の一部としてCLUSTER
を指定できません。
関連項目:
varray_col_properties
varray_col_properties
句を使用すると、VARRAY型のデータが格納されているLOBに対して、別の記憶特性を指定できます。この句を指定する場合、表内に格納できるほど小さい値でも、VARRAYは必ずLOBに格納されます。varray_item
がマルチレベル・コレクションの場合、varray_item
内にネストされたすべてのコレクション項目は、常にvarray_item
と同じLOBに格納されます。
VARRAY列のプロパティの制限事項
VARRAY列のLOB_parameters
の一部としてTABLESPACE
を指定することはできません。VARRAYに対するLOB表領域のデフォルトは、表を含む表領域になります。
out_of_line_part_storage
この句を使用すると、新しく追加した列に対し、パーティション表内のパーティションまたはサブパーティションごとに記憶域属性を指定できます。この句で指定しないパーティションまたはサブパーティションについては、新しい列の記憶域属性は、表レベルのnested_table_col_properties
で指定したものと同じになります。
LOB_storage_clause
LOB_storage_clause
を使用すると、新しく追加したLOB列、LOBパーティション、LOBサブパーティションまたはLONG
列からLOB列への変換時のLOB記憶特性を指定できます。この句では、既存のLOBを変更できません。かわりに、modify_LOB_storage_clauseを使用する必要があります。
この項で特に指定がない場合は、LOB_storage_clause
およびmodify_LOB_storage_clause
内のすべてのLOBパラメータは、ALTER
TABLE
文で、CREATE
TABLE
文と同じセマンティクスを持ちます。この句の詳細は、「CREATE
TABLE
」の「LOB_storage_clause」を参照してください。
LOBパラメータの制限事項
ハッシュ・パーティションまたはハッシュ・サブパーティションに指定できるLOB_parameters
のパラメータは、TABLESPACE
のみです。
CACHE READS句
新しいLOB列の追加時には、作成時にLOB列を定義する場合と同様に、CACHE
READS
でロギング属性を指定できます。この句の詳細は、CREATE
TABLE
の句「CACHE READS」を参照してください。
ENABLE|DISABLE STORAGE IN ROW
STORAGE
IN
ROW
は、一度設定すると変更できません。したがって、この句はmodify_col_properties
句の一部には指定できません。ただし、新しい列を追加するとき(add_column_clause)、または表を移動するとき(move_table_clause)に、この設定を変更できます。この句の詳細は、「CREATE
TABLE
」の句「ENABLE STORAGE IN ROW」を参照してください。
CHUNK integer
modify_col_properties
句を使用して、CHUNK
の値を設定後に変更することはできません。作成後の列に異なるCHUNK
値が必要な場合は、ALTER
TABLE
… MOVE
を使用します。詳細は、「CREATE
TABLE
」の句「CHUNK integer」を参照してください。
RETENTION
データベースが自動UNDOモードで稼働している場合、BasicFiles LOBに対してPCTVERSION
ではなくRETENTION
を指定することで、このLOBの古いバージョンを保持できます。この句によって、PCTVERSION
のこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE
TABLE
」の句「LOB_retention_clause」を参照してください。
FREEPOOLS integer
データベースが自動UNDOモードで稼働している場合、BasicFiles LOBに対してこの句を使用するとLOBの空きリスト・グループ数を指定できます。この句によって、FREELIST
GROUPS
のこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE
TABLE
」の句「FREEPOOLS integer」を参照してください。SecureFiles LOBの場合は、データベースはこのパラメータを無視します。
LOB_partition_storage
1つのALTER
TABLE
文で指定できるLOB_partition_storage
句のリストは1つのみであり、すべてのLOB_storage_clauses
およびvarray_col_properties
句はLOB_partition_storage
句のリストの前に指定する必要があります。制限事項を含むこの句の詳細は、「CREATE
TABLE
」の句「LOB_partition_storage」を参照してください。
XMLType_column_properties
この句の詳細は、「CREATE
TABLE
」の句「XMLType_column_properties」を参照してください。
関連項目:
-
LOB_segname
およびLOB_parameters
句の詳細は、「LOB_storage_clause」を参照してください -
オブジェクト・リレーショナル表における
XMLType
列の例は、「XMLType列の例」を参照してください。XMLスキーマの作成例は、「SQL文でのXMLの使用方法」を参照してください。
modify_column_clauses
modify_column_clauses
を使用すると、既存の列のプロパティ、既存の列の可視性、または既存のオブジェクト型列の代替性を変更できます。
関連項目:
modify_col_properties
この句を使用すると、列のプロパティを変更できます。この句で省略した列定義のオプション部分(データ型、デフォルト値、制約)は、変更されません。
datatype
列のすべての行がNULLの場合、列のデータ型を変更できます。ただし、マテリアライズド・ビューのコンテナ表にある列のデータ型を変更した場合、それに対応するマテリアライズド・ビューが無効になります。
参照整合性制約の外部キーの一部として、文で列が指定されている場合のみ、データ型を省略できます。参照整合性制約の参照キーに対応する列のデータ型が、その列に自動的に割り当てられます。
すべての行にNULL値が存在するどうかにかかわらず、文字型またはRAW型の列のサイズ、または数値型の列の精度は、いつでも大きくすることができます。変更対象のデータに変更の必要がない場合は、列のデータ型のサイズを削減できます。データベースは、既存のデータをスキャンして、新しい長さ制限を超過するデータが存在する場合はエラーを返します。
VARCHAR2
、NVARCHAR2
、またはRAW
の列のサイズが4,000バイトを超えるように拡大すると、Oracle Databaseはインプレースで長さの拡張を実行し、表内記憶域を外部LOB記憶域に移行しなくなります。これにより、大きい表の連続移行が可能になり、特に移行後に拡張データ型を活用できます。ただし、列の表内記憶域は、CREATE
TABLE
... AS
SELECT
、エクスポート、インポート、オンライン再定義などの表の再編成操作時には保存されません。拡張データ型列の新しい表外記憶域に移行する場合は、前述の方法のいずれかを使用して表を再作成する必要があります。列の表内記憶域は、表またはパーティションの移動操作時(ALTER
TABLE
MOVE
[[SUB]PARTITION]
など)およびパーティションのメンテナンス操作時(ALTER
TABLE
SPLIT
[SUB]PARTITION
、ALTER
TABLE
MERGE
[SUB]PARTITIONS
、ALTER
TABLE
COALESCE
[SUB]PARTITIONS
など)に保存されます。
ノート:
VARCHAR2
、NVARCHAR2
、またはRAW
の列のサイズは、次の理由から、4,000バイトを超える過度の拡大は避けるようにしてください。
-
行の変更が発生する場合があります。
-
表内に格納されているデータは、列が選択されているかどうかにかかわらず、全体を読み込むことが必要になります。そのため、表内に格納される拡張データ型の列は、パフォーマンスに悪影響を与えることがあります。
変更対象のデータに変更の必要がない場合は、列のデータ型のサイズを削減できます。データベースは、既存のデータをスキャンして、新しい長さ制限を超過するデータが存在する場合はエラーを返します。
DATE
列をTIMESTAMP
またはTIMESTAMP
WITH
LOCAL
TIME
ZONE
列に、TIMESTAMP
またはTIMESTAMP
WITH
LOCAL
TIME
ZONE
列をDATE
列に変更できます。以下のルールが適用されます。
-
TIMESTAMP
またはTIMESTAMP
WITH
LOCAL
TIME
ZONE
列をDATE
列に変更する場合、秒に0以外の小数部が含まれる各列の値が最も近い秒に丸めて更新されます。そのような値の更新時に60以上の分フィールドがある場合(夏時間の規則が切り換えられた場合に境界で発生)、分フィールドから60を引いてフィールドが更新されます。 -
TIMESTAMP
WITH
LOCAL
TIME
ZONE
列をDATE
列に変更しても、列の値はデータベースのタイムゾーンで示したローカル時間を示します。ただし、データベースのタイムゾーンは値とは関連付けされなくなります。SQL*Plusで問い合せた場合、値がセッションのタイムゾーンに自動で調整されることはなくなります。列の値を処理するアプリケーションが特定のタイムゾーンで値を解析することになります。
表が空の場合、日時列または期間列の先行フィールドまたは秒の小数部を増やすことも減らすこともできます。表が空でない場合、日時列または期間列の先行フィールドまたは秒の小数部を増やすことのみできます。
TO_LOB
ファンクションを使用すると、LONG
列をCLOB
列またはNCLOB
列に、LONG
RAW
列をBLOB
列に変更できます。ただし、PL/SQLパッケージ内からはTO_LOB
ファンクションを使用できません。かわりに、TO_CLOB
(文字)ファンクションまたはTO_BLOB
(RAW)ファンクションを使用してください。
-
変更されたLOB列は、元の
LONG
列で定義されたすべての制約およびトリガーを継承します。いずれかの制約を変更する場合、後続のALTER
TABLE
文で変更する必要があります。 -
ドメイン索引が
LONG
列で定義されている場合、列をLOBに変更する前に削除する必要があります。 -
変更後、表のすべての列にある他のすべての索引を再構築する必要があります。
TO_CLOB
(文字)ファンクションを使用すると、NCLOB
列をCLOB
列に変換できます。
関連項目:
-
LONG
からLOBへの移行の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。 -
索引の削除および再構築の詳細は、「ALTER INDEX」を参照してください。
CHAR
およびVARCHAR2
列の場合、CHAR
(元々バイトで指定されていた列に対するキャラクタ・セマンティクス)またはBYTE
(元々文字で指定されていた列に対するバイト・セマンティクス)を指定すると、長さセマンティクスを変更できます。既存の列の長さセマンティクスを確認するには、ALL_TAB_COLUMNS
、USER_TAB_COLUMNS
またはDBA_TAB_COLUMNS
データ・ディクショナリ・ビューのCHAR_USED
列を問い合せます。
関連項目:
-
バイト・セマンティクスおよびキャラクタ・セマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
データ型の作成時または変更時に、ユーザー定義のデータ型を永続不可として指定できます。永続不可型のインスタンスは、ディスク上で保持することはできません。永続不可型として宣言されるユーザー定義のデータ型の詳細は、「CREATE TYPE」を参照してください。
COLLATE
この句を使用すると、列のデータ・バインドされた照合を設定または変更できます。column_collation_name
には、有効な名前付き照合または疑似照合を指定します。データ・バインドされた照合の詳細は、「CREATE
TABLE
」の「DEFAULT COLLATION」句を参照してください。
列照合の変更の制限事項
列照合の変更には、次の制限事項があります。
-
列が索引キーに属する場合、その照合は次の場合にのみ変更できます。
-
照合
BINARY
、USING_NLS_COMP
、USING_NLS_SORT
およびUSING_NLS_SORT_CS
の間 -
照合
BINARY_CI
およびUSING_NLS_SORT_CI
の間 -
照合
BINARY_AI
およびUSING_NLS_SORT_AI
の間
-
-
列が、レンジ・パーティション・キーまたはリスト・パーティション・キーに属しているか、ビットマップ結合索引により参照されているか、索引構成表の主キーに属しているか、Oracle Text索引を含むドメイン索引のキーに属している場合、その照合は
BINARY
、USING_NLS_COMP
、USING_NLS_SORT
およびUSING_NLS_SORT_CS
の各照合間でのみ変更できます。 -
列が属性クラスタリング・キーに属している場合、その照合は
BINARY
およびUSING_NLS_COMP
照合間でのみ変更できます。
identity_clause
identity_clause
を使用すると、ID列のプロパティを変更できます。この句は、ID列ではない列に対しては指定できません。ALWAYS
またはBY
DEFAULT
を省略すると、現在の生成タイプが保持されます。ALWAYS
およびBY
DEFAULT
の詳細は、CREATE
TABLE
の「identity_clause」を参照してください。
identity_options
identity_options
句を使用すると、順序ジェネレータを構成できます。identity_options
句のパラメータは、CREATE
SEQUENCE
文と同じです。これらのパラメータと特性の詳細は、「CREATE SEQUENCE」を参照してください。例外は次のとおりです。
-
identity_options
に固有のSTART
WITH
LIMIT VALUE
は、ALTER
TABLE
MODIFY
でのみ使用できます。START
WITH
LIMIT VALUE
を指定すると、Oracle Databaseは表をロックして、表内で最大のID列の値(増加する順序の場合)、または最小のID列の値(減少する順序の場合)を検出して、その値を順序ジェネレータの最高水位標として割り当てます。順序ジェネレータが返す次の値は、増加する順序の場合は最高水位標 +INCREMENT
BY
integer
になり、減少する順序の場合は最高水位標 -INCREMENT
BY
integer
になります。 -
START
WITH
の値を変更すると、この句内のその他すべてのパラメータにデフォルトの値が使用されるようになります。ただし、別の値が指定されている場合を除きます。
DROP IDENTITY
この句を使用すると、列からIDプロパティを削除できます。このプロパティには、シーケンス・ジェネレータや、NOT
NULL
制約、NOT
DEFERRABLE
制約などが含まれます。既存の行のID列の値には影響しません。
ENCRYPT encryption_spec | DECRYPT
この句は、暗号化された列の復号化や暗号化されていない列の暗号化を行うとき、および暗号化された列の整合性アルゴリズムやSALT
オプションを変更するときに使用します。
encryption_spec
を指定して既存の列を暗号化する場合は、同じ表内で暗号化されている他の列の暗号化仕様と一致させることが必要です。encryption_spec
の詳細や制限事項は、「CREATE
TABLE
」の句「encryption_spec」を参照してください。
マテリアライズド・ビュー・ログが表に対して定義されている場合は、この句内で暗号化または復号化される列が、マテリアライズド・ビュー・ログ内でも暗号化または復号化されます。
ENCRYPT encryption_spec | DECRYPTの制限事項
この句には、次の制限事項があります。
-
新規または既存の列がLOB列の場合は、列をSecureFiles LOBとして格納する必要があり、
SALT
オプションは指定できません。 -
暗号化または復号化する列に対して、
UPDATE
文のファイングレイン監査ポリシーが有効化されていてはなりません。ただし、ファイングレイン監査ポリシーをいったん無効にしてその列を暗号化または復号化し、その後でファイングレイン監査ポリシーを有効にすることは可能です。
関連項目:
inline_constraint
この句を使用すると、変更対象の列に制約を追加できます。既存の列に設定されている既存の制約の状態を変更する場合は、constraint_clauses
を使用します。
LOB_storage_clause
LOB_storage_clause
は、LONG
列をLOB列に変換する場合のみ、modify_col_properties
内で使用できます。この場合のみ、LOB_storage_clause
を使用して列に対するLOB記憶域を指定できます。ただし、指定できるのは、1つの列(LOB_item
)のみです。LOB_storage_clause
で省略したすべての属性には、デフォルトのLOB記憶域属性が適用されます。
alter_XMLSchema_clause
この句は、BINARY
XML
記憶域のXMLType
表のmodify_col_properties
内でのみ有効です。ALLOW
およびDISALLOW
句の詳細は、「CREATE
TABLE
」の「XMLSchema_spec」を参照してください。
列プロパティの変更の制限事項
列プロパティの変更には、次の制限事項があります。
-
LOB列のデータ型は変更できません。
-
列にドメイン索引が定義されている場合は、表の列を変更できません。最初にドメイン索引を削除してから列を変更する必要があります。
-
表または索引のパーティション化キーまたはサブパーティション化キーの一部である列の長さまたはデータ型は、変更できません。
-
CHAR
型の列をVARCHAR2
(またはVARCHAR
)型に変更またはVARCHAR2
(またはVARCHAR
)型の列をCHAR
型に変更できるのは、BLANK_TRIMMING
初期化パラメータがTRUE
に設定され、列のサイズが同じまたは増加する場合のみです。BLANK_TRIMMING
初期化パラメータがTRUE
に設定されている場合、列のサイズを切捨て後のデータの最大値以上の値まで減らすこともできます。 -
表がクラスタの一部である場合は、
LONG
またはLONG
RAW
列をLOBに変更できません。LONG
またはLONG
RAW
列をLOBに変更する場合は、同じALTER
TABLE
文では、DEFAULT
句およびLOB_storage_clause
以外は指定できません。 -
LONG
またはLONG
RAW
列をLOBに変更する場合のみ、LOB_storage_clause
をmodify_col_properties
の一部として指定できます。 -
索引構成表に対して
ROWID
データ型の列は指定できませんが、UROWID
型の列は指定できます。 -
列のデータ型を
REF
に変更できません。 -
重複表の列のプロパティは変更できません。
関連項目:
マテリアライズド・ビューの再検証の詳細は、「ALTER MATERIALIZED VIEW」を参照してください。
modify_virtcol_properties
この句を使用すると、仮想列を次の方法で変更できます。
-
COLLATE
句を指定すると、仮想列のデータ・バインドされた照合を設定または変更できます。column_collation_name
には、有効な名前付き照合または疑似照合を指定します。データ・バインドされた照合の詳細は、「CREATE
TABLE
」の「DEFAULT COLLATION」句を参照してください。 -
仮想列がエディショニングされたPL/SQLファンクションを参照している場合、その仮想列の評価エディションまたは使用禁止エディションを変更できます。仮想列を変更する場合の
evaluation_edition_clause
およびunusable_editions_clause
のセマンティクスは、仮想列を作成する場合と同じです。詳細は、「CREATE
TABLE
」の「evaluation_edition_clause」および「unusable_editions_clause」を参照してください。
仮想列の変更の制限事項
仮想列の変更には、次の制限事項が適用されます。
-
COLLATE
句の指定による仮想列のデータ・バインドされた照合の設定または変更には、「列照合の変更の制限事項」に示されている制限事項が適用されます。 -
索引が仮想列で定義されている場合に、その評価エディションまたは使用禁止エディションを変更すると、データベースによってその仮想列のすべての索引が無効化されます。仮想列の他のプロパティを変更しようとすると、エラーが発生します。
modify_col_visibility
この句を使用すると、column
の可視性を変更できます。詳細は、「CREATE
TABLE
」の「VISIBLE | INVISIBLE」を参照してください。
列の可視性の変更の制限事項
SYS
が所有している表で、VISIBLE
列をINVISIBLE
に変更することはできません。
modify_col_substitutable
この句を使用すると、既存のオブジェクト型列の代替性を設定または変更できます。
FORCE
キーワードを指定すると、型ID情報またはサブタイプ属性に関するデータが含まれる非表示列が削除されます。オブジェクト型の列または属性がFINAL
でない場合、FORCE
を指定する必要があります。
列の代替性の変更の制限事項
列の代替性の変更には、次の制限事項があります。
-
ALTER
TABLE
文には、この句を一度のみ指定できます。 -
オブジェクト表自体の代替性が設定されている場合、オブジェクト表の列の代替性は変更できません。
-
この句は、列が
IS
OF
TYPE
構文を使用して作成または追加されたものである場合は指定できません(この構文を使用すると、オブジェクト列や属性で使用できるサブタイプの範囲が、特定のサブタイプに限定されます)。IS
OF
TYPE
構文の詳細は、CREATE
TABLE
の「substitutable_column_clause」を参照してください。 -
列の属性にネストしたオブジェクト型(
FINAL
以外)が含まれる場合、FORCE
を指定しても、VARRAY列をNOT
SUBSTITUTABLE
に変更できません。
drop_column_clause
drop_column_clause
を使用すると、不要になった列を削除したり、将来、システム・リソースへの要求が少なくなったときに削除するように列にマークを付けることによって、データベースの領域を解放できます。
-
ネストした表の列を削除すると、その記憶表も削除されます。
-
LOB列を削除すると、LOBデータおよび対応するLOB索引セグメントも削除されます。
-
BFILE
列を削除すると、その列に格納されたロケータのみ削除され、ロケータによって参照されるファイルは削除されません。 -
INCLUDING
列として定義した列を削除(または未使用とマーク)すると、この列の直前に格納された列が新しいINCLUDING
列になります。
SET UNUSED句
SET
UNUSED
を使用すると、1つ以上の列が未使用としてマーク付けされます。内部ヒープ構成表の場合は、この句を指定しても、対象の列が表の各行から実際に削除されることはありません。その列に使用されているディスク領域がリストアされることはありません。したがって、応答時間はDROP
句を実行したときよりも短縮されます。
外部表内の列に対してこの句を指定すると、句は透過的にALTER
TABLE
... DROP
COLUMN
文に変換されます。その理由は、外部表に対する操作はメタデータのみの操作であるため、2つのコマンドのパフォーマンスに違いがないためです。
UNUSED
のマークが付いた列を持つすべての表は、データ・ディクショナリ・ビューUSER_UNUSED_COL_TABS
、DBA_UNUSED_COL_TABS
およびALL_UNUSED_COL_TABS
で参照できます。
関連項目:
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
未使用列のデータは表の行に残っていますが、この列は削除されたものとして扱われます。UNUSED
のマークが付けられた列にはアクセスできなくなります。SELECT
*
問合せでも、未使用列からデータを取り出すことはできません。また、UNUSED
のマークが付けられた列の名前および型は、DESCRIBE
コマンドでは表示されず、未使用列と同じ名前の新しい列を表に追加できます。
ノート:
これらの列を実際に削除するまでは、表当たり1000列の制限に対して、これらの列もカウント対象になります。ただし、すべてのDDL文と同様に、この句の結果をロールバックすることはできません。SET
UNUSED
列を取り出すために、対応するSET
USED
を発行することはできません。1000列の制限の詳細は、「CREATE TABLE」を参照してください。
また、LONG
列にUNUSED
のマークを付けた場合、この未使用のLONG
列を実際に削除しないかぎり、その表には別のLONG
列を追加できません。
ONLINE
ONLINE
を指定すると、表に対するDML操作を許可しながら、列にUNUSED
のマークを付けることを指定できます。
列へのUNUSEDのマーク付けの制限事項
SET
UNUSED
句には、次の制限事項が適用されます。
-
ONLINE
句は、DEFERRABLE
制約で列をUNUSED
としてマークする場合は指定できません。 -
SYS
が所有する表の列にUNUSED
のマークを付けることはできません。
DROP句
DROP
を指定すると、表のそれぞれの行から、対象となる列に関連付けられた列記述子およびデータを削除できます。特定の列を明示的に削除した場合、対象の表でUNUSED
のマークが付いている列もすべて同時に削除されます。
列データを削除した場合、次のものが削除されます。
-
対象の列に定義されているすべての索引。
-
対象の列を参照しているすべての制約。
-
対象の列に統計タイプが関連付けられている場合、
FORCE
オプションによって、関連付けは解除され、その統計タイプを使用して収集したすべての統計情報は削除されます。
ノート:
対象の列が対象でない列の親キーである場合またはCHECK制約が対象である列と対象でない列の両方を参照している場合は、Oracle Databaseはエラーを戻し、CASCADE
CONSTRAINTS
句を指定しないかぎり、列を削除しません。この句を指定した場合、対象である列を参照しているすべての制約が削除されます。
関連項目:
統計タイプの関連付けの解除方法の詳細は、「DISASSOCIATE STATISTICS」を参照してください。
DROP UNUSED COLUMNS句
DROP
UNUSED
COLUMNS
を指定すると、未使用とマークされているすべての列を表から削除できます。表の未使用の列からディスク領域を回収する場合に、この文を使用します。表に未使用の列がない場合でも、エラーは戻されません。
column
未使用として設定または削除する1つ以上の列を指定します。列を1つのみ指定する場合にかぎり、COLUMN
キーワードを使用します。列リストを指定する場合、リストには重複する列を指定できません。
CASCADE CONSTRAINTS
CASCADE
CONSTRAINTS
を指定すると、削除する列に定義されている主キーおよび一意キーを参照する外部キー制約をすべて削除したり、削除する列に定義されているすべての複数列制約を削除することができます。他の表の列、または対象である表の他の列が参照している制約がある場合は、CASCADE
CONSTRAINTS
を指定する必要があります。CASCADE CONSTRAINTSを指定しない場合、その文は異常終了し、エラーが戻されます。
INVALIDATE
INVALIDATE
キーワードはオプションです。ビュー、トリガー、ストアド・プログラム・ユニットなどのすべての依存オブジェクトが自動的に無効になります。オブジェクトの無効化は再帰的プロセスです。したがって、すべての直接的な依存オブジェクトおよび間接的な依存オブジェクトが無効になります。ただし、データベースでは、リモート依存性をローカル依存性と別に管理しているため、ローカル依存性のみが無効になります。
この文によって無効となったオブジェクトは、次に参照された際に自動的に再検証されます。オブジェクトを参照する前に、オブジェクトに存在するエラーは、すべて修正しておく必要があります。
関連項目:
依存性の詳細は、『Oracle Database概要』を参照してください。
CHECKPOINT
CHECKPOINT
を指定すると、DROP
COLUMN
操作でinteger
行が処理された後にチェックポイントが適用されます。integer
はオプションであり、1以上である必要があります。integer
が表の行数より大きい場合は、すべての行が処理された後にチェックポイントが適用されます。integer
を指定しない場合は、デフォルトの512に設定されます。チェックポイントを適用すると、DROP
COLUMN
操作中に蓄積されるUNDOログの量が削減されるため、UNDO領域の不足を回避できます。ただし、この文が中断されたときにすでにチェックポイントが適用されていた場合は、表は使用禁止の状態のままになります。使用禁止状態の表に対して実行可能な操作は、DROP
TABLE
、TRUNCATE
TABLE
およびALTER
TABLE
DROP
... COLUMNS
CONTINUE
(後述)のみです。
この句は列データを削除しないため、SET
UNUSED
と同時に使用できません。
DROP COLUMNS CONTINUE句
DROP
COLUMNS
CONTINUE
を指定すると、中断されたところから列削除操作を続行できます。表が無効な状態にあるときにこの文を発行すると、エラーになります。
列の削除の制限事項
列の削除には、次の制限事項があります。
-
この句の各部分は、文の中で1回のみ指定でき、他の
ALTER
TABLE
句と同時に使用することはできません。たとえば、次のような文は許可されません。ALTER TABLE t1 DROP COLUMN f1 DROP (f2); ALTER TABLE t1 DROP COLUMN f1 SET UNUSED (f2); ALTER TABLE t1 DROP (f1) ADD (f2 NUMBER); ALTER TABLE t1 SET UNUSED (f3) ADD (CONSTRAINT ck1 CHECK (f2 > 0));
-
オブジェクト型の列は、エンティティとしてのみ削除できます。オブジェクト型の列から属性を削除するには、
ALTER
TYPE
...DROP
ATTRIBUTE
文をCASCADE
INCLUDING
TABLE
DATA
句とともに使用します。属性の削除は、すべての依存オブジェクトに影響することに注意してください。詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 -
索引構成表からは、主キー列でない場合にかぎり、列を削除できます。索引構成表の主キー制約は削除できないため、
CASCADE
CONSTRAINTS
を指定しても主キー列は削除できません。 -
削除した列または未使用の列を含む表をエクスポートできます。ただし、エクスポート・ファイルに指定されたすべての列が表に存在する(これらの列のいずれも削除または未使用のマークを付けられていない)場合のみ、その表をインポートできます。そうでない場合は、エラーが戻ります。
-
COMPRESS
BASIC
を使用する表の列を未使用として設定できますが、その列を削除することはできません。ただし、drop_column_clause
のすべての句は、ROW
STORE
COMPRESS
ADVANCED
を使用する表に対して有効です。詳細は、「table_compression」のセマンティクスを参照してください。 -
ドメイン索引が構築されている列は削除できません。
-
REF
列からはSCOPE
表制約およびWITH
ROWID
制約を削除できません。 -
次のものは、この句を使用して削除できません。
-
疑似列、クラスタ列またはパーティション列。パーティションが作成されたすべての表領域がオンラインで読取り/書込みモードである場合、パーティション表から非パーティション列を削除できます。
-
ネストした表の列、オブジェクト表の列、重複表の列または
SYS
が所有する表の列。
-
関連項目:
add_period_clause
add_period_clause
を使用すると、有効な時間ディメンションをtable
に追加できます。
ALTER
TABLE
のperiod_definition
句は、CREATE
TABLE
と同じセマンティクスを持ちます。ただし、次の例外と追加事項があります。
-
valid_time_column
がtable
にすでに存在していてはいけません。 -
start_time_column
とend_time_column
を指定する場合、これらの列がtable
にすでに存在する必要があります。または、これらの各列に対してadd_column_clause
を指定する必要があります。 -
start_time_column
とend_time_column
を指定した場合で、これらの列がtable
にすでに存在し、データが移入されているときは、この両方の列の値がNULLでないすべての行で、start_time_column
の値がend_time_column
の値より前である必要があります。
関連項目:
この句のセマンティクスの詳細は、CREATE
TABLE
period_definitionを参照してください。
drop_period_clause
drop_period_clause
を使用すると、有効な時間ディメンションをtable
から削除できます。
valid_time_column
には、削除する有効な時間ディメンションの名前を指定します。
この句には次のような効果があります。
-
valid_time_column
がtable
から削除されます。 -
CREATE
TABLE
...period_definition
またはALTER
TABLE
...add_period_clause
を使用して有効な時間ディメンションを作成したときに開始時間列と終了時間列が自動的に作成された場合は、これらの列が削除されます。それ以外の場合、これらの列はtable
に残り、通常の表の列に戻ります。
関連項目:
valid_time_column
、開始時間列、終了時間列の詳細は、CREATE
TABLE
period_definitionを参照してください。
rename_column_clause
rename_column_clause
を使用すると、table
の列名を変更できます。新しい列には、table
内の他の列と同じ名前を指定しないでください。
列名を変更すると、依存オブジェクトは次のように処理されます。
-
名前が変更された列に依存するファンクション索引およびCHECK制約は、引き続き有効です。
-
依存するビュー、トリガー、ファンクション、プロシージャおよびパッケージは無効になります。これらのオブジェクトが次回アクセスされたときに、Oracle Databaseによって再有効化が試行されますが、再有効化に失敗した場合は、管理者がそのオブジェクトを変更して新しい列名を指定する必要があります。
-
名前を変更する列にドメイン索引を定義している場合、ODCIIndexAlterメソッドが
RENAME
オプション付きで起動されます。この操作によって、索引タイプ・メタデータと実表の間の対応が確立されます。
列名の変更の制限事項
列名の変更には、次の制限事項があります。
-
同じ文の中で、この句を他の
column_clauses
と同時に使用することはできません。 -
結合索引の定義に使用される列名は変更できません。列名を変更する場合、索引を削除し、列名を変更してから、索引を再作成する必要があります。
-
重複表の列の名前は変更できません。
関連項目:
modify_collection_retrieval
modify_collection_retrieval
句を使用すると、データベースからコレクション型の項目が取り出されたときの戻り値を変更できます。
collection_item
型がネストされた表またはVARRAYである、列修飾属性の名前を指定します。
RETURN AS
問合せの結果として何を戻り値とするかを指定します。
-
LOCATOR
は、ネストした表に対して一意のロケータを戻すことを指定します。 -
VALUE
は、ネストした表のコピーをそのまま戻すことを指定します。関連項目:
modify_LOB_storage_clause
modify_LOB_storage_clause
を使用すると、LOB_item
の物理属性を変更できます。各modify_LOB_storage_clause
に対して、LOB_item
を1つのみ指定できます。
以降の項では、modify_LOB_parametersに固有のパラメータのセマンティクスについて説明します。この項で特に指定がない場合は、残りのLOBパラメータのセマンティクスは、表の作成時と表の変更時で同じです。詳細は、この項の最後にある制限と、「CREATE
TABLE
」の句「LOB_storage_parameters」を参照してください。
ノート:
-
LOB記憶域に変更を加えるには、
ALTER
TABLE
文を使用する方法と、DBMS_REDEFINITION
パッケージを使用したオンライン再定義による方法があります。LOB暗号化、圧縮または重複除外を作成時に有効にしなかった場合は、作成後にオンライン再定義を使用してこれらを有効にすることをお薦めします(この3つのパラメータの変更に対しては、この方法の方がディスク領域の効率の点で優れているため)。DBMS_REDEFINITION
の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
LOBの記憶域の種類を変換することはできません。かわりに、オンライン再定義またはパーティション交換を使用して、SecureFileまたはBasicFileを移行する必要があります。
この句の詳細は、「CREATE
TABLE
」の句「PCTVERSION integer」を参照してください。
LOB_retention_clause
データベースが自動UNDOモードで稼働している場合、旧バージョンのLOBを保持するには、PCTVERSION
ではなくRETENTION
を指定します。この句によって、PCTVERSION
のこれまでの設定が上書きされます。
FREEPOOLS integer
データベースが自動UNDOモードで稼働している場合、BasicFiles LOBに対してこの句を使用するとLOBの空きリスト・グループ数を指定できます。この句によって、FREELIST
GROUPS
のこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE
TABLE
」の句「FREEPOOLS integer」を参照してください。SecureFiles LOBの場合は、データベースはこのパラメータを無視します。
REBUILD FREEPOOLS
この句はBasicFiles LOBにのみ適用され、SecureFiles LOBには適用されません。REBUILD
FREEPOOLS
句を指定すると、LOB列から古いバージョンのデータがすべて削除されます。この句が役に立つのは、1つのLOBセグメント内に保持されている古いバージョンの領域をすべて削除する場合です(その領域が解放されて、すぐに新しいLOBデータに使用できるようになります)。
LOB_deduplicate_clause
この句は、SecureFiles LOBに対してのみ有効です。KEEP_DUPLICATES
は、LOB重複除外を無効にします。DEDUPLICATE
は、LOB重複除外を有効にします。セグメント内のすべてのLOBが読み取られ、一致するLOBがある場合は重複が除外されてから戻されます。
LOB_compression_clause
この句は、SecureFiles LOBに対してのみ有効です。COMPRESS
は、セグメント内のすべてのLOBを圧縮して戻します。NOCOMPRESS
は、セグメント内のすべてのLOBを圧縮解除して戻します。
ENCRYPT | DECRYPT
LOB暗号化は、一般に列の暗号化と同じセマンティクスを持ちます。詳細は、「ENCRYPT encryption_spec | DECRYPT」を参照してください。
CACHE, NOCACHE, CACHE READS
CACHE
またはNOCACHE
からCACHE
READS
へ、またはCACHE
READS
からCACHE
またはNOCACHE
へLOB列を変更するときに、ロギング属性を変更できます。LOGGING
またはNOLOGGING
を指定しない場合、LOB列の現行ロギング属性がデフォルトになります。CACHE
、NOCACHE
またはCACHE
READS
を指定しない場合、Oracle Databaseは、LOB属性の既存の値を保持します。
LOB記憶域の変更の制限事項
LOB記憶域の変更には、次の制限事項があります。
-
LOB記憶域属性を変更する場合、
storage_clause
のINITIAL
パラメータの値は変更できません。 -
同じ文で
allocate_extent_clause
とdeallocate_unused_clause
の両方を指定することはできません。 -
PCTVERSION
パラメータとRETENTION
パラメータの両方を指定することはできません。 -
shrink_clause
は、SecureFiles LOBに対して指定できません。
関連項目:
LOBパラメータの設定の詳細は、「CREATE
TABLE
」の「LOB_storage_clause」および「LOB列: 例」を参照してください。
alter_varray_col_properties
alter_varray_col_properties
句を使用すると、VARRAYが格納されている既存のLOBの記憶特性を変更できます。
VARRAY列のプロパティの変更の制限事項
LOB_parameters
のTABLESPACE
句をこの句の一部として指定することはできません。VARRAYに対するLOB表領域のデフォルトは、表を含む表領域になります。
REKEY encryption_spec
REKEY
句を指定すると、データベースの新しい暗号化キーが生成されます。表内の暗号化されている列はすべて、新しいキーを使用して再度暗号化され、このときに、encryption_spec
のUSING
句が指定されている場合は新しい暗号化アルゴリズムが使用されます。この句は、このALTER
TABLE
文の中の他の句と組み合せることはできません。
関連項目:
列の透過的な暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。
constraint_clauses
constraint_clauses
を使用すると、表外宣言を使用して新しい制約を追加、既存の制約の状態を変更、および制約を削除できます。表外制約およびconstraint_state
のすべてのキーワードとパラメータの詳細は、「constraint」を参照してください。
ADD
句を使用すると、表外制約または表外REF
制約を表に追加できます。
制約の追加の制限事項
制約の追加には、次の制限事項があります。
-
重複表には制約を追加できません。
-
シャード表には外部キー制約を追加できません。
関連項目:
「CHECK制約の無効化: 例」、「オブジェクト識別子の指定: 例」および「REF列: 例」を参照してください。
制約の変更
MODIFY
CONSTRAINT
句を使用すると、既存の制約の状態を変更できます。
CASCADE
キーワードは、外部キー制約が定義されている一意制約または主キー制約を使用禁止にする場合にのみ有効です。この場合、CASCADE
を指定することによって、一意制約または主キー制約とその依存するすべての外部キー制約を使用禁止にする必要があります。
制約の変更には、次の制限事項があります。
-
NOT
DEFERRABLE
制約は、INITIALLY
DEFERRED
には変更できません。 -
索引構成表にこの句を指定した場合、同じ文では他の句を指定できません。
-
参照パーティション表の外部キー列の
NOT
NULL
制約は変更できません。また、参照パーティション表の参照制約のパーティション化状態は変更できません。 -
重複表の制約を変更することはできません。
関連項目:
RENAME
CONSTRAINT
句を使用すると、table
の既存の制約名を変更できます。新しい制約名は、同一スキーマ内にあるオブジェクトの既存の制約と同じ名前にはできません。制約に依存するすべてのオブジェクトは、引き続き有効です。
関連項目:
drop_constraint_clause
を使用すると、データベースの整合性制約を削除できます。制約の適用を中止し、データ・ディクショナリから制約が削除されます。各drop_constraint_clause
には、制約を1つのみ指定できますが、1つの文の中では、複数のdrop_constraint_clause
を指定できます。
PRIMARY KEY
PRIMARY
KEY
を指定すると、table
の主キー制約を削除できます。
UNIQUE
UNIQUE
を指定すると、指定した列の一意制約を削除できます。
ビットマップ結合索引が定義されている列から主キー制約または一意制約を削除すると、索引は無効になります。ビットマップ結合索引の詳細は、「CREATE INDEX」を参照してください。
CONSTRAINT
CONSTRAINT
constraint_name
を指定すると、主キー制約または一意制約以外の整合性制約を削除できます。
CASCADE
CASCADE
を指定すると、削除する整合性制約に依存するその他の整合性制約もすべて削除できます。
KEEP
INDEX
またはDROP
INDEX
を指定すると、PRIMARY
KEY
またはUNIQUE
制約の適用に使用する索引を残すか削除するかを指定できます。
ONLINE
ONLINE
を指定すると、制約を削除して表に対するDML操作が許可されるようになります。
制約の削除の制限事項
制約の削除には、次の制限事項があります。
-
参照整合性制約の一部の主キー制約または一意キー制約は、外部キーを削除しないと削除できません。参照されたキーと外部キーをともに削除する場合は、
CASCADE
句を使用してください。CASCADE
を省略すると、外部キーによって参照される主キー制約および一意制約は削除されません。 -
主キーをオブジェクト識別子(OID)として使用している表では、主キー制約は(
CASCADE
句を使用しても)削除できません。 -
REF
列の参照整合性制約を削除した場合、REF
列の有効範囲には参照先の表が含まれたままになります。 -
REF
列の有効範囲は削除できません。 -
参照パーティション表の外部キー列の
NOT
NULL
制約は削除できません。また、参照パーティション表のパーティション化参照制約は削除できません。 -
列に対する
NOT
NULL
制約は、その列のデフォルトの列値がON
NULL
句を使用して定義されていると削除できません。 -
ONLINE
句は、DEFERRABLE
制約を削除しているときには指定できません。
関連項目:
「制約の削除: 例」
alter_external_table
alter_external_table
句を使用すると、外部表の特性を変更できます。この句は、外部データには影響しません。parallel_clause
、enable_disable_clause
、external_table_data_props
およびREJECT
LIMIT
句の構文およびセマンティクスは、CREATE
TABLE
の場合と同じです。「CREATE TABLE」の「external_table_clause
」
を参照してください。
PROJECT COLUMN句
この句を使用すると、後続の問合せで、アクセス・ドライバが外部表に含まれる行を検証する方法を指定できます。デフォルトはPROJECT
COLUMN
ALL
で、この場合、アクセス・ドライバは、選択されている列にかかわらず、すべての列の値を処理し、列のエントリが有効な行のみを検証します。いずれかの列の値でデータ型変換エラーなどのエラーが発生すると、その列がSELECT構文のリスト内で参照されていない場合でも、行が拒否されます。PROJECT
COLUMN
REFERENCED
を指定すると、アクセス・ドライバはSELECT構文のリスト内の列のみを処理します。
ALL
設定の場合、一貫した結果セットが保証されます。REFERENCED
設定の場合、後続の問合せで参照される列の数に応じて、戻される行の数が異なる可能性がありますが、ALL
設定よりも高速です。後続の問合せで外部表のすべての列が選択されている場合、2つの設定の動作は同じになります。
外部表の変更の制限事項
外部表の変更には、次の制限事項があります。
-
この句以外の句を使用して外部表を変更できません。
-
LONG
、VARRAYまたはオブジェクト型の列は外部表に追加できません。また、外部表の列のデータ型を、これらの型に変更できません。 -
外部表の記憶域パラメータは変更できません。
alter_table_partitioning
ここで説明する句は、パーティション表にのみ適用されます。1つのALTER
TABLE
文の中では、パーティション操作を他のパーティション操作または実表での操作と組み合せて使用することはできません。
表のパーティション化の変更時には、次のノートが適用されます。
-
1つ以上のマテリアライズド・ビューのマスター表で、パーティションを削除、交換、切捨て、移動、変更または分割した場合、その表に関する大量の既存ロード情報が削除されます。したがって、前述の操作のいずれかを行う前に、必ず依存するマテリアライズド・ビューをすべてリフレッシュしてください。
-
table
にビットマップ結合索引が定義されている場合、table
のパーティションの変更操作を実行すると、索引にUNUSABLE
のマークが付けられます。 -
alter_table_partitioning
の句のうち、参照パーティション表に対して指定できるのはmodify_table_default_attrs
、move_table_[sub]partition
、truncate_partition_subpart
およびexchange_partition_subpart
のみです。これらの操作が参照パーティション表の子表に対してカスケードすることはありません。これ以外のパーティション・メンテナンス操作は、参照パーティション表に対しては有効ではありませんが、参照パーティション表の親表に対して指定することは可能であり、その操作は子である参照パーティション表にカスケードします。 -
パーティションまたはサブパーティションを追加する際、表ごとに指定できるパーティションとサブパーティションの合計は1024K-1です。
-
表のパーティションまたはサブパーティションを追加するときにパーティション名を省略すると、「一般的なパーティション化のノート」で説明されているルールに従い、データベースによって名前が生成されます。
-
表のパーティションまたはサブパーティションに対して、移動、追加(ハッシュのみ)、結合、削除、分割、マージ、名前の変更、または切捨てを行った場合、その表を参照するプロシージャ、ファンクション、パッケージ、パッケージ本体、ビュー、型本体およびトリガーは、引き続き有効です。他の依存オブジェクトはすべて無効になります。
-
LOB列を使用した表に新規セグメントを作成するパーティションのメンテナンス操作の遅延セグメント作成は、サポートされていません。セグメントは含まれる(サブ)パーティションに常に作成されます。
-
シャード表では、表のパーティションおよびサブパーティションの変更に指定できる句は、
UNUSABLE
LOCAL
INDEXES
およびREBUILD
UNUSABLE
LOCAL
INDEXES
のみです。システム・シャード表の個々のパーティションおよびサブパーティションに対して他の変更を実行することはできません。 -
ユーザー定義のシャード表では、パーティションおよびサブパーティションに対する次の操作がサポートされています。
-
パーティションの追加、サブパーティションの追加
-
パーティションの削除、サブパーティションの削除
-
パーティションの分割
-
リスト・パーティションで値を追加または削除するためのパーティションの変更
-
-
シャード表でサポートされるパーティション・メンテナンス操作は、パーティションおよびサブパーティションの切捨てのみです。シャード表でその他のパーティション・メンテナンス操作を実行することはできません。
関連するCONTEXT
ドメイン索引が含まれる表におけるパーティション操作の詳細は、『Oracle Textリファレンス』を参照してください。
ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
modify_table_default_attrs
modify_table_default_attrs
句を使用すると、table
の属性に対する新しいデフォルト値を指定できます。文に指定した属性のみが影響を受けます。その後に作成するパーティションおよびLOBパーティションは、パーティションまたはLOBパーティションの作成時に明示的に上書きしないかぎり、この値を継承します。既存のパーティションおよびLOBパーティションは、この句の影響を受けません。
文の中で指定した属性のみが影響を受けます。指定されたデフォルト値は、個々のパーティションまたはLOBパーティションのレベルで指定された属性で上書きされます。
-
FOR
partition_extended_name
は、コンポジット・パーティション表にのみ適用されます。この句は、partition_extended_name
で指定されたパーティションの属性に新しいデフォルト値を指定します。その後に作成するパーティションのサブパーティションおよびLOBパーティションは、サブパーティションまたはLOBパーティションの作成時に明示的に上書きしないかぎり、この値を継承します。既存のサブパーティションは、この句の影響を受けません。デフォルトのディレクトリを変更している場合は、
DEFAULT DIRECTORY
ディレクトリ
を使用してその場所を保存できます。 -
PCTTHRESHOLD
、prefix_compression
およびalter_overflow_clause
は、パーティション化された索引構成表にのみ有効です。 -
表レベルで接頭辞圧縮がすでに指定されている場合にかぎり、
prefix_compression
句を指定できます。また、COMPRESS
キーワードの後にint型を指定することはできません。接頭辞の長さは、表の作成時にのみ指定できます。 -
索引構成表の索引セグメントに対しては、
segment_attributes
句でPCTUSED
パラメータを指定できません。 -
read_only_clause
を使用すると、表のデフォルトの読取り専用または読取り/書込みモードを変更できます。新しいデフォルト・モードは、それ以降に表に追加されたパーティションまたはサブパーティションに割り当てられます。ただし、この動作は、新しいパーティションまたはサブパーティションにモードを指定することで上書きされます。表のデフォルトの読取り専用または読取り/書込みモードを変更するときには、表の既存のパーティションおよびサブパーティションのモードを変更しないでください。この句のセマンティクスの詳細は、「CREATE
TABLE
」の「read_only_clause」を参照してください。 -
indexing_clause
を使用すると、表に対するデフォルトの索引付けプロパティを変更できます。新しいデフォルトの索引付けプロパティは、それ以降に表に追加されたパーティションまたはサブパーティションに割り当てられます。ただし、この動作は、新しいパーティションまたはサブパーティションに索引付けプロパティを指定することで上書きされます。表のデフォルトの索引付けプロパティを変更しても、その表内に既存のパーティションまたはサブパーティションの索引付けプロパティが変更されることはありません。この句のセマンティクスの詳細は、CREATE
TABLE
の「indexing_clause」を参照してください。
alter_automatic_partitioning
この句を使用すると、自動リスト・パーティション表を次のように管理できます。
-
SET
PARTITIONING
AUTOMATIC
句を使用すると、通常のリスト・パーティション表を自動リスト・パーティション表に変換できます。 -
SET
PARTITIONING
MANUAL
句を使用すると、自動リスト・パーティション表を通常のリスト・パーティション表に変換できます。 -
SET
STORE
IN
句は、自動リスト・パーティション表に対してのみ指定できます。これを指定すると、それ以降に自動的に作成されたリスト・パーティションのデータをデータベースが格納する1つ以上の表領域を指定できます。この句は、以前にSET
STORE
IN
句を発行することで表に対して設定された表領域を上書きします。
既存の表が自動リスト・パーティション表かどうかを判別するには、USER_
、DBA_
、ALL_PART_TABLES
データ・ディクショナリ・ビューのAUTOLIST
列を問い合せます。
alter_automatic_partitioningの制限事項
DEFAULT
パーティションを含む通常のリスト・パーティション表を自動リスト・パーティション表に変換することはできません。
関連項目:
自動リスト・パーティション表の詳細は、「CREATE
TABLE
」の「AUTOMATIC」句を参照してください。
alter_interval_partitioning
-
既存のレンジ・パーティション表を時間隔パーティションに変換する場合。データベースにより、最後のレンジ・パーティションの最大値を超えるデータの必要に応じて、指定した数値範囲または日時間隔のパーティションが自動的に作成されます。その表に子の参照パーティション表が存在する場合、その子表は子の時間隔参照パーティション表に変換されます。
-
既存の時間隔パーティション表の時間隔を変更する場合。データベースは、先に既存の時間隔パーティションをレンジ・パーティションに変換し、定義されたレンジ・パーティションの上限の値を決定します。次に、データベースにより、上限を超えたデータの必要に応じて、指定した数値範囲または日時間隔のパーティションが自動的に作成されます。
-
既存の時間隔パーティション表の表領域の記憶域を変更する場合。その表に子の時間隔参照パーティション表が存在する場合、新しい表領域の記憶域は、専用の表レベルのデフォルト表領域を持たない子表に継承されます。
-
時間隔パーティション表をレンジ・パーティション表に戻す場合。
SET
INTERVAL
()
を使用して、時間隔パーティションを無効にします。データベースは、作成されるレンジ・パーティションの上限として、作成済の時間隔パーティションの上限を使用し、既存の時間隔パーティションをレンジ・パーティションに変換します。その表に子の時間隔参照パーティション表が存在する場合、その子表は通常の子の参照パーティション表に変換されます。
expr
には、有効な数値または期間式を指定します。
関連項目:
時間隔パーティションの詳細は、「CREATE
TABLE
」の「INTERVAL句」および『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
set_subpartition_template
set_subpartition_template
句は、個々の表パーティションのデフォルトのレンジ、リストまたはハッシュ・サブパーティション定義を作成するときや、既存の定義を置き換えるときに使用します。この句は、コンポジット・パーティション表に対してのみ有効です。既存のサブパーティション・テンプレートが置き換えられますが、テンプレートがまだ作成されていない場合は新規作成されます。既存のサブパーティションや、既存のローカルおよびグローバルの索引に影響が及ぶことはありません。ただし、以降のパーティション化操作(追加やマージなどの操作)には、新しいテンプレートが使用されます。
既存のサブパーティション・テンプレートを削除するには、ALTER
TABLE
table
SET
SUBPARTITION
TEMPLATE
()
を指定します。
set_subpartition_template
句は、CREATE
TABLE
のsubpartition_template
句と同じセマンティクスを持ちます。詳細は、CREATE
TABLE
のsubpartition_template句を参照してください。
modify_table_partition
modify_table_partition
句を使用すると、レンジ・パーティション、ハッシュ・パーティション、リスト・パーティションまたはシステム・パーティションの実際の物理属性を変更できます。そのパーティションの1つ以上のLOB項目の記憶域属性を任意に変更できます。物理属性(制限事項については後述)、ロギングおよび記憶域パラメータに対して、新しい値を指定できます。
すべてのタイプのパーティションについて、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。
パーティション化された索引構成表の場合、パーティションの変更時にマッピング表も同時に更新できます。「alter_mapping_table_clauses」を参照してください。
read_only_clause
read_only_clause
を使用して、表パーティションを読取り専用または読取り/書込みモードにすることができます。この句のセマンティクスの詳細は、「CREATE
TABLE
」の「read_only_clause」を参照してください。
indexing_clause
indexing_clause
を使用すると、表パーティションの索引付けプロパティを変更できます。この索引付けプロパティにより、パーティションが表の部分索引に含まれるかどうかが決まります。indexing_clause
は、modify_range_partition
句、modify_hash_partition
句、およびmodify_list_partition
句に指定できます。
INDEXING
ON
を指定すると、表パーティションの索引付けプロパティをON
に変更できます。この操作は、表の全索引には作用しません。表の部分索引に対して、次のように作用します。
-
ローカルの部分索引: 表パーティションが、索引に含まれます。それに対応する索引パーティションは、再構築されてから
USABLE
のマークが付けられます。 -
グローバルのパーティション索引: 表パーティションは、索引に含まれます。表パーティションの索引エントリは、定期の索引メンテナンスの一環として索引に追加されます。
INDEXING
OFF
を指定すると、表パーティションの索引付けプロパティをOFF
に変更できます。この操作は、表の全索引には作用しません。表の部分索引に対して、次のように作用します。
-
ローカルの部分索引: 表パーティションが、索引から除外されます。それに対応する索引パーティションは、再構築されてから
UNUSABLE
のマークが付けられます。 -
グローバルの部分索引: 表パーティションが、索引から除外されます。表パーティションの索引エントリは、索引から削除されます。これは、メタデータ専用の操作であるため、索引エントリは索引内に物理的に格納され続けます。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、
COALESCE
CLEANUP
を指定すると削除できます。
オブジェクト型の列の制限事項
オブジェクト型を持つ表はパーティション化できません。パーティション状態へのALTER TABLE変更は、オブジェクト型の列がない非パーティション・ヒープ表でのみサポートされます。
indexing_clauseの制限事項
この句は、単純なパーティション表のパーティションに対してのみ指定できます。コンポジット・パーティション表の場合は、表サブパーティション・レベルでindexing_clause
を指定できます。詳細は、「modify_table_subpartition」を参照してください。
表パーティションの変更のノート
レンジ、リストおよびハッシュ表パーティションの操作には、次のノートが適用されます。
-
すべてのタイプの表パーティションについて、
partition_attributes
句でshrink_clause
を使用すると、各パーティションのセグメントを縮小できます。この句の詳細は、「shrink_clause」を参照してください。 -
システム・パーティションを変更する構文およびセマンティクスは、ハッシュ・パーティションを変更する場合と同じです。「modify_hash_partition」を参照してください。
-
table
がコンポジット・パーティション化されている場合:-
allocate_extent_clause
を指定すると、partition
のそれぞれのサブパーティションにエクステントが割り当てられます。 -
deallocate_unused_clause
を指定すると、partition
のそれぞれのサブパーティションから未使用の記憶域の割当てが解除されます。 -
この句で変更された他の属性は、
partition
のサブパーティションでも変更され、既存の値は上書きされます。既存のサブパーティションの属性が変更されないようにするには、modify_table_default_attrs
のFOR
-
-
パーティション化されているネストした表を含む表パーティションの
partition_attributes
を変更した場合、その変更内容は、変更した表パーティションに対応するネストした表パーティションには適用されません。ただし、ALTER
TABLE
文を使用すると、ネストした表パーティションの記憶表を直接変更できます。 -
特に指定がないかぎり、
partition_attributes
の残りの句の動作は、パーティション表の作成時と同じです。詳細は、「CREATE
TABLE
」の「table_partitioning_clauses」を参照してください。
関連項目:
modify_range_partition
この句を使用すると、レンジ・パーティションの特性を変更できます。
add_range_subpartition
この句は、レンジ-レンジ・コンポジット・パーティションに対してのみ有効です。これにより、1つ以上のレンジ・サブパーティションをpartition
に追加できます。
Oracle Database 12cリリース2 (12.2)以降、この句を使用して、コンポジット・パーティション外部表にサブパーティションを追加できるようになりました。この場合、range_subpartition_desc
句のオプションのexternal_part_subpart_data_props
句を指定できます。この句のセマンティクスの詳細は、「external_part_subpart_data_props」を参照してください。
レンジ・サブパーティションの追加の制限事項
table
が索引構成表の場合は、一度に追加できるレンジ・サブパーティションは1つのみになります。
add_hash_subpartition
この句は、レンジ-ハッシュ・コンポジット・パーティションに対してのみ有効です。add_hash_subpartition
句を使用すると、ハッシュ・サブパーティションをpartition
に追加できます。Oracle Databaseは、ハッシュ・ファンクションによってpartition
の他のサブパーティションから再ハッシュされた行を、新しいサブパーティションに移入します。ロード・バランシングを最適化する場合、サブパーティションの合計数は2の累乗にする必要があります。
partitioning_storage_clause
でサブパーティションに対して指定できる句は、TABLESPACE
句のみです。TABLESPACE
を指定しなかった場合、新しいサブパーティションはpartition
のデフォルトの表領域に格納されます。
選択したパーティションに対応するローカル索引パーティションが追加されます。
追加したパーティションに対応するローカル索引パーティションにUNUSABLE
のマークが付けられます。ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。
add_list_subpartition
この句は、レンジ-リストおよびリスト-リスト・コンポジット・パーティションに対してのみ有効です。これにより、1つ以上のリスト・サブパーティションをpartition
に追加できます。ただし、DEFAULT
のサブパーティションが作成されていない場合に限られます。
-
この操作には
list_values_clause
が必要です。また、list_values_clause
には、partition
のその他のサブパーティションには存在していない値を指定する必要があります。ただし、他のパーティションのサブパーティションで使用されている値は指定できます。 -
partitioning_storage_clause
でサブパーティションに対して指定できる句は、TABLESPACE
句および表の圧縮のみです。 -
Oracle Database 12cリリース2 (12.2)以降、この句を使用して、コンポジット・パーティション外部表にサブパーティションを追加できるようになりました。この場合、
list_subpartition_desc
句のオプションのexternal_part_subpart_data_props
句を指定できます。この句のセマンティクスの詳細は、「external_part_subpart_data_props」を参照してください。
追加されたサブパーティションごとに、Oracle Databaseは、表のすべてのローカル索引パーティションに、同じ値リストを持つサブパーティションも追加します。表の既存のローカル索引パーティションおよびグローバル索引パーティションは影響を受けません。
リスト・サブパーティションの追加の制限事項
リスト・サブパーティションの追加には、次の制限事項が適用されます。
-
この句は、このパーティションに
DEFAULT
のサブパーティションが作成されている場合は指定できません。その場合、split_list_subpartition
句を使用して、DEFAULT
パーティションを分割する必要があります。 -
table
が索引構成表の場合は、一度に追加できるリスト・サブパーティションは1つのみになります。
coalesce_table_subpartition
COALESCE
SUBPARTITION
は、ハッシュ・サブパーティションにのみ適用されます。COALESCE
SUBPARTITION
を使用すると、最後のハッシュ・サブパーティションが選択され、その内容が1つ以上の残りのサブパーティション(ハッシュ・ファンクションが決定)に分散された後、選択されたサブパーティションが削除されます。
-
選択したパーティションに対応するローカル索引パーティションが削除されます。
-
1つ以上の吸収パーティションに対応するローカル索引パーティションに
UNUSABLE
のマークが付けられます。ヒープ構成表のすべてのグローバル索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。
modify_hash_partition
ハッシュ・パーティションに変更を加えるときは、partition_attributes
句の中で指定できるのはallocate_extent_clause
およびdeallocate_unused_clause
のみです。パーティションのそれ以外の属性はすべて、表レベルのデフォルトから継承されますが、TABLESPACE
は作成時のままとなります。
modify_list_partition
リスト・パーティションを変更するときに使用できる句のセマンティクスは、レンジ・パーティションを変更するときと同じです。リスト・パーティションを変更する場合、次の句も使用できます。
これらの句は、コンポジット・パーティションを変更する場合のみ有効です。これらの句によって、表のローカル索引とグローバル索引が影響を受けることはありません。
-
ADD
VALUES
句を使用すると、partition
のpartition_key_value
リストが拡張され、追加した値が含まれます。追加するパーティションの値は、「CREATE
TABLE
」の句「list_partitions」に示すすべてのルールおよび制限事項に準拠する必要があります。 -
DROP
VALUES
句を使用すると、1つ以上のpartition_key_value
が削除され、partition
のpartition_key_value
リストが縮小されます。この句を指定すると、Oracle Databaseはこの値の行が存在しないことを検証します。そのような行が存在する場合は、エラーが戻されます。
ノート:
表にローカル同一キー索引が定義されている場合、DEFAULT
リスト・パーティションのある表ではADD
VALUES
操作およびDROP
VALUES
操作が改善されます。
リスト値の追加および削除の制限事項
リスト値の追加および削除には、次の制限事項があります。
-
デフォルトのリスト・パーティションに対して値を追加または値を削除することはできません。
-
table
にDEFAULT
パーティションが定義されている場合、デフォルト・パーティション以外に値を追加しようとすると、その値がDEFAULT
パーティションに存在しているかどうかが確認されます。デフォルト・パーティションにその値が存在する場合、エラーが戻されます。
modify_table_subpartition
この句は、コンポジット・パーティション表にのみ適用されます。その副次句によって、個別のレンジ、リストまたはハッシュ・サブパーティションの特性を変更できます。
shrink_clause
を使用すると、サブパーティションの各セグメントを縮小できます。この句の詳細は、「shrink_clause」を参照してください。
また、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。
read_only_clause
を使用して、表サブパーティションを読取り専用または読取り/書込みモードにすることができます。この句のセマンティクスの詳細は、「CREATE
TABLE
」の「read_only_clause」を参照してください。
indexing_clause
を使用すると、表サブパーティションの索引付けプロパティを変更できます。索引付けプロパティにより、表の部分索引にサブパーティションを含めるかどうかが決まります。表サブパーティションの索引付けプロパティの変更による索引サブパーティションへの影響は、表パーティションの索引付けプロパティの変更による索引パーティションへの影響と同じです。詳細は、modify_table_partition
の「indexing_clause」を参照してください。
ハッシュ・サブパーティションの変更の制限事項
subpartition
に指定できるmodify_LOB_parameters
は、allocate_extent_clause
およびdeallocate_unused_clause
のみです。
これらの句は、リスト・サブパーティションを変更する場合のみ有効です。これらの句によって、表のローカル索引とグローバル索引が影響を受けることはありません。
-
ADD
VALUES
句を使用すると、subpartition
のsubpartition_key_value
リストが拡張され、追加した値が含まれます。追加するパーティションの値は、「CREATE
TABLE
」の句「list_partitions」に示すすべてのルールおよび制限事項に準拠する必要があります。 -
DROP
VALUES
句を使用すると、1つ以上のsubpartition_key_value
が削除され、subpartition
のsubpartition_key_value
リストが縮小されます。この句を指定すると、Oracle Databaseはこの値の行が存在しないことを検証します。そのような行が存在する場合は、エラーが戻されます。
また、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。
リスト・サブパーティションの変更の制限事項
subpartition
に指定できるmodify_LOB_parameters
は、allocate_extent_clause
およびdeallocate_unused_clause
のみです。
move_table_partition
move_table_partition
句を使用すると、partition
を別のセグメントへ移動できます。パーティション・データの別の表領域への移動、断片化を削減するためのデータの再クラスタ化、および作成時の物理属性の変更ができます。
表にLOB列が含まれている場合、LOB_storage_clause
を使用して、このパーティションに関連付けられたLOBデータおよびLOB索引セグメントを移動できます。この場合、指定したLOBのみが影響を受けます。特定のLOB列にLOB_storage_clause
を指定しなかった場合、その列のLOBデータおよびLOB索引セグメントは移動されません。
ネストした表の列が表に含まれる場合、table_partition_description
のnested_table_col_properties
句を使用すると、このパーティションに関連付けられているネストした表のセグメントを移動できます。この場合、指定しているネストした表のみが影響を受けます。特定のネストした表の列に対しtable_partition_description
のnested_table_col_properties
句を指定しなかった場合、そのセグメントは移動されません。
指定したパーティションに対応するローカル索引パーティションが、Oracle Databaseによって移動されます。移動したパーティションが空でない場合、UNUSABLE
のマークが付けられます。ヒープ構成表のグローバル索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。
LOBデータ・セグメントを移動する場合、古いデータ・セグメントおよび対応する索引セグメントが削除され、新しい表領域を指定しない場合でも、新しいセグメントが作成されます。
移動操作では、parallel_clause
(指定されている場合)からパラレル属性が取得されます。parallel_clauseが指定されていない場合は、表のデフォルトのパラレル属性があれば、これが使用されます。いずれも指定されていない場合は、シリアルに移動が行われます。
MOVE
PARTITION
でparallel_clause
を指定した場合、table
のデフォルトのパラレル属性は変更されません。
ノート:
索引構成表の場合、主キーのアドレスおよびその値を使用して、論理ROWIDが構成されます。論理ROWIDは、表の2次索引に格納されます。索引構成表のパーティションを移動した場合、ROWIDのアドレス部分が変更され、パフォーマンスの障害になる場合があります。最適なパフォーマンスを維持するには、移動したパーティションの2次索引を再構築し、ROWIDを更新してください。
関連項目:
MAPPING
TABLE
句は、マッピング表が定義されている索引構成表のみに有効です。マッピング表は、索引構成表のパーティションとともに移動されます。マッピング表のパーティションは、移動した索引構成表のパーティションの物理属性を継承します。これは、マッピング表のパーティションの属性を変更する唯一の方法です。この句を省略した場合、マッピング表のパーティションでは、元の属性が保持されます。
対応するすべてのビットマップ索引パーティションにはUNUSABLE
のマークが付けられます。
この句の詳細は、「CREATE
TABLE
」の「mapping_table_clauses」を参照してください。
ONLINE
ONLINE
を指定すると、表パーティションの移動中に、表パーティションに対するDML操作が許可されるようになります。
ONLINE句の制限事項
表パーティションの移動時には、ONLINE
句に次の制限事項が適用されます。
-
ONLINE
句は、SYS
が所有する表に対しては指定できません。 -
ONLINE
句は、索引構成表には指定できません。 -
ONLINE
句は、オブジェクト・タイプを格納するヒープ構成表や、ビットマップ結合索引またはドメイン索引が定義されているヒープ構成表には指定できません。 -
パラレルDMLおよびダイレクト・パス
INSERT
操作は、表に対する排他的ロックを必要とします。したがって、これらの操作は、競合するロックにより、実行中のオンライン・パーティションMOVE
と同時にはサポートされません。
表パーティションの移動の制限事項
表パーティションの移動には、次の制限事項があります。
-
partition
がハッシュ・パーティションである場合、この句にTABLESPACE
の属性以外は指定できません。 -
この句は、サブパーティションを含むパーティションに対して指定できません。ただし、
move_table_subpartition
句を使用してサブパーティションを移動できます。
move_table_subpartition
move_table_subpartition
句を使用して、subpartition_extended_name
で識別されるサブパーティションを別のセグメントに移動します。TABLESPACE
を指定しない場合、サブパーティションは同じ表領域に残ります。
サブパーティションが空でない場合、移動したサブパーティションに対応するすべてのローカル索引サブパーティションにUNUSABLE
のマークが付けられます。update_index_clausesを使用し、操作中にヒープ構成表のすべての索引を更新できます。
表にLOB列が含まれている場合、LOB_storage_clause
を使用して、このサブパーティションに関連付けられたLOBデータおよびLOB索引セグメントを移動できます。この場合、指定したLOBのみが影響を受けます。特定のLOB列にLOB_storage_clause
を指定しなかった場合、その列のLOBデータおよびLOB索引セグメントは移動されません。
LOBデータ・セグメントを移動する場合、古いデータ・セグメントおよび対応する索引セグメントが削除され、新しい表領域を指定しない場合でも、新しいセグメントが作成されます。
ONLINE
ONLINE
を指定すると、表サブパーティションの移動中に、表サブパーティションに対するDML操作が許可されるようになります。
ONLINE句の制限事項
表サブパーティションを移動するためのONLINE
句には、表パーティションを移動するためのONLINE
句と同じ制限事項があります。「ONLINE句の制限事項」を参照してください。
表サブパーティションの移動の制限事項
指定できるpartitioning_storage_clause
の句は、TABLESPACE
句およびtable_compression
のみです。
パーティション表に外部パラメータを追加するには、この句を使用します。
add_table_partition
add_table_partition
句を使用すると、1つ以上のレンジ・パーティション、リスト・パーティション、またはシステム・パーティションをtable
に追加できます。または、1つのハッシュ・パーティションをtable
に追加できます。
追加されたパーティションごとに、Oracle Databaseは、table
に定義されているローカル索引に、実表のパーティションと同じ名前で新しいパーティションを追加します。索引に同じ名前のパーティションがすでに存在する場合、SYS_P
n
という形式でパーティションの名前が生成されます。
table
が索引構成されている場合、追加されたパーティションごとに、Oracle Databaseは、表に定義されたすべてのマッピング表およびオーバーフロー領域にパーティションを追加します。
table
が参照パーティション表の親表の場合は、dependent_tables_clause
を使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。
table
のデフォルトの索引付けプロパティは、新しい表パーティションに継承されます。これは、table_partition_description
句にindexing_clause
を使用して、リスト・パーティション、レンジ・パーティション、またはシステム・パーティションの索引付けプロパティを設定するか、add_hash_partition_clause
にindexing_clause
を使用して、ハッシュ・パーティションの索引付けプロパティを設定することで上書きできます。
コンポジット・パーティション表に追加されたパーティションごとに、Oracle Databaseは、同じサブパーティション記述を持つ新しい索引パーティションを、table
に定義されたすべてのローカル索引に追加します。table
のグローバル索引が影響を受けることはありません。新しい表パーティションに索引付けプロパティを指定すると、新しいサブパーティションは、そのパーティションの索引付けプロパティを継承します。それ以外の場合、新しいサブパーティションは、表のデフォルトの索引付けプロパティを継承します。これは、range_subpartition_desc
句、individual_hash_subparts
句、およびlist_subpartition_desc
句でindexing_clause
を使用して、サブパーティションの索引付けプロパティを設定することで上書きできます。
BEFORE句
オプションのBEFORE
句は、システム・パーティションをtable
に追加するときにのみ指定できます。この句を使用すると、新しいパーティションを追加する場所を、既存のパーティションとの関係で指定できます。システム・パーティションは分割できません。そのため、この句は、既存の1つのパーティションの内容を複数の新しいパーティションに分割する場合に有効です。この句を省略した場合、新しいパーティションは既存のパーティションの後に追加されます。
表パーティションの追加の制限事項
table
が索引構成表の場合や、ローカル・ドメイン索引がtable
に定義されている場合は、一度に追加できるパーティションは1つのみになります。
関連項目:
「LOBおよびネストした表の記憶域を持つ表パーティションの追加: 例」および「表への複数のパーティションの追加: 例」を参照してください。
add_range_partition_clause
add_range_partition_clause
を使用すると、新しいレンジ・パーティションをレンジ・パーティション表またはコンポジット・レンジ・パーティション表の一番上(最後の既存のパーティションの後)に追加できます。
ドメイン索引がtable
で定義されている場合、IN_PROGRESS
またはFAILED
のマークが付いていると無効になります。
レンジ・パーティションの追加の制限事項
レンジ・パーティションの追加には、次の制限事項があります。
-
既存の上位パーティションにある各パーティション化キーのパーティションの上限が
MAXVALUE
の場合、表にパーティションを追加できません。そのかわり、split_table_partition
句を使用して、表の始めまたは中間にパーティションを追加します。 -
prefix_compression
およびOVERFLOW
句は、パーティション化された索引構成表に対してのみ有効です。表レベルで接頭辞圧縮が使用可能な場合にかぎり、prefix_compression
を指定できます。パーティション表にすでにオーバーフロー・セグメントが存在する場合にかぎり、OVERFLOW
を指定できます。 -
PCTUSED
パラメータは、索引構成表の索引セグメントに対して指定できません。
range_values_clause
新しいパーティションの上限を指定します。value_list
は、パーティション・キー列に対応するリテラル値を順序どおりにカンマで区切ったリストです。value_list
の値は、表内にある既存の最上位パーティションのパーティション境界より大きくする必要があります。
table_partition_description
この句を使用して、新しいパーティションに作成時の物理属性を指定できます。表にLOB列が含まれている場合、1つ以上のLOB項目にパーティション・レベルの属性を指定することもできます。
external_part_subpart_data_props
Oracle Database 12cリリース2 (12.2)以降、パーティション外部表およびコンポジット・パーティション外部表がサポートされるようになりました。これらの表にパーティションを追加する場合、オプションでこの句を使用して、パーティションにDEFAULT
DIRECTORY
およびLOCATION
を指定できます。これらの句のセマンティクスの詳細は、「CREATE
TABLE
」の「DEFAULT DIRECTORY」および「LOCATION」を参照してください。
サブパーティションの説明
これらの句は、コンポジット・パーティション表に対してのみ有効です。新しいパーティションのサブパーティションを指定する場合は、range_subpartition_desc
、list_subpartition_desc
、individual_hash_subparts
またはhash_subparts_by_quantity
句を適切に使用します。この句によって、表レベルでsubpartition_template
に定義された任意のサブパーティションの設定は上書きされます。
add_hash_partition_clause
add_hash_partition_clause
を使用すると、ハッシュ・パーティション表の一番上に新しいハッシュ・パーティションを追加できます。Oracle Databaseは、ハッシュ・ファンクションによってtable
の他のパーティションから再ハッシュされた行を、新しいパーティションに移入します。ロード・バランシングを最適化する場合、パーティションの合計数は2の累乗にする必要があります。
パーティションの名前を指定でき、パーティションが格納される表領域を指定することもできます。名前を指定しない場合は、SYS_P
n
という形式のパーティション名が割り当てられます。TABLESPACE
を指定しない場合は、新しいパーティションは表のデフォルトの表領域に格納されます。それ以外の属性は常に、表レベルのデフォルトから継承されます。
この操作によってパーティション間でデータが再ハッシュされると、対応するすべてのローカル索引パーティションにUNUSABLE
のマークが付けられます。update_index_clausesを使用し、操作中にヒープ構成表のすべての索引を更新できます。
parallel_clause
を使用すると、新しいパーティションの作成をパラレル化するかどうかを指定できます。
read_only_clause
を使用して、表パーティションを読取り専用または読取り/書込みモードにすることができます。この句のセマンティクスの詳細は、「CREATE
TABLE
」の「read_only_clause」を参照してください。
indexing_clause
を使用すると、パーティションに索引付けプロパティを指定できます。この句を省略すると、そのパーティションはtable
のデフォルトの索引付けプロパティを継承します。
関連項目:
ハッシュ・パーティション化の詳細は、「CREATE TABLE」および『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
add_list_partition_clause
add_list_partition_clause
を使用すると、パーティションの新しい一連の値を使用して、table
に新しいパーティションを追加できます。新しいパーティションに作成時の物理属性を指定できます。表にLOB列が含まれている場合、1つ以上のLOB項目にパーティション・レベルの属性を指定することもできます。
リスト・パーティションの追加の制限事項
表にDEFAULT
パーティションをすでに定義している場合は、リスト・パーティションを追加できません。その場合、split_table_partition
句を使用して、DEFAULT
パーティションを分割する必要があります。
関連項目:
-
リスト・パーティションの詳細および制限事項については、「
CREATE
TABLE
」の「list_partitions」を参照してください。
add_system_partition_clause
この句を使用すると、パーティションをシステム・パーティション表に追加できます。表に定義されているすべてのローカル索引に、対応する索引パーティションが追加されます。
table_partition_description
によって、新しいパーティションのパーティション・レベルの属性を指定できます。指定しない属性の値は、表レベルの値から継承されます。
システム・パーティションの追加の制限事項
システム・パーティションの追加時には、OVERFLOW
句を指定できません。
関連項目:
システム・パーティションの詳細は、「CREATE
TABLE
」の句「system_partitioning」を参照してください。
coalesce_table_partition
COALESCE
は、ハッシュ・パーティションにのみ適用されます。coalesce_table_partition
句を使用すると、最後のハッシュ・パーティションが選択され、その内容がハッシュ・ファンクションによって決定される1つ以上の残りのパーティションに分散された後、選択されたパーティションが削除されます。
選択したパーティションに対応するローカル索引パーティションが削除されます。1つ以上の吸収パーティションに対応するローカル索引パーティションにUNUSABLE
のマークが付けられます。ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用すると、操作中にすべての索引を更新できます。
表パーティションの結合の制限事項
update_all_indexes_clause
を使用してグローバル索引を更新する場合、副次句ではなくUPDATE
INDEXES
キーワードのみを指定できます。
パーティション表で外部パラメータを削除するには、この句を使用します。
drop_table_partition
drop_table_partition
句は、パーティション表から、パーティションと、そのパーティションに含まれるデータを削除します。データを表に残したままパーティションを削除する場合は、そのパーティションを隣接するパーティションにマージする必要があります。
Oracle Database 12cリリース2 (12.2)以降、この句を使用して、パーティション表またはコンポジット・パーティション外部表からパーティションを削除できるようになりました。
関連項目:
partition_extended_names
句を使用して、1つ以上のパーティションを削除するように指定します。複数のパーティションを指定する場合は、構文図の上位ブランチに示すようにすべてのパーティションを名前で指定するか、構文図の下位ブランチに示すようにFOR
句を使用してすべてのパーティションを指定する必要があります。両方のタイプの構文を1回の削除操作で使用することはできません。
-
table
にLOB列が存在する場合は、削除される表パーティションに対応するLOBデータ、LOB索引パーティション、およびサブパーティションも削除されます。 -
table
にパーティション化されているネストした表の列が含まれる場合は、削除される表パーティションに対応するネストした表パーティションも削除されます。 -
table
が索引構成されており、定義されたマッピング表を持つ場合、対応するマッピング表のパーティションも同様に削除されます。 -
ローカル索引パーティションおよび削除されるパーティションに対応するサブパーティションは、
UNUSABLE
のマークが付いている場合でも削除されます。
update_index_clausesを使用し、操作中にtable
の索引を更新できます。グローバル索引の更新は、メタデータ専用のため、削除操作で削除されるレコードの索引エントリは索引に物理的に格納されたままになります。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE
CLEANUP
を指定すると削除できます。
update_index_clauses
とともにparallel_clause
を指定すると、削除操作ではなく、索引の更新がパラレル化されます。
レンジ・パーティションを削除し、その後、削除したパーティションに属していた行を挿入した場合、1つ上位のパーティションに行が格納されます。ただし、そのパーティションが最上位のパーティションである場合、削除したパーティションが表していた値の範囲が表に対して無効になるため、挿入は失敗します。
表パーティションの削除の制限事項
表パーティションの削除には、次の制限事項があります。
-
ハッシュ・パーティション表のパーティションは削除できません。かわりに、
coalesce_table_partition
句を使用してください。 -
表のすべてのパーティションを削除できません。かわりに表を削除します。
-
update_all_indexes_clauseを使用してグローバル索引を更新する場合、副次句ではなく
UPDATE
INDEXES
キーワードのみを指定できます。 -
table
が索引構成表の場合や、ローカル・ドメイン索引がtable
に定義されている場合は、一度に削除できるパーティションは1つのみになります。 -
重複表のパーティションは削除できません。
パーティションを削除しても、ごみ箱の設定にかかわらずそのパーティションはOracle Databaseのごみ箱に置かれません。削除されたパーティションはただちにシステムから削除されます。
関連項目:
drop_table_subpartition
この句を使用すると、レンジ、リスト、またはハッシュ・コンポジット・パーティション表からレンジまたはリスト・サブパーティションを削除できます。削除対象のサブパーティション内の行はすべて削除されます。
Oracle Database 12cリリース2 (12.2)以降、この句を使用して、コンポジット・パーティション外部表からサブパーティションを削除できるようになりました。
subpartition_extended_names
句を使用して、1つ以上のサブパーティションを削除するように指定します。複数のサブパーティションを指定する場合は、構文図の上位ブランチに示すようにすべてのサブパーティションを名前で指定するか、構文図の下位ブランチに示すようにFOR
句を使用してすべてのサブパーティションを指定する必要があります。両方のタイプの構文を1回の削除操作で使用することはできません。
ローカル索引の対応するサブパーティションは、自動的に削除されます。その他の索引サブパーティションには影響がありません。update_global_index_clause
またはupdate_all_indexes_clause
を指定しないかぎり、グローバル索引にはUNUSABLE
のマークが付けられます。グローバル索引の更新は、メタデータ専用のため、削除操作で削除されるレコードの索引エントリは索引に物理的に格納されたままになります。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE
CLEANUP
を指定すると削除できます。
表サブパーティションの削除の制限事項
表サブパーティションの削除には、次の制限事項があります。
-
ハッシュ・サブパーティションは削除できません。かわりに、
MODIFY
PARTITION
...COALESCE
SUBPARTITION
構文を使用してください。 -
パーティションのすべてのサブパーティションを削除できません。かわりに、
drop_table_partition
句を使用してください。 -
グローバル索引を更新する場合、
update_all_indexes_clause
のオプションの副次句を指定することはできません。 -
table
が索引構成表の場合は、一度に削除できるサブパーティションは1つのみになります。 -
複数のサブパーティションを削除する場合、すべてのサブパーティションは同じパーティションにある必要があります。
-
重複表のサブパーティションは削除できません。
rename_partition_subpart
rename_partition_subpart
句を使用すると、表パーティションまたは表サブパーティションの名前をnew_name
に変更できます。パーティションおよびサブパーティションのどちらの場合も、new_name
は同じ表に存在するすべてのパーティションおよびサブパーティションと異なる値である必要があります。
table
が索引構成されている場合、対応する主キー索引パーティションに、既存のオーバーフロー・パーティションおよびマッピング表パーティションと同じ名前が割り当てられます。
Oracle Database 12cリリース2 (12.2)以降、この句を使用して、パーティションまたはコンポジット・パーティション外部表のパーティションまたはサブパーティションの名前を変更できるようになりました。
関連項目:
truncate_partition_subpart
TRUNCATE
partition_extended_names
を指定すると、partition_extended_names
で指定したパーティションからすべての行を削除することができ、表がコンポジット・パーティション化されている場合は、それらのパーティションのサブパーティションからすべての行が削除されます。個別のサブパーティションからすべての行を削除するには、TRUNCATE
subpartition_extended_names
を指定します。table
が索引構成されている場合、対応するすべてのマッピング表のパーティションおよびオーバーフロー領域のパーティションが切り捨てられます。
複数のパーティションを指定する場合は、partition_extended_names
構文図の上位ブランチに示すようにすべてのパーティションを名前で指定するか、構文図の下位ブランチに示すようにFOR
句を使用してすべてのパーティションを指定する必要があります。両方のタイプの構文を1回の切捨て操作で使用することはできません。subpartition_extended_names句で複数のサブパーティションを指定する場合も同じルールが適用されます。
指定された各パーティションまたはサブパーティションについて、次の事項が適用されます。
-
切り捨てるパーティションまたはサブパーティションにデータが含まれている場合は、まず、その表の参照整合性制約を使用禁止にする必要があります。また、別の方法として、行を削除してからパーティションを切り捨てる方法もあります。
-
table
にLOB列が存在する場合、このパーティションのLOBデータおよびLOB索引セグメントも切り捨てられます。table
がコンポジット・パーティション化されている場合、このパーティションのサブパーティションのLOBデータおよびLOB索引セグメントは切り捨てられます。 -
table
にパーティション化されているネストした表が含まれる場合、親パーティションに対応するネストした表パーティションが空でないかぎり、親パーティションを切り捨てることはできません。 -
table
でドメイン索引が定義されている場合、索引にIN_PROGRESS
またはFAILED
のマークが付いていると無効になります。また、切り捨てられる表パーティションに対応する索引パーティションにIN_PROGRESS
のマークが付いていると無効になります。
切り捨てられるそれぞれのパーティションまたはサブパーティションでは、対応するローカル索引パーティションおよびサブパーティションも切り捨てられます。これらの索引パーティションまたはサブパーティションにUNUSABLE
のマークが付いている場合、これらは切り捨てられ、UNUSABLE
のマークはVALID
にリセットされます。
update_index_clausesを使用し、操作中にtable
の索引を更新できます。グローバル索引の更新は、メタデータ専用のため、切捨て操作で削除されるレコードの索引エントリは索引に物理的に格納されたままになります。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE
CLEANUP
を指定すると削除できます。
update_index_clauses
とともにparallel_clause
を指定すると、切捨て操作ではなく、索引の更新がパラレル化されます。
DROP STORAGE
DROP
STORAGE
を指定すると、MINEXTENTS
パラメータで割り当てられた領域を除き、削除された行からすべての領域の割当てを解除できます。この領域は、後で表領域内の他のオブジェクトで使用できます。
DROP ALL STORAGE
DROP
ALL
STORAGE
を指定すると、MINEXTENTS
パラメータで割り当てられた領域も含め、削除された行からすべての領域の割当てを解除できます。パーティションまたはサブパーティションのすべてのセグメント、およびそれらの依存オブジェクトのすべてのセグメントも、割当てが解除されます。
DROP ALL STORAGEの制限事項
この句には、「遅延セグメント作成の制限事項」に示されているものと同じ制限事項があります。
REUSE STORAGE
REUSE
STORAGE
を指定すると、削除した行が占有していた領域をパーティションまたはサブパーティションに割り当てることができます。この領域は、そのパーティションまたはサブパーティションに対する、それ以降の挿入および更新のためにのみ使用できます。
CASCADE
CASCADE
を指定すると、table
に含まれるすべての子の参照パーティション表で、対応するパーティションまたはサブパーティションを切捨てできます。
表のパーティションおよびサブパーティションの切捨ての制限事項
表のパーティションおよびサブパーティションの切捨てには、次の制限事項があります。
-
update_all_indexes_clause
を使用してグローバル索引を更新する場合、副次句ではなくUPDATE
INDEXES
キーワードのみを指定できます。 -
table
が索引構成表の場合や、ローカル・ドメイン索引がtable
に定義されている場合は、一度に切捨てできる表パーティションまたは表サブパーティションは1つのみになります。 - 重複表のパーティションまたはサブパーティションを切り捨てることはできません。
関連項目:
split_table_partition
split_table_partition
句を使用すると、partition_extended_name
によって指定されるパーティションから新しいセグメント、物理属性および初期エクステントをそれぞれ含む、複数の新しいパーティションが作成されます。現行パーティションに対応付けられたセグメントは、廃棄されます。
新しいパーティションは、指定されていないすべての物理属性を現行パーティションから継承します。
ノート:
一定の条件が満たされると、SPLIT
PARTITION
およびSPLIT
SUBPARTITION
操作を最適化して処理速度を上げることができます。これらの操作の最適化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
-
DEFAULT
のリスト・パーティションを分割すると、最終的な結果のパーティションは、DEFAULT
の値を保持するようになります。それ以外の結果のパーティションは、指定した分割値を保持するようになります。 -
table
が索引構成表である場合は、対応するマッピング表のパーティションが分割されて、親の索引構成表のパーティションと同じ表領域に配置されます。対応するオーバーフロー領域も分割されるので、OVERFLOW
句を使用して新しいオーバーフロー領域のセグメント属性を指定できます。 -
table
にLOB列がある場合、LOB_storage_clause
を使用して、分割の結果生成されたLOBデータ・セグメントに対して個々のLOB記憶域属性を指定できます。現行パーティションのLOBデータおよびLOB索引セグメントが削除された後、新しい表領域を指定しなくても、各パーティションの各LOB列に新しいセグメントが作成されます。 -
table
にネストした表の列が含まれる場合、split_nested_table_part
句を使用して、分割の結果生成されたネストした表セグメントに対して、記憶表名およびセグメント属性を指定できます。現行パーティションのネストした表セグメントが削除された後、各パーティションのネストした表の列ごとに新しいセグメントが作成されます。この句により、親表には、複数レベルのネストした表の列のみでなく、複数のネストした表の列を含めることが可能になります。
対応するローカル索引パーティションにUNUSABLE
のマークが付いている場合でも、それらは分割されます。UNUSABLE
のマークが付けられ、ユーザーは、分割パーティションに対応するローカル索引パーティションを再構築する必要があります。新しい索引パーティションの属性は、分割されたパーティションから継承されます。新しい索引パーティションは、分割された索引パーティションのデフォルト表領域に格納されます。索引パーティションにデフォルト表領域が定義されていない場合、基礎となる新しい表のパーティションの表領域が使用されます。
AT句
AT
句は、レンジ・パーティションにのみ適用されます。この句を使用すると、1つのレンジ・パーティションを2つのレンジ・パーティションに分割できます。新しい2つのパーティションのうちの最初の方に、新しい上限(境界を含まない)を指定します。値リストは、現行パーティションの元のパーティション境界より小さく、その次に小さいパーティション(そのようなパーティションがある場合)のパーティション境界より大きい値にする必要があります。
VALUES句
VALUES
句は、リスト・パーティションにのみ適用されます。この句を使用すると、1つのリスト・パーティションを2つのリスト・パーティションに分割できます。1つのキー列で表がパーティション化されている場合は、list_values
構文の上位ブランチを使用して、その列の値リストを指定します。NULL
を指定できるのは、表内の別のパーティションに対してまだNULL
が指定されていない場合です。複数のキー列で表がパーティション化されている場合は、list_values
構文の下位ブランチを使用して、値リストを指定します。各値リストはカッコで囲まれ、キー列の値のリストを表します。新しいパーティションのうち、最初のものは指定のlist_values
を使用して作成され、2つ目のパーティションは現行パーティションの残りのパーティション値を使用して作成されます。このため、値リストには現行パーティションのすべてのパーティション値を含めることはできません。また、現行パーティションに存在しないパーティション値も含めることはできません。
INTO句
INTO
句を使用すると、分割の結果生成される新しいパーティションを記述できます。
-
AT
...INTO
句を使用すると、1つのレンジ・パーティションを2つのレンジ・パーティションに分割することによって生成されるパーティションについて記述できます。range_partition_desc
には、分割の結果としての2つのパーティションについて、オプションの名前と物理属性の指定を省略している場合でも、キーワードPARTITION
が必要になります。新しいパーティション名を指定しない場合、SYS_P
n
という形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。 -
VALUES
...INTO
句を使用すると、1つのリスト・パーティションを2つのリスト・パーティションに分割することによって生成されるパーティションについて記述できます。list_partition_desc
には、分割の結果としての2つのパーティションについて、オプションの名前と物理属性の指定を省略している場合でも、キーワードPARTITION
が必要になります。新しいパーティション名を指定しない場合、SYS_P
n
という形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。 -
INTO
句を使用すると、1つのレンジ・パーティションを2つ以上のレンジ・パーティションに分割できます。または、1つのリスト・パーティションを2つ以上のリスト・パーティションに分割できます。新しいパーティション名を指定しない場合、SYS_P
n
という形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。-
各レンジ・パーティションは、それらのパーティション境界を昇順で指定する必要があります。最初に指定するレンジ・パーティションのパーティション境界は、その次に低いパーティションが表内に存在する場合、そのパーティション境界よりも大きくする必要があります。最後のレンジ・パーティションのパーティション境界は指定できません。これは、現在のパーティションのパーティション境界を継承します。
-
リスト・パーティションの場合は、新しいパーティションに指定されたすべてのパーティション値が、現在のパーティション内に存在する必要があります。最後のパーティションには、パーティション値を指定できません。Oracle Databaseは、残りのパーティション値を使用して、現在のパーティションから最後のパーティションを作成します。
-
レンジ-ハッシュ・コンポジット・パーティション表の場合、新しいパーティションにサブパーティションを指定するとき、サブパーティションに対してTABLESPACE
および表の圧縮のみを指定できます。他のすべての属性は、現行パーティションから継承されます。新しいパーティションにサブパーティション化を指定しない場合は、表領域も現行パーティションから継承されます。
レンジ-リストおよびリスト-リスト・コンポジット・パーティション表の場合、新しいパーティションにサブパーティションを指定できません。分割パーティションのリスト・サブパーティションでは、サブパーティションの数および値リストは現行パーティションから継承されます。
新しく作成したサブパーティションに対して名前を指定しなかったすべてのコンポジット・パーティション表では、次のように名前が親パーティションから継承されます。
-
親パーティション内のサブパーティションが
partition_name
アンダースコア(_)subpartition_name
という形式の名前(たとえば、P1_SUBP1
)を持つ場合、新しいパーティション名に基づいて、サブパーティションの名前が生成されます(たとえば、P1A_SUB1
やP1B_SUB1
)。 -
親パーティション内のサブパーティションがその他の形式の名前を持つ場合、
SYS_SUBP
n
という形式のサブパーティション名が生成されます。
索引にUNUSABLE
のマークが付いている場合でも、table
で定義されている各ローカル索引の対応するパーティションが分割されます。
table
が参照パーティション表の親表の場合は、dependent_tables_clause
を使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。
ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。
parallel_clause
を使用すると、表のデフォルトのパラレル属性を変更せずに、分割操作をパラレル化できます。
ONLINE
ONLINE
を指定すると、表パーティションの分割中に、表に対するDML操作が許可されるようになります。
ONLINE句の制限事項
表パーティションの分割時には、ONLINE
句に次の制限事項が適用されます。
-
ONLINE
句は、SYS
が所有する表に対しては指定できません。 -
ONLINE
句は、索引構成表には指定できません。 -
ONLINE
句は、表でドメイン索引が定義されている場合は指定できません。 -
ONLINE
句は、オブジェクト型を格納するヒープ構成表や、ビットマップ結合索引が定義されているヒープ構成表には指定できません。 -
パラレルDMLおよびダイレクト・パス
INSERT
操作は、表に対する排他的ロックを必要とします。したがって、ロックが競合するため、これらの操作は実行中のオンライン・パーティション分割と同時にはサポートされません。
表パーティションの分割の制限事項
表パーティションの分割には、次の制限事項があります。
-
この句は、ハッシュ・パーティションには指定できません。
-
parallel_clause
は、索引構成表には指定できません。 -
table
が索引構成表の場合や、ローカル・ドメイン索引がtable
に定義されている場合は、パーティションは2つの新しいパーティションにのみ分割可能です。
関連項目:
split_table_subpartition
この句を使用すると、1つのサブパーティションを、重複しない値リストを持つ複数の新しいサブパーティションに分割できます。
ノート:
一定の条件が満たされると、SPLIT
PARTITION
およびSPLIT
SUBPARTITION
操作を最適化して処理速度を上げることができます。これらの操作の最適化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
AT句
AT
句は、レンジ・サブパーティションに対してのみ有効です。新しい2つのサブパーティションのうちの1つ目に、新しく上限(この値は含まない)を指定します。値リストは、subpartition_extended_name
で指定されるサブパーティションの元のサブパーティション境界より小さく、その次に小さいサブパーティション(そのようなパーティションがある場合)のパーティション境界より大きい値にする必要があります。
VALUES句
VALUES
句は、リスト・サブパーティションに対してのみ有効です。1つのキー列で表がサブパーティション化されている場合は、list_values
構文の上位ブランチを使用して、その列の値リストを指定します。NULL
を指定できるのは、まだ同じパーティション内の別のサブパーティションに対してNULL
が指定されていない場合です。複数のキー列で表がサブパーティション化されている場合は、list_values
構文の下位ブランチを使用して、値リストを指定します。各値リストはカッコで囲まれ、キー列の値のリストを表します。新しいサブパーティションのうち、最初のものは指定のサブパーティション値リストを使用して作成され、2つ目のパーティションは、現行サブパーティションの残りのパーティション値を使用して作成されます。このため、値リストには現行のサブパーティションのすべてのパーティション値を含めることはできません。また、現行のサブパーティションに存在しないパーティション値も含めることはできません。
INTO句
INTO
句を使用すると、分割の結果生成される新しいサブパーティションを記述できます。
-
AT
...INTO
句を使用すると、1つのレンジ・パーティションを2つのレンジ・パーティションに分割することによって生成される2つのサブパーティションについて記述できます。2つの新しいサブパーティションのオプションの名前と属性を指定しない場合でも、range_subpartition_desc
には、キーワードSUBPARTITION
が必要になります。新しいサブパーティションの名前を省略すると、Oracle Databaseは、SYS_SUBP
n
の形式の名前を割り当てます。指定されていない属性があると、その属性は現在のサブパーティションから継承されます。 -
VALUES
...INTO
句を使用すると、1つのリスト・パーティションを2つのリスト・パーティションに分割することによって生成される2つのサブパーティションについて記述できます。2つの新しいサブパーティションについてのオプションの名前と属性を指定しない場合でも、list_subpartition_desc
には、キーワードSUBPARTITION
が必要になります。新しいサブパーティションの名前を省略すると、Oracle Databaseは、SYS_SUBP
n
の形式の名前を割り当てます。指定されていない属性があると、その属性は現在のサブパーティションから継承されます。 -
INTO
句を使用すると、1つのレンジ・サブパーティションを2つ以上のレンジ・サブパーティションに分割できます。または、1つのリスト・サブパーティションを2つ以上のリスト・サブパーティションに分割できます。新しいサブパーティション名を指定しない場合、SYS_SUBP
n
という形式の名前が割り当てられます。指定しないすべての属性は、現行のサブパーティションから継承されます。-
各レンジ・サブパーティションは、それらのサブパーティション境界を昇順で指定する必要があります。最初に指定するレンジ・サブパーティションのサブパーティション境界は、その次に低いサブパーティションが存在する場合、そのサブパーティション境界よりも大きくする必要があります。最後のレンジ・サブパーティションのサブパーティション境界は指定できません。これは、現在のサブパーティションのパーティション境界を継承します。
-
リスト・サブパーティションの場合は、新しいサブパーティションに指定されたすべてのサブパーティション値が、現在のサブパーティション内に存在する必要があります。最後のサブパーティションには、サブパーティション値を指定できません。Oracle Databaseは、残りのパーティション値を使用して、現在のサブパーティションから最後のサブパーティションを作成します。
-
対応するローカル索引サブパーティションにUNUSABLE
のマークが付いている場合でも、それらは分割されます。新しい索引サブパーティションに名前があらかじめ指定されていないかぎり、新しい表のサブパーティションの名前が継承されます。この場合、SYS_SUBPn
という形式の新しい索引サブパーティション名が割り当てられます。新しい索引サブパーティションの物理属性は、親サブパーティションから継承されます。親サブパーティションにデフォルトのTABLESPACE
属性が定義されていない場合、対応する新しい表のサブパーティションの表領域が継承されます。
ヒープ構成表の索引が無効になります。update_index_clausesを使用し、これらの索引を更新できます。
ONLINE
ONLINE
を指定すると、表サブパーティションの分割中に、表に対するDML操作が許可されるようになります。
ONLINE句の制限事項
表サブパーティションを分割するためのONLINE
句には、表パーティションを分割するためのONLINE
句と同じ制限事項があります。「ONLINE句の制限事項」を参照してください。
表サブパーティションの分割の制限事項
表サブパーティションの分割には、次の制限事項があります。
-
この句は、ハッシュ・サブパーティションに対して指定できません。
-
サブパーティションの定義で指定できる
partitioning_storage_clause
の句は、TABLESPACE
および表の圧縮のみです。 -
parallel_clause
は、索引構成表には指定できません。 -
table
が索引構成表の場合は、そのサブパーティションは2つの新しいサブパーティションにのみ分割可能です。
merge_table_partitions
merge_table_partitions
句を使用すると、table
の2つ以上のレンジ・パーティション、リスト・パーティション、またはシステム・パーティションの内容を1つの新しいパーティションにマージして、元のパーティションを削除できます。この句はハッシュ・パーティションでは無効です。かわりに、coalesce_table_partition
句を使用してください。
マージする2つ以上のレンジ・パーティション、リスト・パーティション、またはシステム・パーティションのカンマ区切りリストを指定します。TO
句を使用すると、マージする2つ以上の隣接しているレンジ・パーティションを指定できます。
各パーティションに、partition
を使用してパーティション名を指定するか、またはFOR
句を使用して名前なしでパーティションを指定します。FOR
句の詳細は、「パーティション表と索引の参照」を参照してください。
-
マージするパーティションは、隣接している必要があり、そのパーティションがレンジ・パーティションの場合は、パーティション境界を昇順で指定する必要があります。リスト・パーティションおよびシステム・パーティションをマージする場合は、隣接している必要はありません。
-
レンジ・パーティションをマージすると、新しいパーティションは、元のパーティションのうち上位のパーティションのパーティション境界を継承します。
-
リスト・パーティションをマージする場合、結果のパーティションの値リストは、マージされるパーティションの値リストの集合をあわせたものです。
DEFAULT
のリスト・パーティションを別のリスト・パーティションとマージすると、結果のパーティションはDEFAULT
パーティションになり、DEFAULT
値が含まれます。 -
コンポジット・レンジ・パーティションまたはコンポジット・リスト・パーティション、レンジ-リストまたはリスト-リスト・コンポジット・パーティションをマージする場合、サブパーティションの定義は指定できません。サブパーティション化情報は、サブパーティション・テンプレートから取得できます。サブパーティションのテンプレートが指定されていない場合は、1つの
MAXVALUE
サブパーティションがレンジ・サブパーティションから、または1つのDEFAULT
サブパーティションがリスト・サブパーティションから作成されます。
新しいパーティションに対して明示的に指定しなかった属性は、表レベルのデフォルトから継承されます。ただし、新しいパーティションに対してパーティション名を再利用すると、表レベルのデフォルト値ではなく、名前が再利用されたパーティションの値が新しいパーティションに継承されます。
選択したパーティションに対応するローカル索引パーティションは削除され、マージされたパーティションに対応するローカル索引パーティションにUNUSABLE
のマークが付けられます。ヒープ構成表のすべてのグローバル索引にも、UNUSABLE
のマークが付けられます。update_index_clausesを使用し、操作中にこれらすべての索引を更新できます。
table
が参照パーティション表の親表の場合は、dependent_tables_clause
を使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。
ONLINE
パーティションのマージ操作中に表パーティションに対するDML操作を許可するには、ONLINE
を指定します。
表パーティションのマージの制限事項
table
が索引構成表の場合や、ローカル・ドメイン索引がtable
に定義されている場合は、一度にマージできるパーティションは2つのみになります。
関連項目:
「2つの表パーティションのマージ: 例」、「隣接する4つのレンジ・パーティションのマージ例」および「デフォルト・リスト・パーティションの使用: 例」を参照してください。
merge_table_subpartitions
merge_table_subpartitions
句を使用すると、table
の2つ以上のレンジ・サブパーティションまたはリスト・サブパーティションの内容を1つの新しいサブパーティションにマージして、元のサブパーティションを削除できます。この句はハッシュ・サブパーティションでは無効です。かわりに、coalesce_hash_subpartition
句を使用してください。
マージする2つ以上のレンジ・サブパーティション、またはリスト・サブパーティションのカンマ区切りリストを指定します。TO
句を使用すると、マージする2つ以上の隣接しているレンジ・サブパーティションを指定できます。
各サブパーティションに、subpartition
を使用してサブパーティション名を指定するか、またはFOR
句を使用して名前なしでサブパーティションを指定します。FOR
句の詳細は、「パーティション表と索引の参照」を参照してください。
マージされるサブパーティションは、同じパーティションに属している必要があります。レンジ・サブパーティションである場合は、隣接している必要があります。リスト・サブパーティションである場合は、隣接している必要はありません。マージの結果生成されるサブパーティション内のデータは、マージされたサブパーティションのデータが結合されたものです。
INTO
句を指定する場合、range_subpartition_desc
またはlist_subpartition_desc
で、それぞれrange_values_clause
またはlist_values_clause
を指定することはできません。また、partitioning_storage_clause
に指定できる句は、TABLESPACE
およびtable_compression
のみです。
新しいサブパーティションに対して明示的に指定しなかった属性は、パーティション・レベルの値から継承されます。ただし、新しいサブパーティションに対してサブパーティション名を再利用すると、パーティション・レベルのデフォルト値ではなく、名前が再利用されたサブパーティションの値が新しいサブパーティションに継承されます。
対応するローカル索引のサブパーティションがマージされ、結果として生成される索引サブパーティションにはUNUSABLE
のマークが付けられます。また、ヒープ構成表のパーティション化されたグローバル索引とパーティション化されていないグローバル索引の両方に対して、UNUSABLE
のマークが付けられます。update_index_clausesを使用すると、操作中にすべての索引を更新できます。
ONLINE
サブパーティションのマージ操作中に表サブパーティションに対するDML操作を許可するには、ONLINE
を指定します。
表サブパーティションのマージの制限事項
table
が索引構成表の場合は、一度にマージできるサブパーティションは2つのみになります。
exchange_partition_subpart
EXCHANGE
PARTITION
句またはEXCHANGE
SUBPARTITION
句を使用すると、次のデータおよび索引セグメントを交換できます。
-
1つの非パーティション表と、次のいずれかを交換できます。
-
1つのレンジ・パーティション、リスト・パーティションまたはハッシュ・パーティション
-
1つのレンジ・サブパーティション、リスト・サブパーティションまたはハッシュ・サブパーティション
-
-
1つのレンジ・パーティション表とレンジ-レンジまたはリスト-レンジ・コンポジット・パーティション表パーティションのレンジ・サブパーティション
-
1つのハッシュ・パーティション表とレンジ-ハッシュまたはリスト-ハッシュのコンポジット・パーティション表パーティションのハッシュ・サブパーティション
-
1つのリスト・パーティション表とレンジ-リストまたはハッシュ-リストのコンポジット・パーティション表パーティションのリスト・サブパーティション
交換対象の表、パーティションおよびサブパーティションの構造は、パーティション・キーを含め常に同じである必要があります。リスト・パーティションとリスト・サブパーティションの場合、対応する値リストも一致している必要があります。
この句をトランスポータブル表領域とともに使用すると、高速データ・ロードが容易になります。
関連項目:
トランスポータブル表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。
table
にLOB列がある場合、各LOB列のLOBデータ、およびLOB索引パーティション・セグメントまたはLOB索引サブパーティション・セグメントは、table
の対応するLOBデータおよびLOB索引セグメントと交換されます。
table
にネストした表の列が含まれる場合、そのような各列のネストした表パーティション・セグメントは、非パーティション表の対応するネストした表セグメントと交換されます。
table
にID列が格納されている場合、パーティションまたはサブパーティションが交換されることになります。その逆も同様になります。順序ジェネレータは、増加または減少になります。順序ジェネレータは交換されないため、table
とパーティションまたはサブパーティションは、同じ順序ジェネレータを引き続き使用することになります。両方の順序ジェネレータの最高水位標は、新しいID列の値が既存の値と競合しないようにが調整されます。
2つのオブジェクトのすべてのセグメント属性(表領域およびロギングを含む)も交換されます。
パーティション表に交換される表の既存の統計情報は、交換されます。ただし、パーティション化された表のグローバル統計は変更されません。DBMS_STATS.GATHER_TABLE_STATS
プロシージャを使用すると、グローバル統計を再作成できます。GRANULARITY
属性をAPPROX_GLOBAL AND PARTITION
と同じに設定して、処理速度を上げ、既存のパーティション統計に基づいて新しいグローバル統計情報を集計できます。このパッケージ・プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
交換されるオブジェクトのすべてのグローバル索引は、無効になります。update_global_index_clauseまたはupdate_all_indexes_clauseを使用し、パーティションが交換された表のグローバル索引を更新できます。update_all_indexes_clause
には、副次句ではなくUPDATE
INDEXES
キーワードのみを指定できます。交換される表のグローバル索引は、無効のままになります。update_global_index_clause
およびupdate_all_indexes_clause
は、交換操作中にローカル索引を更新しません。INCLUDING | EXCLUDING INDEXES句を使用して、ローカル索引メンテナンスを指定できます。これらの句とともにparallel_clause
を指定すると、交換操作ではなく、索引の更新がパラレル化されます。
WITH TABLE
パーティションまたはサブパーティションを交換するtable
を指定します。schema
を指定しない場合、そのtable
は自分のスキーマ内にあるとみなされます。
INCLUDING | EXCLUDING INDEXES
INCLUDING
INDEXES
を指定すると、ローカル索引パーティションまたはサブパーティションを対応する表索引(非パーティション表の場合)またはローカル索引(ハッシュ・パーティション表の場合)と交換できます。EXCLUDING
INDEXES
を指定すると、交換された表のすべての標準索引、索引パーティションおよびパーティションに対応するすべての索引パーティションまたはサブパーティションにUNUSABLE
のマークを付けることができます。この句を指定しない場合、EXCLUDING
INDEXES
がデフォルトになります。
WITH | WITHOUT VALIDATION
WITH
VALIDATION
を指定すると、交換された表にあるいずれかの行が交換されたパーティションまたはサブパーティションにマップされない場合にエラーが戻されます。WITHOUT
VALIDATION
を指定すると、交換された表にある行が正しくマップされたかどうかがチェックされません。この句を指定しない場合、WITH
VALIDATION
がデフォルトになります。
この句の詳細は、「制約の例外の処理」を参照してください。パーティション交換のコンテキストでは、この句は、パーティション表がUNIQUE
制約を使用して定義されている場合にのみ有効です。また、制約はDISABLE
VALIDATE
の状態である必要があります。この句は、サブパーティションではなくパーティション交換に対してのみ有効です。
CASCADE
CASCADE
を指定すると、table
に含まれるすべての子の参照パーティション表の対応するパーティションまたはサブパーティションを交換できます。参照パーティション表の階層は、ソースとターゲットで一致している必要があります。
CASCADEの制限事項
CASCADE
句には、次の制限事項が適用されます。
-
参照パーティション表階層の親キーが、複数のパーティション化の制約で参照されている場合、
CASCADE
は指定できません。 -
table
の参照パーティション子表でドメイン索引またはXMLIndex
索引が定義されている場合、CASCADE
は指定できません。
関連項目:
-
SQLスクリプトの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』の
DBMS_IOT
パッケージを参照してください。 -
移行行および連鎖行の削除については、『Oracle Database管理者ガイド』を参照してください。
-
制約の確認の詳細は、「constraint」および「索引構成表の例外表の作成: 例」を参照してください。
パーティションおよびサブパーティションの交換時には、次のノートが適用されます。
-
交換される両方の表は同じ主キーを含む必要があり、参照表が空でないかぎり、どちらの表も有効な外部キーを参照できません。
-
パーティション化された索引構成表の交換時には、次の点に注意します。
-
ソースおよびターゲットの表およびパーティションは、その主キーが同じ列に同じ順序で設定されている必要があります。
-
接頭辞圧縮が使用可能な場合は、ソースおよびターゲットの両方で使用可能で、接頭辞の長さは同じである必要があります。
-
ソースおよびターゲットの両方は、索引構成されている必要があります。
-
ソースおよびターゲットの両方に、オーバーフロー・セグメントが必要です。または、ソースおよびターゲットの両方がオーバーフロー・セグメントを持ってはいけません。また、ソースおよびターゲットの両方ともマッピング表を含むか、または両方とも含まない必要があります。
-
ソースおよびターゲットの両方は、LOB列に対して記憶域属性が同一である必要があります。
-
関連項目:
dependent_tables_clause
この句は、参照パーティション表の親表を変更する場合にのみ有効です。この句では、親表の子の参照パーティション表の操作によって作成されるパーティションの属性を指定できます。
-
親表がコンポジット・パーティションではない場合、1つ以上の子表を指定し、子表ごとに、親表内に作成された各パーティションの1つの
partition_spec
を指定します。 -
親表がコンポジットの場合、1つ以上の子表を指定し、子表ごとに、親表内に作成された各サブパーティションの1つの
partition_spec
を指定します。
関連項目:
参照パーティション表の作成の詳細は、「CREATE
TABLE
」の句「reference_partitioning」を参照してください。参照によるパーティション化の概要は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
UNUSABLE LOCAL INDEXES句
この2つの句を使用すると、パーティションとサブパーティションのどちらを変更するかに応じて、partition
に対応するローカル索引パーティションおよび索引サブパーティションの属性を変更できます。
-
UNUSABLE
LOCAL
INDEXES
を指定すると、partition
に関連付けられたローカル索引パーティションまたは索引サブパーティションに、UNUSABLE
のマークが付けられます。 -
REBUILD
UNUSABLE
LOCAL
INDEXES
を指定すると、partition
に関連付けられたUNUSABLEのローカル索引パーティションまたは索引サブパーティションが再構築されます。
UNUSABLE LOCAL INDEXESの制限事項
この句には、次の制限事項があります。
-
この句を
modify_table_partition
の他の句と同時に指定することはできません。 -
サブパーティションが含まれるパーティションに対しては、
modify_table_partition
でこの句を指定できません。ただし、modify_table_subpartition
句では指定できます。
update_index_clauses
update_index_clauses
を使用すると、表のパーティション化操作の一部としてtable
の索引を更新できます。表パーティションでDDL文を実行する場合、table
に索引が定義されていると、DDL文を実行中のパーティションだけでなく索引全体が無効になります。この句を使用すると、変更する索引パーティションをDDL操作中に更新できるため、DDL文の後で索引を再構築する必要がなくなります。
パーティション化された索引構成表では、update_index_clauses
は不要であり、無効です。索引構成表は主キー・ベースであるため、値を変更せずにデータを移動する操作では、グローバル索引はUSABLE
のままです。
update_global_index_clause
この句を指定すると、table
のグローバル索引のみを更新できます。table
のすべてのローカル索引には、UNUSABLE
のマークが付けられます。
UPDATE GLOBAL INDEXES
UPDATE
GLOBAL
INDEXES
を指定すると、table
で定義したグローバル索引を更新できます。
グローバル索引の更新の制限事項
グローバル索引がLOB列のグローバル・ドメイン索引として定義されている場合、ドメイン索引は、更新されるのではなくUNUSABLE
のマークが付けられます。
INVALIDATE GLOBAL INDEXES
INVALIDATE
GLOBAL
INDEXES
を指定すると、table
で定義したグローバル索引を無効にできます。
どちらも指定しない場合、グローバル索引は無効になります。
グローバル索引の無効化の制限事項
この句は、グローバル索引でのみサポートされます。索引構成表に対してはサポートされません。また、この句によって更新されるのは、USABLE
およびVALID
の索引のみです。UNUSABLE
の索引は使用禁止のままになり、INVALID
のグローバル索引は無視されます。
update_all_indexes_clause
この句を使用すると、table
のすべての索引を更新できます。
update_index_partition
この句は、表パーティションに対する操作でのみ有効で、ローカル索引のみに影響します。
-
index_partition_description
を使用すると、各ローカル索引のそれぞれのパーティションの物理属性、表領域の記憶域およびロギングを指定できます。PARTITION
キーワードのみを指定すると、索引のパーティションは次のように更新されます。-
単一の表パーティションに対する操作(
MOVE
PARTITION
、SPLIT
PARTITION
など)の場合、対応する索引パーティションは処理された索引表パーティションの属性を継承します。索引パーティションの名前は生成されないため、この操作によって作成された新しい索引パーティションは、対応する新しい表パーティションから名前を継承します。 -
MERGE
PARTITION
操作の場合、この操作によって作成されたローカル索引パーティションは、作成された表パーティションの名前とローカル索引の属性を継承します。
ドメイン索引の場合、
PARAMETERS
句を使用すると、未解析のまま適切なODCI索引タイプ・ルーチンに渡すパラメータ文字列を指定できます。PARAMETERS
句は、ドメイン索引に対してのみ有効であり、ドメイン索引について指定できるindex_partition_description
の唯一の部分です。関連項目:
ドメイン索引の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。
-
-
コンポジット・パーティション索引の場合、
index_subpartition_clause
を使用すると、各サブパーティションに対して表領域の記憶域を指定できます。update_index_partition
句のこのコンポーネントの詳細は、「CREATE
INDEX
」の「index_subpartition_clause」を参照してください。
USABLE
キーワードとUNUSABLE
キーワードの詳細は、ALTER
INDEX
... USABLE | UNUSABLEを参照してください。
update_index_subpartition
この句は、コンポジット・パーティション表のサブパーティションに対する操作でのみ有効で、コンポジット・パーティション表のローカル索引のみに影響します。1つ以上のサブパーティションに対して、格納する表領域を指定できます。
すべての索引の更新の制限事項
update_all_indexes_clause
には、次の制限事項が適用されます。
-
この句は、索引構成表に対して指定できません。
-
exchange_partition_subpart
句を使用してパーティションまたはサブパーティションを交換する場合、update_all_indexes_clause
は、グローバル索引にのみ適用可能です。このため、update_index_partition
またはupdate_index_subpartition
句を指定できません。ただし、INCLUDING | EXCLUDING INDEXES句を使用して、交換操作中にローカル索引メンテナンスを指定できます。
関連項目:
「グローバル索引の更新: 例」および「パーティション索引の更新: 例」を参照してください。
parallel_clause
parallel_clause
を使用すると、表の問合せおよびDMLに対するデフォルトの並列度を変更できます。
この句の詳細は、「CREATE
TABLE
」の「parallel_clause」を参照してください。
表のパラレル化の変更の制限事項
パラレル化の変更には、次の制限事項があります。
-
table
にLOB型またはユーザー定義オブジェクト型の列が含まれている場合、このtable
でのINSERT
、UPDATE
およびDELETE
は、通知なしに逐次実行されます。ただし、後続の問合せはパラレルで実行されます。 -
parallel_clause
をmove_table_clause
と組み合せて指定する場合、このパラレル化は移動のみに適用され、後続の表でのDML操作および問合せには適用されません。
関連項目:
filter_condition
この句を使用すると、表のパーティションまたはサブパーティションの移動、分割またはマージ、表の移動または非パーティション表のパーティション表への変換の各ALTER
TABLE
操作の実行中に保持する行を指定できます。データベースでは、where_clause
で指定された条件を満たす行のみが保持されます。この句のセマンティクスの詳細は、「SELECT
」の「where_clause」を参照してください。
フィルタ条件の制限事項
filter_condition
句には、次の制限事項が適用されます。
-
フィルタ条件は、ヒープ構成表でのみサポートされます。
-
フィルタ条件が参照できるのは、変更される表の列のみです。フィルタ条件に、結合や副問合せなど、他のデータベース・オブジェクトを参照する操作を含めることはできません。
-
フィルタ条件は、有効化された外部キーによって参照される主キーまたは一意キーがある表ではサポートされません。
オンライン操作でのフィルタ条件の使用の制限事項およびノート
オンラインALTER
TABLE
操作のフィルタ条件の指定時には、次の制限事項およびノートが適用されます。
-
サプリメンタル・ロギングが有効になっている場合は、
filter_condition
句およびONLINE
句の両方を指定することはできません。 -
filter_condition
句およびONLINE
句の両方を指定すると、ALTER
TABLE
操作の実行中に表に対するDML操作が許可されます。フィルタ条件による、同時DML操作に対する直接の影響はありません。ただし、フィルタ操作とDML操作は意図せずに次のような競合を引き起こす可能性があるため、この組合せは慎重に使用してください。-
非パーティション表への挿入は成功します。パーティション表への挿入は、この操作がパーティション化キー基準に違反しない場合は成功します。
-
削除操作は、
ALTER
TABLE
操作の間、フィルタ条件により保持対象となる行に対してのみ適用されます。 -
更新操作は、
ALTER
TABLE
操作の間、フィルタ条件により保持対象となる行に対してのみ適用されます。これらの更新操作は、更新操作によって、フィルタ条件により保持対象となる行が対象外になるかどうかにかかわらず、成功します。 -
ALTER
TABLE
操作の開始時にフィルタ条件による保持対象ではなかった行は、更新操作によってその行が保持対象になるかどうかにかかわらず、保持されません。
-
allow_disallow_clustering
この句は、属性クラスタリングを使用する表に有効です。move_table_clause
で指定された表の移動操作とcoalesce_table_[sub]partition
、merge_table_[sub]partitions
、move_table_[sub]partition
およびsplit_table_[sub]partition
句で指定された表のパーティションおよびサブパーティション・メンテナンス操作中に発生するデータ移動の属性クラスタリングを許可または禁止できます。
-
ALLOW
CLUSTERING
を指定して、データ移動の属性クラスタリングを許可します。この句は、表を作成または変更したDDLのNO
ON
DATA
MOVEMENT
設定をオーバーライドします。 -
DISALLOW
CLUSTERING
を指定して、データ移動の属性クラスタリングを禁止します。この句は、表を作成または変更したDDLのYES
ON
DATA
MOVEMENT
設定をオーバーライドします。
属性クラスタリングを使用しない表に指定する場合、allow_disallow_clustering
句は影響しません。
関連項目:
NO
ON
DATA
MOVEMENT
およびYES
ON
DATA
MOVEMENT
句の詳細は、CREATE
TABLE
のclustering_when句を参照してください。
{ DEFERRED | IMMEDIATE } INVALIDATION
この句を使用すると、データベースで表パーティションのメンテナンス操作の実行中に、依存カーソルが無効化されるタイミングを制御できます。
-
DEFERRED
INVALIDATION
を指定した場合、データベースでは可能な場合、依存カーソルの無効化を回避または遅延します。 -
IMMEDIATE
INVALIDATION
を指定した場合、データベースでは、Oracle Database 12cリリース1 (12.1)以前のリリースでの動作と同様に、依存カーソルを即時に無効にします。これはデフォルトです。
この句を省略した場合、いつカーソルが無効になるかは、CURSOR_INVALIDATION
初期化パラメータの値によって決定されます。
この句を指定できるのは、表パーティションのメンテナンス操作を実行する場合のみで、その他のALTER
TABLE
操作に対してはサポートされません。
関連項目:
-
カーソルの無効化の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。
-
CURSOR_INVALIDATION
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
move_table_clause
move_table_clause
を使用すると、非パーティション表のデータまたはパーティション表のパーティションのデータを新しいセグメントに再配置できます。オプションとして、別の表領域への配置および記憶域属性の変更を行うこともできます。
LOB_storage_clause
句およびvarray_col_properties
句を使用して、表またはパーティションに関連付けられたLOBデータ・セグメントを移動することもできます。この句で指定していないLOB項目は移動できません。
表を別の表領域に移動する場合、COMPATIBLE
パラメータが10.0以上に設定されていると、ネストした表の列に対する記憶表は、その表が作成された表領域に残ります。COMPATIBLE
が10.0未満に設定されている場合、表と記憶表は新しい表領域に自動的に移動します。
ONLINE
を指定すると、表の移動中に、表に対してDML操作を実行できます。
表のオンライン化の制限事項
表のオンライン化には、次の制限事項があります。
-
同じ文でこの句と他の句は結合できません。
-
この句は、パーティション化された索引構成表に対して指定できません。
-
空間、XML、テキスト索引などの表でドメイン索引が定義されている場合、この句を指定することはできません。
-
パラレルDMLおよびダイレクト・パス
INSERT
操作は、表に対する排他的ロックを必要とします。したがって、ロックが競合するため、これらの操作は実行中のオンライン表MOVE
と同時にサポートされません。 -
LOB、
VARRAY
、Oracleが提供する型またはユーザー定義オブジェクト型の列が含まれている索引構成表には、この句は指定できません。
索引構成表の場合は、move_table_clause
のindex_org_table_clause
を使用するとオーバーフロー・セグメント属性も指定できます。move_table_clause
を指定すると、索引構成表の主キー索引が再構築されます。オーバーフロー・データ・セグメントは、OVERFLOW
キーワードが明示的に指定されていないかぎり、再構築されません。ただし、次の場合は例外です。
-
ALTER
TABLE
文の一部としてPCTTHRESHOLD
の値またはINCLUDING
列を変更する場合は、オーバーフロー・データ・セグメントが再構築されます。 -
索引構成表内の表外列(LOB列、VARRAY列、ネストした表の列)のいずれかを明示的に移動する場合は、オーバーフロー・データ・セグメントも再構築されます。
LOB列の索引およびデータ・セグメントは、LOB列をALTER
TABLE
文の一部として明示的に指定しないかぎり、再構築されません。
MAPPING
TABLE
を指定すると、マッピング表がまだ存在しない場合、Oracle Databaseによりマッピング表が作成されます。マッピング表がすでに存在する場合、マッピング表は索引構成表とともに移動され、すべてのビットマップ索引にはUNUSABLE
のマークが付けられます。新しいマッピング表は、親表と同じ表領域に作成されます。
NOMAPPING
を指定すると、既存のマッピング表が削除されます。
この句の詳細は、「CREATE
TABLE
」の「mapping_table_clauses」を参照してください。
マッピング表の制限事項
table
でビットマップ索引が定義されている場合は、NOMAPPING
を指定できません。
prefix_compression
prefix_compression
句を使用すると、索引構成表の接頭辞圧縮を有効または無効にできます。
-
COMPRESS
を指定すると、接頭辞圧縮が使用可能になり、その結果、索引構成表における主キー列の値が重複しなくなります。integer
を使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。接頭辞の長さの有効範囲は、1から(主キー列数-1)までです。デフォルトでは(主キー列数-1)になります。
-
NOCOMPRESS
を指定すると、索引構成表での接頭辞圧縮が使用禁止になります。これはデフォルトです。
再構築した索引構成表を格納する表領域を指定します。
LOB_storage_clause
この句を使用すると、別の表領域にLOBセグメントを移動できます。表にLONG
列が含まれている場合は、この句を使用してLOBセグメントを移動することはできません。かわりに、LONG
列をLOBに変換するか、または表をエクスポートし、LOB列に必要な表領域の記憶域を指定する表を再作成して表データを再インポートする必要があります。
UPDATE INDEXES
この句は、ヒープ構成表のオンラインまたはオフライン移動の実行時にのみ有効です。これを使用して、表のすべてのグローバル索引を更新できます。
オプションで、索引または索引パーティションの表領域を次のように変更できます。
-
segment_attributes_clause
を指定すると、非パーティション・グローバル索引の表領域を変更できます。この句内で指定できるのはTABLESPACE
句のみです。 -
update_index_partition
句を指定すると、パーティション・グローバル索引のパーティションの表領域を変更できます。この句内で指定できるのは、segment_attributes_clause
のTABLESPACE
句のみです。
表の移動の制限事項
表の移動には、次の制限事項があります。
-
MOVE
を指定する場合は、ALTER
TABLE
文の最初の句にする必要があります。この句以外では、physical_attributes_clause
、parallel_clause
およびLOB_storage_clause
のみが指定できます。 -
LONG
またはLONG
RAW
列を含む表は、移動できません。 -
パーティション表(ヒープ表または索引構成表)全体の移動はできません。
個々のパーティションまたはサブパーティションを移動してください。
ノート:
move_table_clause
で指定するすべてのLOB列については、次のことに注意してください。
-
新しい表領域が指定されていない場合でも、古いLOBデータ・セグメントとこれに対応する索引セグメントは削除され、新しいセグメントが作成されます。
-
table
のLOB索引がそのLOBデータと異なる表領域にある場合、移動後のLOB索引は、LOBデータと同じ表領域にまとめて格納されます。
関連項目:
「move_table_partition」および「move_table_subpartition」を参照してください。
modify_to_partitioned
この句を使用すると、非パーティション表またはパーティション表を、索引を含めてオンラインまたはオフラインでパーティション化できます。
非パーティション表またはパーティション表を、次の特性を持つ任意のタイプのパーティション表またはコンポジット・パーティション表に変更できます。
-
元の表内のすべてのデータが保持されます。
-
新しく作成されたパーティションのデータまたは変更された表のサブパーティションは、
table_partitioning_clauses
で別途指定しないかぎり、元の表と同じ表領域に格納されます。 -
ローカル索引パーティションまたはサブパーティションとLOBパーティションまたはサブパーティションは、
table_partitioning_clauses
で別途指定しないかぎり表パーティションまたはサブパーティションと同じ場所に配置されます。 -
元の表で定義されているすべてのトリガー、制約およびVPDポリシーが保持されます。
-
元の非パーティション表で表圧縮が定義されている場合、パーティション表でも同じタイプの表圧縮が使用されます。
-
パーティション表を変更する場合、新しく作成するパーティションまたはサブパーティションの圧縮設定は、すべてのパーティションまたはサブパーティションが同じ圧縮方法を共有していないかぎり、変更前のパーティション表のデフォルトの圧縮設定から導出されます。
modify_to_partitioned
句で指定された、文字データ型のレンジ、リストまたはハッシュ・パーティション化キー列またはサブパーティション化キー列のそれぞれに、BINARY
、USING_NLS_COMP
、USING_NLS_SORT
またはUSING_NLS_SORT_CS
のいずれかの宣言された照合が必要です。
table_partitioning_clauses
この句を使用すると、表のパーティション化属性を指定できます。
modify_to_partitioned
句で指定された、文字データ型のレンジ、リストまたはハッシュ・パーティション化キー列またはサブパーティション化キー列のそれぞれに、BINARY
、USING_NLS_COMP
、USING_NLS_SORT
またはUSING_NLS_SORT_CS
のいずれかの宣言された照合が必要です。
この句のセマンティクスは、CREATE
TABLE
文と同じです。この句のセマンティクスの詳細は、「CREATE
TABLE
」の「table_partitioning_clauses」を参照してください。
NONPARTITIONED
パーティション表を非パーティション状態に戻すには、NONPARTITIONED
を指定します。
ONLINE
ONLINE
を指定すると、パーティション表の変更中に、表に対するDML操作が許可されるようになります。
UPDATE INDEXES
この句を使用すると、表の既存の索引が、グローバル・パーティション索引またはローカル・パーティション索引にどのように変換されるかを指定できます。
-
index
には、表の既存の索引の名前を指定します。 -
local_partitioned_index
句を指定すると、index
をローカル・パーティション索引に変換できます。この句のセマンティクスは、CREATE
INDEX
文と同じです。この句のセマンティクスの詳細は、「CREATE
INDEX
」の句「local_partitioned_index」を参照してください。 -
global_partitioned_index
句を指定すると、index
をグローバル・パーティション索引に変換できます。この句のセマンティクスは、CREATE
INDEX
文と同じです。この句のセマンティクスの詳細は、「CREATE
INDEX
」の句「global_partitioned_index」を参照してください。 -
GLOBAL
キーワードを指定すると、同一キーのパーティション・グローバル索引および非パーティション・グローバル索引がグローバル形状を保持できるようになります。この句は、それらの索引がローカル・パーティション索引に変換されないようにします。非同一グローバル索引には効果がありません。
UPDATE
INDEXES
キーワードのみを指定した場合、またはUPDATE
INDEXES
句をすべて省略した場合は、既存の索引は次のように変換されます。
-
非同一キー索引は元の形状を保持します。通常の索引は非パーティション・グローバル索引に変換され、非パーティション・グローバル索引は変化せず、パーティション・グローバル索引は変化せずにそのパーティション形状を保持します。
-
同一キー索引はローカル・パーティション索引に変換されます。同一キー索引の索引定義にはパーティション化キーが含まれていますが、索引定義にはパーティション化キーのみが含まれているわけではありません。
-
ビットマップ索引は、同一キー索引であるかどうかにかかわらず、ローカル・パーティション索引に変換されます。
パーティション表からパーティション表への変換のデフォルトの索引規則
パーティション表からパーティション表へのデフォルトの索引変換について設定されている規則は、非パーティション表からパーティション表への変換と同じですが、パーティション表の既存のローカル索引に対する追加の処理があります。
-
索引がすでにローカルである場合には、パーティション化ディメンションの両側で索引列が同一キーであれば、索引はローカル索引のままになります。
-
パーティション化列がキー列のサブセット(つまり、同一キー)である場合は、グローバル索引がローカルに変換されます。グローバル索引が同一キー索引でない場合は、グローバル索引の形状が保持されます。
非パーティション表のパーティション表への変更の制限事項
modify_to_partitioned
句には、次の制限事項が適用されます。
-
この句は、索引構成表に対しては指定できません。
-
この句は、表でドメイン索引が定義されている場合は指定できません。
-
非パーティション表を参照パーティション表の子表に変更するときには、
ONLINE
を指定できません。この操作は、オフライン・モードでのみサポートされます。
関連項目:
非パーティション表のパーティション表への変換の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
modify_opaque_type
modify_opaque_type
句を使用すると、指定した抽象データ型またはXMLType
をアンパック記憶域を使用してANYDATA
列に格納するようにデータベースに指示できます。
この句には、任意の抽象データ型を指定できます。ただし、従来型の記憶域を使用することではANYDATA
列に格納できない、次のデータ型を指定できることが主な利点になります。
-
XMLType
-
XMLType
型、CLOB
型、BLOB
,型、またはNCLOB
型の1つ以上の属性を含む抽象データ型。
アンパック記憶域を使用すると、データ型は、ANYDATA
列に関連付けられたシステム生成の非表示列に格納されます。これらのデータ型は、従来型記憶域を使用してANYDATA
列に格納されたデータ型と同じように挿入および問合せできます。
anydata_column
ANYDATA
型の列の名前を指定します。type_name
が、XMLType
型、CLOB
型、BLOB
型、またはNCLOB
型の属性を含まない抽象データ型の場合、anydata_column
は空にする必要があります。
type_name
1つ以上の抽象データ型またはXMLType
の名前を指定します。この抽象データ型には、XMLType
型、CLOB
型、BLOB
型、またはNCLOB
型の属性を含めることができます。この型は、EDITIONABLE
にすることができます。これらのデータ型を、その後でanydata_column
に挿入すると、そのデータ型はアンパック記憶域を使用するようになります。この句を以前に同一のanydata_column
に指定していた場合、以前に指定したデータ型と新しく指定したデータ型に、アンパック記憶域が引き続き使用されます。
関連項目:
ANYDATA
型の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』および「ANYDATA列のアンパック記憶域: 例」
immutable_table_clauses
NO DROP
句またはNO DELETE
句を使用して、不変表の定義を変更できます。
NO DROP
句を使用して、不変表または不変表内の行の保存期間を変更します。保存期間を短くすることはできません。
例: 不変表の保存期間の変更
次の文では、不変表imm_tab
の定義を変更して、最新の行が50日経過するまでは削除できないように指定します。
ALTER TABLE imm_tab NO DROP UNTIL 50 DAYS IDLE;
例: 不変表の行の保存期間の変更
次の文では、不変表imm_tab
の定義を変更し、作成してから120日経過するまで行を削除できないように指定します。
ALTER TABLE imm_tab NO DELETE UNTIL 120 DAYS AFTER INSERT;
blockchain_table_clauses
ALTER TABLE
文でキーワードBLOCKCHAIN
を使用して作成された表と、1つ以上のblockchain_table_clauses
を使用して作成された表を変更できます。
句のセマンティクスについては、CREATE TABLEのblockchain_table_clauses
を参照してください。
制限事項
ALTER TABLE
文ではblockchain_table_clauses
のblockchain_hash_and_data_format_clause
を使用できません。
次の句を除いてブロックチェーン表でALTER TABLE
のすべての句を使用できます。
-
RENAME
table -
ADD COLUMN
-
DROP COLUMN
-
RENAME COLUMN
-
DROP (SUB)PARTITION
-
TRUNCATE(SUB)PARTITION
-
EXCHANGE(SUB)PARTITION
-
MODIFY TYPE
enable_disable_clause
enable_disable_clause
を使用すると、Oracle Databaseが整合性制約を適用するかどうか、およびその方法を指定できます。DROP
およびKEEP
句は、一意制約または主キー制約を使用禁止にする場合のみに有効です。
関連項目:
この文に関するノートおよび制限事項を含むこの句の詳細は、「CREATE
TABLE
」の「enable_disable_clause」を参照してください。
TABLE LOCK
DDL操作中にロックされた表にのみDDL操作を実行できます。このような表ロックは、DML操作中は必要ありません。
ノート:
一時表に表ロックを適用することはできません。
-
ENABLE
TABLE
LOCK
を指定すると、表ロックが有効になり、表に対するDDL操作が実行可能になります。現在実行中のすべてのトランザクションは、表ロックが有効になる前にコミットまたはロールバックする必要があります。ノート:
Oracle Databaseは、表をロックする前に、データベース内のアクティブなDMLトランザクションが完了するまで待機します。その結果、遅延が生じる可能性があることに注意してください。
-
DISABLE
TABLE
LOCK
を指定すると、表ロックが無効になり、表に対するDDL操作が実行できなくなります。ノート:
ターゲット表の表ロックが使用禁止の場合、パラレルDML操作は実行されません。
ALL TRIGGERS
ALL
TRIGGERS
句を使用すると、表に関連するすべてのトリガーを有効または無効にできます。
-
ENABLE
ALL
TRIGGERS
を指定すると、表に関連するすべてのトリガーが使用可能になります。トリガー条件が満たされた場合に、トリガーが起動されます。1つのトリガーを使用可能にする場合は、
ALTER
TRIGGER
のenable_clause
を使用してください。関連項目:
「CREATE TRIGGER」、「ALTER TRIGGER」および「トリガーの有効化: 例」を参照してください。
-
DISABLE
ALL
TRIGGERS
を指定すると、表に関連するすべてのトリガーが使用禁止になります。トリガー条件が満たされた場合でも、使用禁止のトリガーは起動されません。
CONTAINER_MAP
CONTAINER_MAP
句を使用すると、コンテナ・マップを使用した表の問合せを有効または無効にできます。
-
ENABLE
CONTAINER_MAP
を指定して、コンテナ・マップを使用した表の問合せを有効化します。 -
DISABLE
CONTAINER_MAP
を指定して、コンテナ・マップを使用した表の問合せを無効化します。
CONTAINERS_DEFAULT
CONTAINERS_DEFAULT
句を使用して、CONTAINERS
句に対して表を有効化または無効化します。
-
ENABLE
CONTAINERS_DEFAULT
を指定して、CONTAINERS
句に対して表を有効化します。 -
DISABLE
CONTAINERS_DEFAULT
を指定して、CONTAINERS
句に対して表を無効化します。
例
表への制約の追加: 例
次の文は、データを操作するために新しい表を作成して、新しく作成された表に情報を表示します。
CREATE TABLE JOBS_Temp AS SELECT * FROM HR.JOBS; SELECT * FROM JOBS_Temp WHERE MIN_SALARY < 3000; JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY ---------- ----------------------------------- ---------- ---------- PU_CLERK Purchasing Clerk 2500 5500 ST_CLERK Stock Clerk 2008 5000 SH_CLERK Shipping Clerk 2500 5500
次の文は、列値をより高い値に更新します。
UPDATE JOBS_Temp SET MIN_SALARY = 2300 WHERE MIN_SALARY < 2010;
次の文は、制約を追加します
ALTER TABLE JOBS_Temp ADD CONSTRAINT chk_sal_min CHECK (MIN_SALARY >=2010);
次の文は、表の情報を表示します。
SELECT * FROM JOBS_Temp WHERE MIN_SALARY < 3000; JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY ---------- ----------------------------------- ---------- ---------- PU_CLERK Purchasing Clerk 2500 5500 ST_CLERK Stock Clerk 2300 5000 SH_CLERK Shipping Clerk 2500 5500
次の文は、制約を表示します。
SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='JOBS_TEMP'; CONSTRAINT_NAME -------------------------------------------------------------------------------- SYS_C008830 CHK_SAL_MIN
コレクションの取出し: 例
次の文は、サンプル表sh.print_media
のネストした表の列ad_textdocs_ntab
を変更し、問合せ時にロケータのかわりに実値を戻します。
ALTER TABLE print_media MODIFY NESTED TABLE ad_textdocs_ntab RETURN AS VALUE;
パラレル処理の指定: 例
次の文は、サンプル表oe.customers
に対する問合せのパラレル処理を指定します。
ALTER TABLE customers PARALLEL;
制約状態の変更: 例
次の文は、employees
表のemp_manager_fk
という名前の整合性制約をENABLE
VALIDATE
状態にします。
ALTER TABLE employees ENABLE VALIDATE CONSTRAINT emp_manager_fk EXCEPTIONS INTO exceptions;
Oracle Databaseが制約を使用可能にするためには、employees
表の各行がこの制約を満たしている必要があります。制約に違反する行があれば、制約は使用禁止のままになります。すべての例外は、exceptions
表に記述されます。次の文で、employees
表の例外を検出することもできます。
SELECT e.* FROM employees e, exceptions ex WHERE e.rowid = ex.row_id AND ex.table_name = 'EMPLOYEES' AND ex.constraint = 'EMP_MANAGER_FK';
次の文は、employees
表の2つの制約をENABLE
NOVALIDATE
状態にします。
ALTER TABLE employees ENABLE NOVALIDATE PRIMARY KEY ENABLE NOVALIDATE CONSTRAINT emp_last_name_nn;
この文には、次の2つのENABLE
句が含まれています。
-
1番目のENABLE句は、表の主キー制約を
ENABLE
NOVALIDATE
状態にします。 -
2番目のENABLE句は、
emp_last_name_nn
という制約をENABLE
NOVALIDATE
状態にします。
この例では、表のそれぞれの行が2つの制約を満たす場合にかぎり、その制約が使用可能になります。どちらかの制約に違反する行があった場合、エラーが戻され、どちらの制約も使用禁止のままになります。
departments
表のlocation_id
列の外部キー制約について考えます。ここでは、locations
表の主キーを参照しています。次の文は、locations
表の主キーを使用禁止にします。
ALTER TABLE locations MODIFY PRIMARY KEY DISABLE CASCADE;
locations
表の一意キーは、departments
表の外部キーによって参照されるため、この主キーを使用禁止にする場合は、CASCADE
句を指定します。この句によって、外部キーも使用禁止になります。
索引構成表の例外表の作成: 例
次の例では、索引構成表hr.countries
の行のうち、主キー制約に違反する行を格納するexcept_table
表を作成します。
EXECUTE DBMS_IOT.BUILD_EXCEPTIONS_TABLE ('hr', 'countries', 'except_table');
ALTER TABLE countries ENABLE PRIMARY KEY EXCEPTIONS INTO except_table;
例外表を指定する場合は、この表に行を挿入する権限が必要です。検出された例外を調べる場合、例外表を問い合せる権限が必要です。
CHECK制約の無効化: 例
次の文は、employees
表でCHECK
制約を定義して無効にします。
ALTER TABLE employees ADD CONSTRAINT check_comp CHECK (salary + (commission_pct*salary) <= 5000) DISABLE;
check_comp
制約は、給与総額が$5000を超える従業員がいないことを保証します。ただし、この制約が使用禁止になっているため、従業員の給与をこの制限以上に増やすことができます。
トリガーの有効化: 例
次の文は、employees
表に関連付けられているすべてのトリガーを有効にします。
ALTER TABLE employees ENABLE ALL TRIGGERS;
未使用領域の割当て解除: 例
次の文は、employees
表で再利用できるように最高水位標がMINEXTENTS
を超えるすべての未使用領域を解放します。
ALTER TABLE employees DEALLOCATE UNUSED;
詳細な大/小文字の区別に関する列の照合の変更: 例
この例では、大/小文字を区別しないように列を変更する方法を示しています。まず、次のようにstudents
表を作成し、データを移入します。
CREATE TABLE students (last_name VARCHAR2(20), id NUMBER); INSERT INTO students VALUES('Dodd', 364); INSERT INTO students VALUES('de Niro', 132); INSERT INTO students VALUES('Vogel', 837); INSERT INTO students VALUES('van der Kamp', 549); INSERT INTO students VALUES('van Der Meer', 624);
次の文は、列last_name
をアルファベット順に戻します。結果では大/小文字が区別されることに注意してください。小文字は大文字より後に示されています。
SELECT last_name, id FROM students ORDER BY last_name; LAST_NAME ID -------------------- ---------- Dodd 364 Vogel 837 de Niro 132 van Der Meer 624 van der Kamp 549
次の文は、列last_name
のデータ・バインドされた照合を、大/小文字が区別されない照合BINARY_CI
に変更します。
ALTER TABLE students MODIFY (last_name COLLATE BINARY_CI);
次の文も、列last_name
をアルファベット順に戻します。今回は、結果で大/小文字が区別されないことに注意してください。
SELECT last_name, id FROM students ORDER BY last_name; LAST_NAME ID -------------------- ---------- de Niro 132 Dodd 364 van der Kamp 549 van Der Meer 624 Vogel 837
列名の変更: 例
次の例では、サンプル表oe.customers
の列名をcredit_limit
からcredit_amount
に変更します。
ALTER TABLE customers RENAME COLUMN credit_limit TO credit_amount;
列の削除: 例
次の文は、CASCADE
CONSTRAINTS
が指定されているdrop_column_clause
です。表t1
が次のように作成されているとします。
CREATE TABLE t1 ( pk NUMBER PRIMARY KEY, fk NUMBER, c1 NUMBER, c2 NUMBER, CONSTRAINT ri FOREIGN KEY (fk) REFERENCES t1, CONSTRAINT ck1 CHECK (pk > 0 and c1 > 0), CONSTRAINT ck2 CHECK (c2 > 0) );
次の文に対してエラーが戻されます。
/* The next two statements return errors: ALTER TABLE t1 DROP (pk); -- pk is a parent key ALTER TABLE t1 DROP (c1); -- c1 is referenced by multicolumn -- constraint ck1
次の文を発行すると、列pk
、主キー制約、外部キー制約ri
およびCHECK制約ck1
が削除されます。
ALTER TABLE t1 DROP (pk) CASCADE CONSTRAINTS;
削除される列に対して定義されている制約で参照されている列も、すべて削除される場合は、CASCADE
CONSTRAINTS
は必要ありません。たとえば、列pk
を他の表から参照する参照制約が他に存在しない場合は、次の文を指定するときにCASCADE
CONSTRAINTS
句がなくてもエラーにはなりません。
ALTER TABLE t1 DROP (pk, fk, c1);
未使用の列の削除: 例
次の文は、データを操作するために新しい表を作成して、新しく作成された表に情報を表示します。
CREATE TABLE JOBS_Temp AS SELECT * FROM HR.JOBS; SELECT * FROM JOBS_Temp WHERE MAX_SALARY > 20000; JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY ---------- ----------------------------------- ---------- ---------- AD_PRES President 20080 40000 AD_VP Administration Vice President 15000 30000 SA_MAN Sales Manager 10000 20080
次の文は、2つの新しい列を追加します。
ALTER TABLE JOBS_Temp ADD (DUMMY1 NUMBER(2), DUMMY2 NUMBER(2));
次の文は、新しく追加された列に値を挿入します。
INSERT INTO JOBS_Temp(JOB_ID, JOB_TITLE, DUMMY1, DUMMY2) VALUES ('D','DUMMY',10,20); INSERT INTO JOBS_Temp(JOB_ID, JOB_TITLE, DUMMY1, DUMMY2) VALUES ('D','DUMMY',10,20)
次の文は、新しく追加された列を未使用に設定します。
ALTER TABLE JOBS_TEMP SET UNUSED (DUMMY1, DUMMY2);
次の文は、未使用の列数を表示します。
SELECT * FROM USER_UNUSED_COL_TABS WHERE TABLE_NAME='JOBS_TEMP'; TABLE_NAM COUNT --------- ---------- JOBS_TEMP 2
次の文は、未使用の列を削除します。
ALTER TABLE JOBS_TEMP DROP UNUSED COLUMNS;
次の文は、表の情報を表示します。
SELECT * FROM JOBS_TEMP; JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY ---------- ----------------------------------- ---------- ---------- AD_PRES President 20080 40000 AD_VP Administration Vice President 15000 30000 AD_ASST Administration Assistant 3000 6000 FI_MGR Finance Manager 8200 16000 FI_ACCOUNT Accountant 4200 9000 AC_MGR Accounting Manager 8200 16000 AC_ACCOUNT Public Accountant 4200 9000 SA_MAN Sales Manager 10000 20080 SA_REP Sales Representative 6000 12008 PU_MAN Purchasing Manager 8000 15000 PU_CLERK Purchasing Clerk 2500 5500 ST_MAN Stock Manager 5500 8500 ST_CLERK Stock Clerk 2008 5000 SH_CLERK Shipping Clerk 2500 5500 IT_PROG Programmer 4000 10000 MK_MAN Marketing Manager 9000 15000 MK_REP Marketing Representative 4000 9000 HR_REP Human Resources Representative 4000 9000 PR_REP Public Relations Representative 4500 10500 D DUMMY D DUMMY
索引構成表の変更: 例
次の文は、hr.countries
に基づく索引構成表countries_demo
の索引セグメントのINITRANS
パラメータを変更します。
ALTER TABLE countries_demo INITRANS 4;
次の文は、オーバーフロー・データ・セグメントを索引構成表countries
に追加します。
ALTER TABLE countries_demo ADD OVERFLOW;
次の文は、索引構成表countries
のオーバーフロー・データ・セグメントのINITRANS
パラメータを変更します。
ALTER TABLE countries_demo OVERFLOW INITRANS 4;
表パーティションの分割: 例
次の文は、サンプル表sh.sales
の古いパーティションsales_q4_2000
を分割して2つの新しいパーティションを作成し、1つにはsales_q4_2000b
という名前を付け、もう1つには旧パーティションの名前を再利用します。
ALTER TABLE sales SPLIT PARTITION SALES_Q4_2000 AT (TO_DATE('15-NOV-2000','DD-MON-YYYY')) INTO (PARTITION SALES_Q4_2000, PARTITION SALES_Q4_2000b);
次の文では、元のパーティションsales_q1_2002
を、新しい3つのパーティションsales_jan_2002
、sales_feb_2002
、およびsales_mar_2002
に分割します。
ALTER TABLE sales SPLIT PARTITION SALES_Q1_2002 INTO ( PARTITION SALES_JAN_2002 VALUES LESS THAN (TO_DATE('01-FEB-2002','DD-MON-YYYY')), PARTITION SALES_FEB_2002 VALUES LESS THAN (TO_DATE('01-MAR-2002','DD-MON-YYYY')), PARTITION SALES_MAR_2002);
次の文は、pm.print_media表のパーティション・バージョンを作成します。print_media表のLONG
列はLOBに変換されています。表は、「Oracle Managed Filesの作成: 例」で作成された表領域に格納されます。ad_textdocs_ntab
列およびad_header
列の基礎となるオブジェクト型は、pm
サンプル・スキーマを作成するスクリプトで作成されます。
CREATE TABLE print_media_part ( 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 textdoc_nt PARTITION BY RANGE (product_id) (PARTITION p1 VALUES LESS THAN (100), PARTITION p2 VALUES LESS THAN (200));
次の文は、表のパーティションp2
をパーティションp2a
とp2b
に分割します。
ALTER TABLE print_media_part SPLIT PARTITION p2 AT (150) INTO (PARTITION p2a TABLESPACE omf_ts1 LOB (ad_photo, ad_composite) STORE AS (TABLESPACE omf_ts2), PARTITION p2b LOB (ad_photo, ad_composite) STORE AS (TABLESPACE omf_ts2)) NESTED TABLE ad_textdocs_ntab INTO (PARTITION nt_p2a, PARTITION nt_p2b);
p2a
とp2b
のパーティションでは、列ad_photo
とad_composite
に対するLOBセグメントが表領域omf_ts2
内に作成されます。パーティションp2aのその他の列に対するLOBセグメントは、表領域omf_ts1に保存されます。パーティションp2bのその他の列に対するLOBセグメントは、このALTER
文の実行前の表領域で保持されます。ただし、LOBデータおよびLOB索引セグメントが新しい表領域に移動されない場合でも、これらの新しいセグメントが作成されます。
また、ネストした表の列ad_textdocs_ntab
に対する新しいセグメントも作成されます。これらの新しいセグメントの記憶表は、nt_p2a
およびnt_p2b
です。
2つの表パーティションのマージ: 例
次の文は、「表パーティションの分割: 例」で作成されたパーティションをマージして1つのパーティションに戻します。
ALTER TABLE sales MERGE PARTITIONS sales_q4_2000, sales_q4_2000b INTO PARTITION sales_q4_2000;
次の文は、「表のパーティションの分割: 例」の例と逆の操作を実行します。
ALTER TABLE print_media_part MERGE PARTITIONS p2a, p2b INTO PARTITION p2ab TABLESPACE example NESTED TABLE ad_textdocs_ntab STORE AS nt_p2ab;
隣接する4つのレンジ・パーティションのマージ例
次の文では、隣接する4つのレンジ・パーティションsales_q1_2000
、sales_q2_2000
、sales_q3_2000
、およびsales_q4_2000
を、1つのパーティションsales_all_2000
にマージします。
ALTER TABLE sales MERGE PARTITIONS sales_q1_2000 TO sales_q4_2000 INTO PARTITION sales_all_2000;
LOBおよびネストした表の記憶域を持つ表パーティションの追加: 例
次の文は、パーティションp3
をprint_media_part
表に追加し(前述の例を参照)、その表のBLOB
、CLOB
およびネストした表の列の記憶特性を指定します。
ALTER TABLE print_media_part ADD PARTITION p3 VALUES LESS THAN (400) LOB(ad_photo, ad_composite) STORE AS (TABLESPACE omf_ts1) LOB(ad_sourcetext, ad_finaltext) STORE AS (TABLESPACE omf_ts2) NESTED TABLE ad_textdocs_ntab STORE AS nt_p3;
パーティションp3
の列ad_photo
およびad_composite
に対するLOBデータとLOB索引セグメントは、表領域omf_ts1
に格納されます。LOB列の他の属性は、まず表レベルのデフォルトから継承され、次に表領域のデフォルトから継承されます。
列ad_source_text
およびad_finaltext
のLOBデータ・セグメントは、omf_ts2
表領域に格納され、他のすべての属性は、まず表レベルのデフォルト値から継承され、次に表領域のデフォルト値から継承されます。
実表のパーティションp3
に対応する、ネストした表の記憶列ad_textdocs_ntab
の記憶表のパーティションの名前はnt_p3
になり、他のすべての属性は、まず表レベルのデフォルト値から継承され、次に表領域のデフォルト値から継承されます。
表への複数パーティションの追加: 例
次の文は、「表パーティションの分割: 例」で作成された表print_media_part
に3つのパーティションを追加します。
ALTER TABLE print_media_part ADD PARTITION p3 values less than (300), PARTITION p4 values less than (400), PARTITION p5 values less than (500);
デフォルト・リスト・パーティションの使用: 例
次の文は、「リスト・パーティション化の例」で作成されたリスト・パーティション表を使用します。最初の文は、既存のデフォルト・パーティションを新規のsouth
パーティションとデフォルト・パーティションに分割します。
ALTER TABLE list_customers SPLIT PARTITION rest VALUES ('MEXICO', 'COLOMBIA') INTO (PARTITION south, PARTITION rest);
次の文は、結果のデフォルト・パーティションをasia
パーティションとマージします。
ALTER TABLE list_customers MERGE PARTITIONS asia, rest INTO PARTITION rest;
次の文は、デフォルト・パーティションを分割して、asia
パーティションを再作成します。
ALTER TABLE list_customers SPLIT PARTITION rest VALUES ('CHINA', 'THAILAND') INTO (PARTITION asia, PARTITION rest);
表パーティションの削除: 例
次の文は、パーティションp3
(「LOBおよびネストした表の記憶域を持つ表パーティションの追加: 例」で作成)を削除します。
ALTER TABLE print_media_part DROP PARTITION p3;
表パーティションの交換: 例
この例では、「リスト・パーティション化の例」で作成したlist_customers
表のパーティションと同じ構造を持つexchange_table
表を作成します。次に、表list_customers
のパーティションrest
を表exchange_table
に置き換えますが、ローカル索引パーティションと対応するexchange_table
の索引との交換は行わず、exchange_table
内のデータがパーティションrest
の範囲内にあるかどうかの検証も行いません。
CREATE TABLE exchange_table ( 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)); ALTER TABLE list_customers EXCHANGE PARTITION rest WITH TABLE exchange_table WITHOUT VALIDATION;
表パーティションの変更: 例
次の文は、list_customers
表のパーティションasia
に対応するすべてのローカル索引パーティションに、UNUSABLE
のマークを付けます。
ALTER TABLE list_customers MODIFY PARTITION asia UNUSABLE LOCAL INDEXES;
次の文は、UNUSABLE
のマークが付けられたすべてのローカル索引パーティションを再構築します。
ALTER TABLE list_customers MODIFY PARTITION asia REBUILD UNUSABLE LOCAL INDEXES;
表パーティションの移動: 例
次の文は、パーティションp2b
(「表パーティションの分割: 例」で作成)を表領域omf_ts1
に移動します。
ALTER TABLE print_media_part MOVE PARTITION p2b TABLESPACE omf_ts1;
表パーティション名の変更: 例
次の文は、sh.sales
表のパーティション名を変更します。
ALTER TABLE sales RENAME PARTITION sales_q4_2003 TO sales_currentq;
表パーティションの切捨て: 例
次の文は、「LOB列のあるパーティション表の例」で作成したprint_media_demo
表を使用します。p1
パーティション内のデータがすべて削除され、解放された領域の割当てが解除されます。
ALTER TABLE print_media_demo TRUNCATE PARTITION p1 DROP STORAGE;
グローバル索引の更新: 例
次の文は、サンプル表sh.sales
のパーティションsales_q1_2000
を分割し、定義されているグローバル索引を更新します。
ALTER TABLE sales SPLIT PARTITION sales_q1_2000 AT (TO_DATE('16-FEB-2000','DD-MON-YYYY')) INTO (PARTITION q1a_2000, PARTITION q1b_2000) UPDATE GLOBAL INDEXES;
パーティション索引の更新: 例
次の文は、サンプル表sh.costs
のパーティションcosts_Q4_2003
を分割し、定義されているローカル索引を更新します。使用される表領域は、「基本的な表領域の作成: 例」で作成されたものです。
CREATE INDEX cost_ix ON costs(channel_id) LOCAL; ALTER TABLE costs SPLIT PARTITION costs_q4_2003 at (TO_DATE('01-Nov-2003','dd-mon-yyyy')) INTO (PARTITION c_p1, PARTITION c_p2) UPDATE INDEXES (cost_ix (PARTITION c_p1 tablespace tbs_02, PARTITION c_p2 tablespace tbs_03));
オブジェクト識別子の指定: 例
次の文は、オブジェクト型、主キーに基づくオブジェクト識別子に対応するオブジェクト表、およびユーザー定義REF
列を持つ表を作成します。
CREATE TYPE emp_t AS OBJECT (empno NUMBER, address CHAR(30)); CREATE TABLE emp OF emp_t ( empno PRIMARY KEY) OBJECT IDENTIFIER IS PRIMARY KEY; CREATE TABLE dept (dno NUMBER, mgr_ref REF emp_t SCOPE is emp);
次の文は、emp
表を参照する制約およびユーザー定義REF
列を追加します。
ALTER TABLE dept ADD CONSTRAINT mgr_cons FOREIGN KEY (mgr_ref) REFERENCES emp; ALTER TABLE dept ADD sr_mgr REF emp_t REFERENCES emp;
表の列の追加: 例
次の文は、NUMBER
データ型の列duty_pct
、サイズが3のVARCHAR2
データ型の列visa_needed
およびCHECK
整合性制約をcountries
表に追加します。
ALTER TABLE countries ADD (duty_pct NUMBER(2,2) CHECK (duty_pct < 10.5), visa_needed VARCHAR2(3));
仮想表の列の追加: 例
次の文は、hr.employees
表のコピーにincome
という列(給与と歩合の合計)を追加します。給与と歩合はどちらもNUMBER
型の列であるため、文の中でデータ型が指定されていなくても、仮想列はNUMBER
型の列として作成されます。
CREATE TABLE emp2 AS SELECT * FROM employees; ALTER TABLE emp2 ADD (income AS (salary + (salary*commission_pct)));
表の列の変更: 例
次の文は、duty_pct
列のサイズを増大させます。
ALTER TABLE countries MODIFY (duty_pct NUMBER(3,2));
MODIFY
句には列の定義が1つのため、定義を囲むカッコは任意指定です。
次の文は、employees
表のPCTFREE
パラメータとPCTUSED
パラメータの値を、それぞれ30と60に変更します。
ALTER TABLE employees PCTFREE 30 PCTUSED 60;
表の記憶域属性の変更
次の文は、既存のJOBS
表を使用して、JOBS_TEMP
という名前の表を作成します。
CREATE TABLE JOBS_TEMP AS SELECT * FROM HR.JOBS;
次の文は、USER_TABLES
表で記憶域パラメータを問い合せます。
SELECT initial_extent,
next_extent,
min_extents,
max_extents,
pct_increase,
blocks,
sample_size
FROM user_tables
WHERE table_name = 'JOBS_TEMP';
INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE BLOCKS SAMPLE_SIZE
-------------- ----------- ----------- ----------- ------------ ---------- -----------
65536 1048576 1 2147483645 1 19
次の文は、新しい記憶域パラメータを使用してJOBS_TEMP
表を変更します。
ALTER TABLE JOBS_TEMP MOVE
STORAGE ( INITIAL 20K
NEXT 40K
MINEXTENTS 2
MAXEXTENTS 20
PCTINCREASE 0 )
TABLESPACE USERS;
次の文は、USER_TABLES
表で新しい記憶域パラメータを問い合せます。
SELECT initial_extent,
next_extent,
min_extents,
max_extents,
pct_increase,
blocks,
sample_size
FROM user_tables
WHERE table_name = 'JOBS_TEMP';
INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE BLOCKS SAMPLE_SIZE
-------------- ----------- ----------- ----------- ------------ ---------- -----------
65536 40960 1 2147483645 1 19
表の列の追加、変更、名前変更および削除: 例
次の文は、データを操作するために新しい表を作成して、新しく作成された表に情報を表示します。
CREATE TABLE JOBS_Temp AS SELECT * FROM HR.JOBS; SELECT * FROM JOBS_Temp WHERE MAX_SALARY > 30000; JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY ---------- ----------------------------------- ---------- ---------- AD_PRES President 20080 40000
次の文は、既存の列定義を変更します。
ALTER TABLE JOBS_Temp MODIFY(JOB_TITLE VARCHAR2(100));
次の文は、表に2つの新しい列を追加します。
ALTER TABLE JOBS_Temp ADD (BONUS NUMBER (7,2), COMM NUMBER (5,2), DUMMY NUMBER(2));
次の文は、新しく追加された列を表示します。
SELECT JOB_ID, BONUS, COMM, DUMMY FROM JOBS_Temp WHERE MAX_SALARY > 20000; JOB_ID BONUS COMM DUMMY ---------- ---------- ---------- ---------- AD_PRES AD_VP SA_MAN
次の文は、既存の列の名前を変更し、変更された列を表示します。
ALTER TABLE JOBS_Temp RENAME COLUMN COMM TO COMMISSION; SELECT JOB_ID, COMMISSION FROM JOBS_Temp WHERE MAX_SALARY > 20000; JOB_ID COMMISSION ---------- ---------- AD_PRES AD_VP SA_MAN
次の文は、表から単一の列を削除します。
ALTER TABLE JOBS_Temp DROP COLUMN DUMMY;
次の文は、表から複数の列を削除します。
ALTER TABLE JOBS_Temp DROP (BONUS, COMMISSION);
データの暗号化: 例
次の文は、暗号化アルゴリズムAES256
を使用して、hr.employees
表のsalary列を暗号化します。前述の「セマンティクス」で説明したように、まず、透過的データ暗号化を有効にする必要があります。
ALTER TABLE employees MODIFY (salary ENCRYPT USING 'AES256' 'NOMAC');
次の文は、デフォルトの暗号化アルゴリズムAES192
を使用して、暗号化された新しい列online_acct_pw
をoe.customers
表に追加します。NO
SALT
を指定すると、Bツリー索引をこの列に対して作成できるようになります。
ALTER TABLE customers ADD (online_acct_pw VARCHAR2(8) ENCRYPT 'NOMAC' NO SALT);
次の例は、customer.online_acct_pw列を復号化します。
ALTER TABLE customers MODIFY (online_acct_pw DECRYPT);
エクステントの割当て: 例
次の文は、employees
表に5KBのエクステントを割り当て、そのエクステントをインスタンス4が使用できるようにします。
ALTER TABLE employees ALLOCATE EXTENT (SIZE 5K INSTANCE 4);
この文には、DATAFILE
パラメータが指定されていないため、エクステントは表が入っている表領域に属するデータファイルの1つに割り当てられます。
デフォルト列値の指定: 例
次の文は、product_information
表のmin_price
列のデフォルト値を10に変更します。
ALTER TABLE product_information MODIFY (min_price DEFAULT 10);
続いてmin_price
列に値を指定せずに、product_information
表に新しい行を追加する場合、min_price
列の値は自動的に10(ゼロ)になります。
INSERT INTO product_information (product_id, product_name, list_price) VALUES (300, 'left-handed mouse', 40.50); SELECT product_id, product_name, list_price, min_price FROM product_information WHERE product_id = 300; PRODUCT_ID PRODUCT_NAME LIST_PRICE MIN_PRICE ---------- -------------------- ---------- ---------- 300 left-handed mouse 40.5 10
以前に指定したデフォルト値を中止して、新しく追加する行にその値が自動的に挿入されないようにする場合、次の文に示すように、デフォルト値をNULL
に置き換えます。
ALTER TABLE product_information MODIFY (min_price DEFAULT NULL);
MODIFY
句で指定する必要があるのは、列名と、定義のうち変更される部分のみです(列の定義をすべて指定する必要はありません)。この文は、既存の行の既存の値には影響しません。
次の例では、DEFAULT
ON
NULL
で定義した列を表に追加します。DEFAULT
の列値には、順序疑似列NEXTVAL
が含まれます。
次に示すように、順序s1
と表t1
を作成します。
CREATE SEQUENCE s1 START WITH 1; CREATE TABLE t1 (name VARCHAR2(10)); INSERT INTO t1 VALUES('Kevin'); INSERT INTO t1 VALUES('Julia'); INSERT INTO t1 VALUES('Ryan');
列id
を追加します。この列のデフォルトは、s1
.NEXTVAL
に設定されます。id
のデフォルトの列値は、表内に既存の各行に割り当てられます。s1
.NEXTVAL
が各行に割り当てられる順序は、非決定的になります。
ALTER TABLE t1 ADD (id NUMBER DEFAULT ON NULL s1.NEXTVAL NOT NULL); SELECT id, name FROM t1 ORDER BY id; ID NAME ---------- ---------- 1 Kevin 2 Julia 3 Ryan
それ以降に新しい行を表に追加して、id
列にNULL値を指定すると、DEFAULT
ON
NULL
式のs1
.NEXTVAL
が挿入されます。
INSERT INTO t1(id, name) VALUES(NULL, 'Sean'); SELECT id, name FROM t1 ORDER BY id; ID NAME ---------- ---------- 1 Kevin 2 Julia 3 Ryan 4 Sean
XMLType表への制約の追加: 例
次の例では、xwarehouses
表(「XMLTypeの例」で作成)に主キー制約を追加します。
ALTER TABLE xwarehouses ADD (PRIMARY KEY(XMLDATA."WarehouseID"));
この疑似列の詳細は、「XMLDATA疑似列」を参照してください。
制約名の変更: 例
次の文は、サンプル表oe.customers
の制約名をcust_fname_nn
からcust_firstname_nn
に変更します。
ALTER TABLE customers RENAME CONSTRAINT cust_fname_nn TO cust_firstname_nn;
制約の削除: 例
次の文は、departments
表の主キーを削除します。
ALTER TABLE departments DROP PRIMARY KEY CASCADE;
PRIMARY
KEY
制約の名前がpk_dept
であることがわかっている場合は、次のように指定しても削除できます。
ALTER TABLE departments DROP CONSTRAINT pk_dept CASCADE;
CASCADE
句によって、主キーを参照するすべての外部キーが削除されます。
次の文は、employees
表のemail
列の一意キーを削除します。
ALTER TABLE employees DROP UNIQUE (email);
この文のDROP
句ではCASCADE
句を省略します。CASCADEオプションを省略することによって、一意キーを参照する外部キーがある場合、その一意キーは削除されません。
LOB列: 例
次の文は、CLOB
列であるresume
をemployee
表に追加し、この新しい列のLOB記憶特性を指定します。
ALTER TABLE employees ADD (resume CLOB) LOB (resume) STORE AS resume_seg (TABLESPACE example);
次の文は、キャッシュを使用できるようにLOB列のresume
を変更します。
ALTER TABLE employees MODIFY LOB (resume) (CACHE);
次の文は、SecureFiles CLOB
column resume
to the employee
表に追加し、この新しい列のLOB記憶特性を指定します。SecureFiles LOBを格納する表領域に対しては、自動セグメント領域管理が行われている必要があります。したがって、この例のLOBデータは、auto_seg_ts
表領域(「表領域に対するセグメント領域管理の指定: 例」で作成)に格納されます。
ALTER TABLE employees ADD (resume CLOB) LOB (resume) STORE AS SECUREFILE resume_seg (TABLESPACE auto_seg_ts);
次の文は、LOB列のresume
をキャッシュを使用しないように変更します。
ALTER TABLE employees MODIFY LOB (resume) (NOCACHE);
ネストした表: 例
次の文は、ネストした表の列skills
をemployee
表に追加します。
ALTER TABLE employees ADD (skills skill_table_type) NESTED TABLE skills STORE AS nested_skill_table;
また、ネストした表の記憶特性も変更できます。変更する場合、nested_table_col_properties
に指定した記憶表の名前を使用してください。記憶表では、問合せまたはDML文を実行することはできません。記憶表は、ネストした表の列の記憶特性を変更するためにのみ使用します。
次の文は、ネストした表の列client
と記憶表client_tab
を使用して、表vet_service
を作成します。ネストした表client_tab
を変更して制約を指定します。
CREATE TYPE pet_t AS OBJECT (pet_id NUMBER, pet_name VARCHAR2(10), pet_dob DATE); / CREATE TYPE pet AS TABLE OF pet_t; / CREATE TABLE vet_service (vet_name VARCHAR2(30), client pet) NESTED TABLE client STORE AS client_tab; ALTER TABLE client_tab ADD UNIQUE (pet_id);
次の文は、REF
値のネストした表用の記憶表を変更して、REF
の範囲が限定されることを指定します。
CREATE TYPE emp_t AS OBJECT (eno number, ename char(31)); CREATE TYPE emps_t AS TABLE OF REF emp_t; CREATE TABLE emptab OF emp_t; CREATE TABLE dept (dno NUMBER, employees emps_t) NESTED TABLE employees STORE AS deptemps; ALTER TABLE deptemps ADD (SCOPE FOR (COLUMN_VALUE) IS emptab);
同様に、次の文は、REF
をROWIDとともに格納することを指定します。
ALTER TABLE deptemps ADD (REF(column_value) WITH ROWID);
これらのALTER
TABLE
文を正確に実行するためには、記憶表deptemps
が空である必要があります。また、ネストした表は、スカラー値(REF
値)の表として定義されるため、Oracle Databaseは、暗黙的に列名COLUMN_VALUE
を記憶表に設定します。
関連項目:
-
ネストした表の記憶域の詳細は、「CREATE TABLE」を参照してください。
-
ネストした表の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。
REF列: 例
次の文は、オブジェクト型dept_t
を作成し、表staff
を作成します。
CREATE TYPE dept_t AS OBJECT (deptno NUMBER, dname VARCHAR2(20)); / CREATE TABLE staff (name VARCHAR2(100), salary NUMBER, dept REF dept_t);
オブジェクト表offices
を次のように作成します。
CREATE TABLE offices OF dept_t;
dept
列は、任意の表に格納されたdept_t
のオブジェクトに参照を格納できます。次のようにdept
列に有効範囲制約を追加することによって、departments
表に格納されたオブジェクトのみが参照されるように制限できます。
ALTER TABLE staff ADD (SCOPE FOR (dept) IS offices);
前述のALTER
TABLE
文は、staff
表が空である場合のみ正常に実行されます。
次の文は、staff
のdept
列にREF
値を格納する際、ROWIDも同時に格納します。
ALTER TABLE staff ADD (REF(dept) WITH ROWID);
ANYDATA列のアンパック記憶域: 例
この例では、ANYDATA
の列を含む表を作成し、アンパック記憶域を使用してOPAQUEデータ型をANYDATA
の列に格納してから、そのデータ型を問い合せます。この例では、データベースにユーザーhr
として接続していると仮定しています。
表t1
を作成します。この表は、NUMBER
の列n
と、ANYDATA
の列x
を格納します。
CREATE TABLE t1 (n NUMBER, x ANYDATA);
CLOB
属性を含む、オブジェクト・タイプclob_typ
を作成します。
CREATE OR REPLACE TYPE clob_typ AS OBJECT (c clob); /
表t1
のANYDATA
の列x
に含まれるOPAQUEデータ型のXMLType
とclob_typ
のアンパック記憶域を有効にします。
ALTER TABLE t1 MODIFY OPAQUE TYPE x STORE (XMLType, clob_typ) UNPACKED;
XMLType
オブジェクトとclob_typ
オブジェクトを、表t1
に挿入します。これらの型は、アンパック記憶域を使用するようになります。
INSERT INTO t1 VALUES(1, anydata.convertobject(XMLType('<Test>This is test XML</Test>'))); INSERT INTO t1 VALUES(2, anydata.convertobject(clob_typ(TO_CLOB('This is a test CLOB'))));
表t1
を問い合せて、ANYDATA
の列x
に格納されたタイプの名前を確認します。
SELECT t1.*, anydata.getTypeName(t1.x) typename FROM t1; N X() TYPENAME ----- -------------------- -------------------- 1 ANYDATA() SYS.XMLTYPE 2 ANYDATA() HR.CLOB_TYP
XMLType
データ型とclob_typ
データ型に格納された値を問い合せることができる、ファンクションを作成します。
CREATE FUNCTION get_xmltype (ad IN ANYDATA) RETURN VARCHAR2 AS rtn_val PLS_INTEGER; my_xmltype XMLType; string_val VARCHAR2(30); BEGIN rtn_val := ad.getObject(my_xmltype); string_val := my_xmltype.getstringval(); return (string_val); END; / CREATE FUNCTION get_clob_typ (ad IN ANYDATA) RETURN VARCHAR2 AS rtn_val PLS_INTEGER; my_clob_typ clob_typ; string_val VARCHAR2(30); BEGIN rtn_val := ad.getObject(my_clob_typ); string_val := (my_clob_typ.c); return (string_val); END; /
表t1
を問い合せて、ANYDATA
の列x
の各データ型に格納された値を確認します。
SELECT t1.*, anydata.getTypeName(t1.x) typename, CASE WHEN anydata.gettypename(t1.x) = 'SYS.XMLTYPE' THEN get_xmltype(t1.x) WHEN anydata.gettypename(t1.x) = 'HR.CLOB_TYP' THEN get_clob_typ(t1.x) END string_value FROM t1; N X() TYPENAME STRING_VALUE ----- -------------------- -------------------- ------------------------------ 1 ANYDATA() SYS.XMLTYPE <Test>This is test XML</Test> 2 ANYDATA() HR.CLOB_TYP This is a test CLOB
その他の例
ALTER
TABLE
文を使用して整合性制約を定義する例は、「constraint」を参照してください。
表の記憶域パラメータの変更例は、「storage_clause」を参照してください。