用途
ALTER
TABLE
文を使用すると、非パーティション表、パーティション表、表パーティションおよび表サブパーティションの定義を変更できます。オブジェクト表またはオブジェクト列を含むリレーショナル表の場合は、ALTER
TABLE
を使用して型が変更された後に、表を参照する型の最新の定義に変換します。
注意: マテリアライズド・ビュー・ログ表の操作では、可能な場合は常に、ALTER TABLE 文ではなくALTER MATERIALIZED VIEW LOG 文を使用することをお薦めします。 |
関連項目:
|
前提条件
表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、その表に対する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
句を使用する場合、領域を確保する表領域に領域割当て制限が必要です。
パーティション化操作が子の参照パーティション表にカスケードする場合、子の参照パーティション表では権限は必要ありません。
制約およびトリガーにおけるその他の前提条件 一意キー制約または主キー制約を有効にする場合は、表に索引を作成するための権限が必要です。Oracle Databaseでは、表を含むスキーマにおいて、一意キーまたは主キーの列に索引を作成するため、この権限が必要になります。
トリガーを使用可能または使用禁止にする場合、トリガーが自分のスキーマ内にある必要があります。自分のスキーマにない場合は、ALTER
ANY
TRIGGER
システム権限が必要です。
オブジェクト型を使用する場合のその他の前提条件 表を変更するときに列定義でオブジェクト型を使用する場合、そのオブジェクトが、変更する表と同じスキーマに属している必要があります。または、EXECUTE
ANY
TYPE
システム権限またはそのオブジェクト型に対するEXECUTE
オブジェクト権限が必要です。
フラッシュバック・データ・アーカイブ操作におけるその他の前提条件 flashback_archive_clause
を使用して表の履歴追跡を有効にするには、履歴データが含まれるフラッシュバック・データ・アーカイブに対するFLASHBACK
ARCHIVE
オブジェクト権限が必要です。flashback_archive_clause
を使用して表の履歴追跡を無効にするには、FLASHBACK
ARCHIVE
ADMINSTER
システム権限を持っているか、またはSYSDBA
としてログインしている必要があります。
構文
alter_table::=
注意: table の後に句を指定する必要があります。必須の句はありませんが、1つ以上の句を指定する必要があります。
|
ALTER TABLE構文のグループは、次のとおりです。
各句の後には、そのコンポーネントの副次句の参照先が記載されています。
(physical_attributes_clause::=、logging_clause::=、table_compression ::=、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::=、alter_iot_clauses::=、alter_XMLSchema_clause::=を参照)
(storage_clause::=を参照)
supplemental_table_logging ::=
supplemental_log_grp_clause::=
supplemental_id_key_clause::=
(size_clause::=を参照)
(size_clause::=を参照)
(column_properties::=を参照)
parallel_clause::=
(alter_overflow_clause ::=、alter_mapping_table_clauses ::=を参照)
mapping_table_clauses::=
key_compression::=
index_org_overflow_clause::=
(segment_attributes_clause::=を参照)
partition_extended_name::=
subpartition_extended_name::=
segment_attributes_clause::=
(physical_attributes_clause ::=、logging_clause::=を参照)
(segment_attributes_clause::=、allocate_extent_clause ::=、shrink_clause::=、deallocate_unused_clause::=を参照)
(segment_attributes_clause::=を参照)
alter_mapping_table_clauses ::=
(allocate_extent_clause ::=、deallocate_unused_clause ::=を参照)
(add_column_clause ::=、modify_column_clauses::=、drop_column_clause ::=、rename_column_clause ::=、modify_collection_retrieval ::=、modify_LOB_storage_clause::=、alter_varray_col_properties::=、encryption_spec::=を参照)
(column_definition::=、column_properties::=を参照)
(encryption_spec::=、constraint::=のinline_constraint
およびinline_ref_constraint
を参照)
(encryption_spec::=、constraint::=のinline_constraint
、LOB_storage_clause::=を参照)
encryption_spec::=
modify_collection_retrieval ::=
(out_of_line_constraint::=, out_of_line_ref_constraint::=, constraint_state::=, drop_constraint_clause::=)
substitutable_column_clause::=
nested_table_col_properties::=
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::=、index_org_table_clause ::=、external_data_properties::=を参照)
deferred_segment_creation::=
(substitutable_column_clause::=、varray_storage_clause::=を参照)
(LOB_parameters::=を参照)
(LOB_storage_parameters::=を参照)
LOB_storage_parameters::=
(LOB_parameters::=、storage_clause::=を参照)
LOB_parameters::=
(LOB_retention_clause::=、LOB_deduplicate_clause::=、LOB_compression_clause::=、encryption_spec::=、logging_clause::=を参照)
modify_LOB_parameters::=
(storage_clause::=、LOB_retention_clause::=、LOB_compression_clause::=、encryption_spec::=、logging_clause::=、allocate_extent_clause ::=、shrink_clause::=、deallocate_unused_clause::=を参照)
alter_varray_col_properties::=
(LOB_storage_clause::=、varray_col_properties::=、LOB_partitioning_storage::=を参照)
LOB_partitioning_storage::=
XMLType_storage::=
XMLSchema_spec::=
alter_XMLSchema_clause::=
(add_column_clause ::=、modify_column_clauses::=、drop_column_clause ::=、drop_constraint_clause::=、parallel_clause::=を参照)
external_data_properties::=
(modify_table_default_attrs ::=、alter_interval_partitioning::=、set_subpartition_template ::=、modify_table_partition::=、modify_table_subpartition::=、move_table_partition::=、move_table_subpartition::=、add_table_partition::=、coalesce_table_partition::=、coalesce_table_subpartition::=、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::=、segment_attributes_clause::=、table_compression ::=、key_compression::=、alter_overflow_clause ::=、LOB_parameters::=を参照)
alter_interval_partitioning::=
(range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=を参照)
(modify_range_partition::=、modify_hash_partition::=、modify_list_partition::=を参照)
(partition_extended_name::=、partition_attributes::=、add_range_subpartition ::=、add_hash_subpartition ::=、add_list_subpartition::=、update_index_clauses::=、parallel_clause::=、alter_mapping_table_clauses ::=を参照)
(partition_extended_name::=、partition_attributes::=、alter_mapping_table_clauses ::=を参照)
modify_list_partition::=
(partition_extended_name::=、partition_attributes::=、add_range_subpartition ::=、add_list_subpartition::=、add_hash_subpartition ::=を参照)
(subpartition_extended_name::=、allocate_extent_clause ::=、deallocate_unused_clause::=、shrink_clause::=、modify_LOB_parameters::=を参照)
(partition_extended_name::=、table_partition_description::=、update_index_clauses::=、parallel_clause::=を参照)
(subpartition_extended_name::=, partitioning_storage_clause::=, update_index_clauses::=, parallel_clause::=)
(add_range_partition_clause::=、add_hash_partition_clause ::=、add_list_partition_clause ::=、add_system_partition_clause::=、dependent_tables_clause:=を参照)
(range_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=、update_index_clauses::=を参照)
(partitioning_storage_clause::=、update_index_clauses::=、parallel_clause::=を参照)
(list_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=、update_index_clauses::=を参照)
add_system_partition_clause::=
(table_partition_description::=、update_index_clauses::=を参照)
(range_subpartition_desc::=、update_index_clauses::=、parallel_clause::=を参照)
(individual_hash_subparts::=, dependent_tables_clause:=, update_index_clauses::=, parallel_clause::=)
(list_subpartition_desc::=、update_index_clauses::=を参照)
(partition_spec::=を参照)
(update_index_clauses::=、parallel_clause::=を参照)
coalesce_table_subpartition::=
(update_index_clauses::=、parallel_clause::=を参照)
(partition_extended_name::=、update_index_clauses::=、parallel_clause::=を参照)
(subpartition_extended_name::=、update_index_clauses::=、parallel_clause::=を参照)
(partition_extended_name::=、subpartition_extended_name::=を参照)
(partition_extended_name::=、subpartition_extended_name::=、update_index_clauses::=、parallel_clause::=を参照)
(partition_extended_name::=、range_partition_desc::=、list_partition_desc::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=を参照)
split_nested_table_part::=
nested_table_partition_spec::=
(subpartition_extended_name::=、range_subpartition_desc::=、list_subpartition_desc::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=を参照)
(partition_spec::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=を参照)
(range_subpartition_desc::=、list_subpartition_desc::=、update_index_clauses::=、parallel_clause::=を参照)
exchange_partition_subpart ::=
(partition_extended_name::=、subpartition_extended_name::=、exceptions_clause::=、update_index_clauses::=、parallel_clause::=を参照)
range_values_clause::=
list_values_clause::=
table_partition_description::=
(deferred_segment_creation::=、segment_attributes_clause::=、table_compression ::=、key_compression::=、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::=、partitioning_storage_clause::=を参照)
list_subpartition_desc::=
(list_values_clause::=、partitioning_storage_clause::=を参照)
individual_hash_subparts::=
hash_subparts_by_quantity::=
partitioning_storage_clause::=
(table_compression ::=、LOB_partitioning_storage::=を参照)
LOB_partitioning_storage::=
partition_attributes::=
(physical_attributes_clause::=、logging_clause::=、allocate_extent_clause ::=、deallocate_unused_clause::=、shrink_clause::=、table_compression ::=、modify_LOB_parameters::=を参照)
partition_spec::=
(table_partition_description::=を参照)
(update_global_index_clause ::=、update_all_indexes_clause::=を参照)
update_global_index_clause ::=
(update_index_partition::=、update_index_subpartition::=を参照)
update_index_partition::=
(index_partition_description::=、index_subpartition_clause::=を参照)
update_index_subpartition::=
index_partition_description::=
(segment_attributes_clause::=、key_compression::=を参照)
index_subpartition_clause::=
parallel_clause ::=
(segment_attributes_clause::=、table_compression ::=、index_org_table_clause ::=、LOB_storage_clause::=、varray_col_properties::=を参照)
(using_index_clause::=、exceptions_clause::=を参照)
(create_index::=、index_properties::=を参照)
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::=、key_compression::=を参照。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
の指定。
外部表の変更の制限事項: 外部表の列を追加、削除または変更できます。ただし、外部表に対して次のことはできません。
LONG
、LOBまたはオブジェクト型の列の追加、または外部表の列のデータ型をこれらのデータ型のいずれかに変換。
外部表への制約の追加。
外部表の記憶域パラメータの変更。
logging_clause
の指定。
MOVE
の指定。
alter_table_properties
alter_table_clauses
を使用すると、データベースの表を変更できます。
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
では、後続のALTER
TABLE
... MOVE
およびALTER
TABLE
... SPLIT
操作のログを記録するかどうかを指定します。
modify_table_default_attrs
句とともにこの句を使用した場合、パーティション表のロギング属性が影響を受けます。
関連項目:
|
table_compression
句は、ヒープ構成表に対してのみ有効です。この句を使用すると、ディスクおよびメモリーの使用量を削減するために、データ・セグメントを圧縮するかどうかを指定できます。この句のセマンティクスの詳細および表の圧縮を使用したオブジェクトの作成方法の詳細は、「CREATE
TABLE
」の「table_compression」を参照してください。
注意: 初めて、圧縮データが追加されるように表を変更する場合は、表のすべてのビットマップ索引およびビットマップ索引パーティションにUNUSABLE のマークを付ける必要があります。 |
関連項目: 表の圧縮の使用例は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
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
を使用すると、表、パーティション、サブパーティション、オーバーフロー・データ・セグメント、LOBデータ・セグメントまたはLOB索引に新しいエクステントを明示的に割り当てることができます。
表のエクステントの割当ての制限事項: 一時表、レンジ・パーティション表またはコンポジット・パーティション表にエクステントを割り当てることはできません。
deallocate_unused_clause
を使用すると、表、パーティション、サブパーティション、オーバーフロー・データ・セグメント、LOBデータ・セグメントまたはLOB索引の最後にある未使用領域の割当てを明示的に解除できます。解放された領域は、表領域の他のセグメントから利用できます。
shrink_clauseを使用すると、表、索引構成表またはそのオーバーフロー・セグメント、索引、パーティション、サブパーティション、LOBセグメント、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログの領域を手動で縮小できます。この句は、自動セグメント管理を使用した表領域のセグメントに対してのみ有効です。デフォルトでは、セグメントが縮小されて最高水位標が調整され、再生領域がすぐに解放されます。
セグメントの縮小では、行移動が必要です。したがって、この句を指定する前に、縮小するオブジェクトの行移動を使用可能にする必要があります。また、アプリケーションでROWIDに基づいたトリガーを使用している場合、この句を発行する前にこのトリガーを使用禁止にする必要があります。
注意: shrink_clause を指定する前に、索引構成表に対して行の移動を有効にしないでください。索引構成表のROWID は、その主キーであり、変更できません。このため、そのような表に対して行の移動は関係なく、有効でもありません。 |
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
を指定しても、この句では索引構成表のマッピング表を縮小できません。
この句は、圧縮表には指定できません。
ON
COMMIT
マテリアライズド・ビューのマスター表は縮小できません。ROWIDマテリアライズド・ビューは、縮小操作の実行後に再構築する必要があります。
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
が意味を持つのは、オブジェクト表や、オブジェクト列を持つリレーショナル表に対して使用する場合です。ターゲットとなる表のメタデータが、参照される型それぞれの最新バージョンに準拠するように変換されます。表がすでに有効なものである場合は、表のメタデータは変更されません。
オブジェクト表およびオブジェクト列の更新の制限事項: この句の中では、object_type_col_properties
をcolumn_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
列を参照します。
関連項目:
|
records_per_block_clause
を使用すると、1ブロックに格納できるレコード数を制限するかどうかを指定できます。この句によって、この後、表に作成されるビットマップ索引はできるだけ縮小されます。
ブロック内のレコードの制限事項: record_per_block_clause
には、次の制限事項があります。
表にすでにビットマップ索引が定義されている場合は、MINIMIZE
またはNOMINIMIZE
のいずれも指定できません。まず、ビットマップ索引を削除する必要があります。
この句は、索引構成表またはネストした表に対して指定できません。
MINIMIZE MINIMIZE
を指定すると、表の各ブロックの最大レコード数を計算し、ブロックに含まれるレコード数がその数を超えないように挿入操作を制限できます。
MINIMIZE
を指定する前に、表にデータのサンプル・セットを定義しておくことをお薦めします。表の圧縮を使用している場合(「table_compression」を参照)、圧縮データのサンプル・セットは、すでに表に存在している必要があります。
MINIMIZEの制限事項: MINIMIZE
は、空の表に対して指定できません。
NOMINIMIZE NOMINIMIZE
を指定すると、MINIMIZE
機能が無効になります。これはデフォルトです。
親表でも行の移動が無効化されている場合を除き、参照パーティション表で行の移動を無効にすることはできません。それ以外では、この句のセマンティクスは、CREATE
TABLE
文およびALTER
TABLE
文で同じです。これらの句の詳細は、「CREATE TABLE」の「row_movement_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
句を使用すると、表の名前をnew_table_name
に変更できます。
この句を使用した場合、依存するすべてのマテリアライズド・ビューは無効になります。マテリアライズド・ビューの詳細は、「CREATE MATERIALIZED VIEW」および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
表にドメイン索引が定義されている場合、ODCIIndexAlter()メソッドがRENAME
オプション付きで起動されます。この操作によって、索引タイプ・メタデータと実表の間の対応が確立されます。
READ
ONLY
を指定すると、表を読取り専用モードに設定できます。表がREAD
ONLY
モードの場合は、表に影響するDML文またはSELECT
... FOR
UPDATE
文は発行できません。表データを変更しないDDL文は発行できます。表がREAD
ONLY
モードの場合は、表に関連する索引の操作は可能です。
READ
WRITE
を指定すると、読取り専用表を読取り/書込みモードに戻すことができます。
REKEY encryption_spec
REKEY
句を使用すると、新しい暗号化キーの生成または異なるアルゴリズム間の切替えができます。この操作は、表内のLOB列を含むすべての暗号化された列が再度暗号化された後にのみ戻されます。
alter_iot_clauses
この句を使用すると、既存の索引構成表の特性の一部を変更できます。索引構成表は主キーでデータをソートするため、主キーベースのアクセスおよび操作に最適です。CREATE TABLEのコンテキストで、index_org_table_clause
を参照してください。
この句は、table
が索引構成されている場合のみ有効です。COMPRESS
を指定すると、ブロックを再利用するために、索引構成表の主キー索引ブロックを空きブロックに結合できます(可能な場合)。この句はparallel_clause
とあわせて指定できます。
PCTTHRESHOLD integer 「CREATE
TABLE
」の「PCTTHRESHOLD integer」を参照してください。
INCLUDING column_name 「CREATE
TABLE
」の「INCLUDING column_name」を参照してください。
overflow_attributes
を使用すると、索引構成表に対して、変更するオーバーフロー・データ・セグメントの物理記憶域属性およびロギング属性を指定できます。この句に指定するパラメータの値は、オーバーフロー・データ・セグメントにのみ適用されます。
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
がローカル管理表領域にある場合、表領域のセグメント属性の中にはデータベースによって自動的に管理されるものがあるため、制限事項が追加されます。
alter_overflow_clause
を使用すると、既存の索引構成表のオーバーフロー・セグメントの定義を変更できます。
add_overflow_clause
の制限事項は、alter_overflow_clause
にも適用されます。
注意: 索引構成表に列を追加した場合、各列の最大サイズが評価され、行の最大値が計算されます。オーバーフロー・セグメントが必要で、OVERFLOW を指定していない場合は、エラーが発生しALTER TABLE 文は実行されません。このチェック機能によって、索引構成表に対する後続のDML操作が、オーバーフロー・セグメントがないために失敗することを回避できます。 |
alter_mapping_table_clauses
は、table
が索引構成されており、マッピング表を持つ場合にのみ有効です。
allocate_extent_clause allocate_extent_clause
を使用すると、新しいエクステントを索引構成表のマッピング表の終わりに割り当てることができます。この句の詳細は、「allocate_extent_clause」を参照してください。
deallocate_unused_clause deallocate_unused_clause
を指定すると、索引構成表のマッピング表の終わりにある未使用領域の割当てを解除できます。この句の詳細は、「deallocate_unused_clause」を参照してください。
マッピング表またはそのパーティションに関する他のすべての属性は、自動的に管理されます。
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
を使用すると、表に列を追加できます。
column_definition
既存の表に列を追加するときのcolumn_definition
の要素の動作は、この項で特に述べられていないかぎり、新しい表の作成時に列を追加するときの動作と同じです。詳細は、「column_definition」を参照してください。
column_definitionの制限事項 SORT
パラメータは、新しい表を作成する場合にのみ有効です。ALTER
TABLE
... ADD
文のcolumn_definitionでは、SORT
を指定できません。
列を追加すると、新しい列の各行に初期値としてNULLが設定されます。
NOT
NULL
列にDEFAULT
句を指定すると、デフォルト値はメタデータとして格納されますが、列自体にはデータは移入されません。ただし、デフォルト値が結果セットに戻されるように、新しい列を指定する後続の問合せは再書込みされます。
この最適化された動作は、以前のリリースとは異なります(以前のリリースでは、ALTER
TABLE
操作の中で、新規作成された列の各行がデフォルト値に更新され、その後で、表に対して定義されている更新トリガーが起動されていました)。このリリースでは、トリガーは起動されません(デフォルト値はメタデータとしてのみ格納されるため)。この最適化された動作には、次の制限事項があります。
表にLOB列を持つことはできません。対象となる表は、索引構成化したり、一時表またはクラスタ化された表にすることはできません。また、キュー表、オブジェクト表またはマテリアライズド・ビューのコンテナ表にすることもできません。
表が仮想プライベート・データベース(VPD)ポリシーを持つ場合、ALTER
TABLE
... ADD
文を発行するユーザーにEXEMPT
ACCESS
POLICY
システム権限がないかぎり、最適化された動作は有効ではありません。
追加する列は暗号化できず、オブジェクト列、ネストした表の列またはLOB列にすることはできません。
NULLであることが可能な列に対してDEFAULT
句を指定すると、デフォルト値がこのALTER
TABLE
文の一部として既存の行に追加され、表に定義された更新トリガーが起動されます。この動作は、デフォルト値が含まれるNOT
NULL
列をNULLであることが可能な列に変更した場合にも発生します。
パーティション化された索引構成表の各パーティションには、オーバーフロー・データ・セグメントを追加できます。
非パーティションおよびパーティション表にLOB列を追加できます。表、およびパーティションまたはサブパーティションのレベルでLOB記憶域を指定できます。
SELECT
*
構文を使用して、表からすべての列を選択するように指定した問合せを使用してビューを作成した場合、table
に列を追加しても、新しい列がビューに自動的に追加されることはありません。ビューに新しい列を追加する場合、CREATE
VIEW
文にOR
REPLACE
句を指定してビューを再作成してください。詳細は、「CREATE VIEW」を参照してください。
列の追加の制限事項: 列の追加には、次の制限事項があります。
クラスタ化表には、LOB列を追加できません。
LOB列をハッシュ・パーティション表に追加する場合、新しいパーティションに対して指定できる属性は、TABLESPACE
のみです。
table
に行がある場合、
DEFAULT句を指定しないかぎり、NOT
NULL
制約のある列を追加できません。
索引構成表にこの句を指定した場合、同じ文では他の句を指定できません。
DEFAULT
句を使用すると、新しい列にデフォルト値を指定したり、既存の列に新しいデフォルト値を指定することができます。後続のINSERT
文で列に値を指定しない場合、この値が自動的に割り当てられます。表に新しい列を追加する場合、デフォルト値を指定すると、その表のすべての行にデフォルトの列値が挿入されます。
デフォルト値のデータ型は、列に対して指定したデータ型と一致している必要があります。また、列には、このデフォルト値を保持できる十分な大きさが必要です。
列のデフォルト値の制限事項: 列のデフォルト値には、次の制限事項があります。
DEFAULT
式に、他の列、疑似列CURRVAL
、NEXTVAL
、LEVEL
およびROWNUM
、または完全には指定されていない日付定数に対する参照を指定することはできません。
式には、スカラー副問合せ式を除くすべての書式を使用できます。
inline_constraint
を使用すると、新しい列に制約を追加できます。
inline_ref_constraintを使用すると、新しいREF
型の列を定義できます。制約の型の構文や制限などの詳細は、「constraint」を参照してください。
virtual_column_definition
は列を追加する場合、列を作成する場合と同じセマンティクスを持ちます。
仮想列の追加の制限事項: 仮想列のSQL式にOracle Data Redactionポリシーが定義されている列が関与するときには、仮想列は追加できません。
column_properties
の句を使用すると、オブジェクト型、ネストした表、VARRAYまたはLOB列の記憶特性を指定できます。
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列、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列を追加するときに、ロギング属性をCACHE
READS
を使用して指定できます(作成時にLOB列を定義するときと同様)。この句の詳細は、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 BasicFiles LOBについては、データベースが自動UNDOモードで稼働している場合、旧バージョンのLOBを保持するには、PCTVERSION
ではなくRETENTION
を指定します。この句によって、PCTVERSION
のこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE
TABLE
」の句「LOB_retention_clause」を参照してください。
FREEPOOLS integer データベースが自動UNDOモードで稼働している場合、BasicFiles LOBに対してこの句を使用するとLOBの空きリスト・グループ数を指定できます。この句によって、FREELIST
GROUPS
のこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE
TABLE
」の句「FREEPOOLS integer」を参照してください。SecureFiles LOBの場合は、データベースはこのパラメータを無視します。
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」を参照してください。
関連項目:
|
modify_column_clauses
を使用すると、既存の列のプロパティや既存のオブジェクト型の列の代替性を変更できます。
modify_col_properties
この句を使用すると、列のプロパティを変更できます。この句で省略した列定義のオプション部分(データ型、デフォルト値、制約)は、変更されません。
datatype 列のすべての行がNULLの場合、列のデータ型を変更できます。ただし、マテリアライズド・ビューのコンテナ表にある列のデータ型を変更した場合、それに対応するマテリアライズド・ビューが無効になります。
参照整合性制約の外部キーの一部として、文で列が指定されている場合のみ、データ型を省略できます。参照整合性制約の参照キーに対応する列のデータ型が、その列に自動的に割り当てられます。
すべての行にNULL値が存在するどうかにかかわらず、文字型またはRAW型の列のサイズ、または数値型の列の精度は、いつでも大きくすることができます。変更対象のデータに変更の必要がない場合は、列のデータ型のサイズを削減できます。データベースは、既存のデータをスキャンして、新しい長さ制限を超過するデータが存在する場合はエラーを返します。
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
ファンクションを使用してください。
変更されたLOB列は、元のLONG
列で定義されたすべての制約およびトリガーを継承します。いずれかの制約を変更する場合、後続のALTER
TABLE
文で変更する必要があります。
ドメイン索引がLONG
列で定義されている場合、列をLOBに変更する前に削除する必要があります。
変更後、表のすべての列にある他のすべての索引を再構築する必要があります。
TO_CLOB
ファンクションを使用すると、NCLOB
列をCLOB
列に変換できます。
関連項目:
|
CHAR
およびVARCHAR2
列の場合、CHAR
(元々バイトで指定されていた列に対するキャラクタ・セマンティクス)またはBYTE
(元々文字で指定されていた列に対するバイト・セマンティクス)を指定すると、長さセマンティクスを変更できます。既存の列の長さセマンティクスを確認するには、ALL_TAB_COLUMNS
、USER_TAB_COLUMNS
またはDBA_TAB_COLUMNS
データ・ディクショナリ・ビューのCHAR_USED
列を問い合せます。
関連項目:
|
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
に変更できません。
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
を使用すると、不要になった列を削除したり、将来、システム・リソースへの要求が少なくなったときに削除するように列にマークを付けることによって、データベースの領域を解放できます。
ネストした表の列を削除すると、その記憶表も削除されます。
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」を参照してください。
また、 |
列への未使用のマーク付けの制限事項: SYS
が所有している列に未使用のマークを付けることはできません。
DROP句
DROP
を指定すると、表のそれぞれの行から、対象となる列に関連付けられた列記述子およびデータを削除できます。特定の列を明示的に削除した場合、対象の表でUNUSED
のマークが付いている列もすべて同時に削除されます。
列データを削除した場合、次のものが削除されます。
対象の列に定義されているすべての索引。
対象の列を参照しているすべての制約。
対象の列に統計タイプが関連付けられている場合、FORCE
オプションによって、関連付けは解除され、その統計タイプを使用して収集したすべての統計情報は削除されます。
注意: 対象の列が対象でない列の親キーである場合またはCHECK制約が対象である列と対象でない列の両方を参照している場合は、Oracle Databaseはエラーを戻し、CASCADE CONSTRAINTS 句を指定しないかぎり、列を削除しません。この句を指定した場合、対象である列を参照しているすべての制約が削除されます。 |
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
のすべての句は、COMPRESS
FOR
OLTP
を使用する表に対して有効です。詳細は、「table_compression」のセマンティクスを参照してください。
ドメイン索引が構築されている列は削除できません。
REF
列からはSCOPE
表制約およびWITH
ROWID
制約を削除できません。
次のものは、この句を使用して削除できません。
疑似列、クラスタ列またはパーティション列。パーティションが作成されたすべての表領域がオンラインで読取り/書込みモードである場合、パーティション表から非パーティション列を削除できます。
ネストした表の列、オブジェクト表の列またはSYS
が所有する表の列。
rename_column_clause
を使用すると、table
の列名を変更できます。新しい列には、table
内の他の列と同じ名前を指定しないでください。
列名を変更すると、依存オブジェクトは次のように処理されます。
名前が変更された列に依存するファンクション索引およびCHECK制約は、引き続き有効です。
依存するビュー、トリガー、ファンクション、プロシージャおよびパッケージは無効になります。これらのオブジェクトが次回アクセスされたときに、Oracle Databaseによって再有効化が試行されますが、再有効化に失敗した場合は、管理者がそのオブジェクトを変更して新しい列名を指定する必要があります。
名前を変更する列にドメイン索引を定義している場合、ODCIIndexAlterメソッドがRENAME
オプション付きで起動されます。この操作によって、索引タイプ・メタデータと実表の間の対応が確立されます。
列名の変更の制限事項: 列名の変更には、次の制限事項があります。
同じ文の中で、この句を他のcolumn_clauses
と同時に使用することはできません。
結合索引の定義に使用される列名は変更できません。列名を変更する場合、索引を削除し、列名を変更してから、索引を再作成する必要があります。
modify_collection_retrieval
句を使用すると、データベースからコレクション型の項目が取り出されたときの戻り値を変更できます。
collection_item ネストした表型またはVARRAY型の列修飾属性の名前を指定します。
RETURN AS 問合せの結果として何を戻り値とするかを指定します。
LOCATOR
は、ネストした表に対して一意のロケータを戻すことを指定します。
VALUE
は、ネストした表のコピーをそのまま戻すことを指定します。
modify_LOB_storage_clause
を使用すると、LOB_item
の物理属性を変更できます。各modify_LOB_storage_clause
に対して、LOB_item
を1つのみ指定できます。
以降の項では、modify_LOB_parametersに固有のパラメータのセマンティクスについて説明します。この項で特に指定がない場合は、残りのLOBパラメータのセマンティクスは、表の作成時と表の変更時で同じです。詳細は、この項の最後にある制限と、「CREATE
TABLE
」の句「LOB_storage_parameters」を参照してください。
注意:
|
PCTVERSION integer この句の詳細は、「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に対して指定できません。
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
制約を表に追加できます。
MODIFY
CONSTRAINT
句を使用すると、既存の制約の状態を変更できます。
CASCADE
キーワードは、外部キー制約が定義されている一意制約または主キー制約を使用禁止にする場合にのみ有効です。この場合、CASCADE
を指定することによって、一意制約または主キー制約とその依存するすべての外部キー制約を使用禁止にする必要があります。
制約の変更の制限事項: 制約の変更には、次の制限事項があります。
NOT
DEFERRABLE
制約は、INITIALLY
DEFERRED
には変更できません。
索引構成表にこの句を指定した場合、同じ文では他の句を指定できません。
参照パーティション表の外部キー列のNOT
NULL
制約は変更できません。また、参照パーティション表の参照制約のパーティション化状態は変更できません。
RENAME
CONSTRAINT
句を使用すると、table
の既存の制約名を変更できます。新しい制約名は、同一スキーマ内にあるオブジェクトの既存の制約と同じ名前にはできません。制約に依存するすべてのオブジェクトは、引き続き有効です。
drop_constraint_clause
を使用すると、データベースの整合性制約を削除できます。制約の適用を中止し、データ・ディクショナリから制約が削除されます。各drop_constraint_clause
には、制約を1つのみ指定できますが、1つの文の中では、複数のdrop_constraint_clause
を指定できます。
制約削除の制限事項: 参照パーティション表の外部キー列のNOT
NULL
制約は削除できません。また、参照パーティション表のパーティション化参照制約は削除できません。
PRIMARY KEY PRIMARY
KEY
を指定すると、table
の主キー制約を削除できます。
UNIQUE UNIQUE
を指定すると、指定した列の一意制約を削除できます。
ビットマップ結合索引が定義されている列から主キー制約または一意制約を削除すると、索引は無効になります。ビットマップ結合索引の詳細は、「CREATE INDEX」を参照してください。
CONSTRAINT CONSTRAINT
constraint_name
を指定すると、主キー制約または一意制約以外の整合性制約を削除できます。
CASCADE CASCADE
を指定すると、削除する整合性制約に依存するその他の整合性制約もすべて削除できます。
KEEP INDEX | DROP INDEX KEEP
INDEX
またはDROP
INDEX
を指定すると、PRIMARY
KEY
またはUNIQUE
制約の適用に使用する索引を残すか削除するかを指定できます。
制約削除の制限事項: 制約の削除には、次の制限事項があります。
参照整合性制約の一部の主キー制約または一意キー制約は、外部キーを削除しないと削除できません。参照されたキーと外部キーをともに削除する場合は、CASCADE
句を使用してください。CASCADE
を省略すると、外部キーによって参照される主キー制約および一意制約は削除されません。
主キーをオブジェクト識別子(OID)として使用している表では、主キー制約は(CASCADE
句を使用しても)削除できません。
REF
列の参照整合性制約を削除した場合、REF
列の有効範囲には参照先の表が含まれたままになります。
REF
列の有効範囲は削除できません。
alter_external_table
句を使用すると、外部表の特性を変更できます。この句は、外部データには影響しません。parallel_clause
、enable_disable_clause
、external_data_properties
および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またはオブジェクト型の列は外部表に追加できません。また、外部表の列のデータ型を、これらの型に変更できません。
制約は外部表に追加できません。
外部表の記憶域パラメータは変更できません。
ここで説明する句は、パーティション表にのみ適用されます。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列を使用した表に新規セグメントを作成するパーティションのメンテナンス操作の遅延セグメント作成は、サポートされていません。セグメントは含まれる(サブ)パーティションに常に作成されます。
関連するCONTEXT
ドメイン索引が含まれる表におけるパーティション操作の詳細は、『Oracle Textリファレンス』を参照してください。
ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
modify_table_default_attrs
句を使用すると、table
の属性に対する新しいデフォルト値を指定できます。文に指定した属性のみが影響を受けます。その後に作成するパーティションおよびLOBパーティションは、パーティションまたはLOBパーティションの作成時に明示的に上書きしないかぎり、この値を継承します。既存のパーティションおよびLOBパーティションは、この句の影響を受けません。
文の中で指定した属性のみが影響を受けます。指定されたデフォルト値は、個々のパーティションまたはLOBパーティションのレベルで指定された属性で上書きされます。
FOR
partition_extended_name
は、コンポジット・パーティション表にのみ適用されます。この句は、partition_extended_name
で指定されたパーティションの属性に新しいデフォルト値を指定します。その後に作成するパーティションのサブパーティションおよびLOBパーティションは、サブパーティションまたはLOBパーティションの作成時に明示的に上書きしないかぎり、この値を継承します。既存のサブパーティションは、この句の影響を受けません。
PCTTHRESHOLD
、key_compression
およびalter_overflow_clause
は、パーティション化された索引構成表にのみ有効です。
表レベルでキー圧縮がすでに指定されている場合にかぎり、キー圧縮を指定できます。また、COMPRESS
キーワードの後にint型を指定することはできません。キー圧縮の長さは、表の作成時にのみ指定できます。
索引構成表の索引セグメントに対しては、segment_attributes
句でPCTUSED
パラメータを指定できません。
次の場合にこの句を使用します。
既存のレンジ・パーティション表を時間隔パーティションに変換する場合。データベースにより、最後のレンジ・パーティションの最大値を超えるデータの必要に応じて、指定した数値範囲または日時間隔のパーティションが自動的に作成されます。
既存の時間隔パーティション表の時間隔を変更する場合。データベースは、先に既存の時間隔パーティションをレンジ・パーティションに変換し、定義されたレンジ・パーティションの上限の値を決定します。次に、データベースにより、上限を超えたデータの必要に応じて、指定した数値範囲または日時間隔のパーティションが自動的に作成されます。
既存の時間隔パーティション表の表領域の記憶域を変更する場合。
時間隔パーティション表をレンジ・パーティション表に戻す場合。SET
INTERVAL
()
を使用して、時間隔パーティションを無効にします。データベースは、作成されるレンジ・パーティションの上限として、作成済の時間隔パーティションの上限を使用し、既存の時間隔パーティションをレンジ・パーティションに変換します。
expr
には、有効な数値または期間式を指定します。
set_subpartition_template
句は、個々の表パーティションのデフォルトのレンジ、リストまたはハッシュ・サブパーティション定義を作成するときや、既存の定義を置き換えるときに使用します。この句は、コンポジット・パーティション表に対してのみ有効です。既存のサブパーティション・テンプレートが置き換えられますが、テンプレートがまだ作成されていない場合は新規作成されます。既存のサブパーティションや、既存のローカルおよびグローバルの索引に影響が及ぶことはありません。ただし、以降のパーティション化操作(追加やマージなどの操作)には、新しいテンプレートが使用されます。
既存のサブパーティション・テンプレートを削除するには、ALTER
TABLE
table
SET
SUBPARTITION
TEMPLATE
()
を指定します。
set_subpartition_template
句は、CREATE TABLE
のsubpartition_template
句と同じセマンティクスを持ちます。詳細は、CREATE TABLEの
subpartition_template
句を参照してください。
modify_table_partition
句を使用すると、レンジ・パーティション、ハッシュ・パーティション、リスト・パーティションまたはシステム・パーティションの実際の物理属性を変更できます。そのパーティションの1つ以上のLOB項目の記憶域属性を任意に変更できます。物理属性(制限事項については後述)、ロギングおよび記憶域パラメータに対して、新しい値を指定できます。
すべてのタイプのパーティションについて、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。
パーティション化された索引構成表の場合、パーティションの変更時にマッピング表も同時に更新できます。「alter_mapping_table_clauses」を参照してください。
表パーティションの変更の制限事項: レンジ、リストおよびハッシュ表パーティションの操作に、次の制限事項が適用されます。
すべてのタイプの表パーティションについて、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
句を使用します。
パーティション化されているネストした表を含む表パーティションのpartition_attributes
を変更した場合、その変更内容は、変更した表パーティションに対応するネストした表パーティションには適用されません。ただし、ALTER
TABLE
文を使用すると、ネストした表パーティションの記憶表を直接変更できます。
特に指定がないかぎり、partition_attributes
の残りの句の動作は、パーティション表の作成時と同じです。詳細は、「CREATE
TABLE
」の「table_partitioning_clauses」を参照してください。
modify_range_partition
この句を使用すると、レンジ・パーティションの特性を変更できます。
add_range_subpartition この句が有効であるのは、レンジ-レンジ・コンポジット・パーティションに対してのみです。レンジ・サブパーティションをpartition
に追加できます。
add_hash_subpartition この句は、レンジ-ハッシュ・コンポジット・パーティションに対してのみ有効です。add_hash_subpartition
句を使用すると、ハッシュ・サブパーティションをpartition
に追加できます。Oracle Databaseは、ハッシュ・ファンクションによってpartition
の他のサブパーティションから再ハッシュされた行を、新しいサブパーティションに移入します。ロード・バランシングを最適化する場合、サブパーティションの合計数は2の累乗にする必要があります。
partitioning_storage_clause
でサブパーティションに対して指定できる句は、TABLESPACE
句のみです。TABLESPACE
を指定しなかった場合、新しいサブパーティションはpartition
のデフォルトの表領域に格納されます。
選択したパーティションに対応するローカル索引パーティションが追加されます。
追加したパーティションに対応するローカル索引パーティションにUNUSABLE
のマークが付けられます。ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。
add_list_subpartition この句は、レンジ-リストおよびリスト-リスト・コンポジット・パーティションに対してのみ有効です。リスト・サブパーティションをpartition
に追加できますが、DEFAULT
サブパーティションが未作成であることが条件です。
この操作にはlist_values_clause
が必要です。また、list_values_clause
には、partition
のその他のサブパーティションには存在していない値を指定する必要があります。ただし、他のパーティションのサブパーティションで使用されている値は指定できます。
partitioning_storage_clause
でサブパーティションに対して指定できる句は、TABLESPACE
句および表の圧縮のみです。
表のすべてのローカル索引パーティションには、同じ値リストを持つサブパーティションも追加されます。表の既存のローカル索引パーティションおよびグローバル索引パーティションは影響を受けません。
リスト・サブパーティションの追加の制限事項 パーティションにデフォルト・サブパーティションがすでに作成されている場合は、この句を指定できません。その場合、
split_list_subpartition
句を使用して、DEFAULT
パーティションを分割する必要があります。
COALESCE 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 | DROP VALUES句 これらの句は、コンポジット・パーティションを変更する場合のみ有効です。これらの句によって、表のローカル索引とグローバル索引が影響を受けることはありません。
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 操作が改善されます。 |
リスト値の追加と削除の制限事項: リスト値の追加と削除には、次の制限事項があります。
DEFAULT
リスト・パーティションに対して値を追加または値を削除することはできません。
table
にDEFAULT
パーティションが定義されている場合、デフォルト・パーティション以外に値を追加しようとすると、その値がDEFAULT
パーティションに存在しているかどうかが確認されます。 DEFAULT
パーティションにその値が存在する場合、エラーが戻されます。
modify_table_subpartition
この句は、コンポジット・パーティション表にのみ適用されます。その副次句によって、個別のレンジ、リストまたはハッシュ・サブパーティションの特性を変更できます。
shrink_clause
を使用すると、サブパーティションの各セグメントを縮小できます。この句の詳細は、「shrink_clause」を参照してください。
また、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。
ハッシュ・サブパーティションの変更の制限事項 modify_LOB_parameters
のうち、subpartition
に対して指定できるのはallocate_extent_clause
およびdeallocate_unused_clause
のみです。
ADD | DROP VALUES句 これらの句は、リスト・サブパーティションを変更する場合のみ有効です。これらの句によって、表のローカル索引とグローバル索引が影響を受けることはありません。
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句」を参照してください。
リスト・サブパーティションの変更の制限事項 modify_LOB_parameters
のうち、subpartition
に対して指定できるのは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 MAPPING
TABLE
句は、マッピング表が定義されている索引構成表のみに有効です。マッピング表は、索引構成表のパーティションとともに移動されます。マッピング表のパーティションは、移動した索引構成表のパーティションの物理属性を継承します。これは、マッピング表のパーティションの属性を変更する唯一の方法です。この句を省略した場合、マッピング表のパーティションでは、元の属性が保持されます。
対応するすべてのビットマップ索引パーティションにはUNUSABLE
のマークが付けられます。
この句の詳細は、「CREATE TABLE」の「mapping_table_clauses
」
を参照してください。
表パーティションの移動の制限事項: 表パーティションの移動には、次の制限事項があります。
partition
がハッシュ・パーティションである場合、この句にTABLESPACE
の属性以外は指定できません。
この句は、サブパーティションを含むパーティションに対して指定できません。ただし、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データ・セグメントを移動する場合、古いデータ・セグメントおよび対応する索引セグメントが削除され、新しい表領域を指定しない場合でも、新しいセグメントが作成されます。
表サブパーティションの移動の制限事項: 指定できるpartitioning_storage_clause
の句は、TABLESPACE
およびtable_compression
のみです。
add_table_partition
add_table_partition
句を使用すると、table
にハッシュ・パーティション、レンジ・パーティション、リスト・パーティションまたはシステム・パーティションを追加できます。
table
で定義されているローカル索引に、実表のパーティションと同じ名前で新しいパーティションが追加されます。索引に同じ名前のパーティションがすでに存在する場合、SYS_P
n
という形式でパーティションの名前が生成されます。
table
が索引構成されている場合、表で定義されたすべてのマッピング表およびオーバーフロー領域に、パーティションが追加されます。
table
が参照パーティション表の親表の場合は、dependent_tables_clause
を使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。
コンポジット・パーティション表の場合、table
に定義されたすべてのローカル索引に対して、同じサブパーティションを持つ新規の索引パーティションが追加されます。table
のグローバル索引が影響を受けることはありません。
add_range_partition_clause
を使用すると、新しいレンジ・パーティションをレンジ・パーティション表またはコンポジット・レンジ・パーティション表の一番上(最後の既存のパーティションの後)に追加できます。
ドメイン索引がtable
で定義されている場合、IN_PROGRESS
またはFAILED
のマークが付いていると無効になります。
レンジ・パーティションの追加の制限事項: レンジ・パーティションの追加には、次の制限事項があります。
既存の上位パーティションにある各パーティション化キーのパーティションの上限がMAXVALUE
の場合、表にパーティションを追加できません。そのかわり、split_table_partition
句を使用して、表の始めまたは中間にパーティションを追加します。
key_compression
およびOVERFLOW
句は、パーティション化された索引構成表に対してのみ有効です。パーティション表にすでにオーバーフロー・セグメントが存在する場合にかぎり、OVERFLOW
を指定できます。表レベルでキー圧縮が使用可能な場合にかぎり、キー圧縮を指定できます。
PCTUSED
パラメータは、索引構成表の索引セグメントに対して指定できません。
range_values_clause 新しいパーティションの上限を指定します。value_list
は、パーティション・キー列に対応するリテラル値を順序どおりにカンマで区切ったリストです。value_list
の値は、表内にある既存の最上位パーティションのパーティション境界より大きくする必要があります。
table_partition_description この句を使用すると、新しいパーティションに作成時の物理属性を指定できます。表にLOB列が含まれている場合、1つ以上のLOB項目にパーティション・レベルの属性を指定することもできます。
サブパーティションの定義 これらの句は、コンポジット・パーティション表に対してのみ有効です。新しいパーティションのサブパーティションを指定する場合は、range_subpartition_desc
、list_subpartition_desc
、individual_hash_subparts
またはhash_subparts_by_quantity
句を適切に使用します。この句によって、表レベルでsubpartition_template
に定義された任意のサブパーティションの設定は上書きされます。
add_hash_partition_clause
を使用すると、ハッシュ・パーティション表の一番上に新しいハッシュ・パーティションを追加できます。Oracle Databaseは、ハッシュ・ファンクションによってtable
の他のパーティションから再ハッシュされた行を、新しいパーティションに移入します。ロード・バランシングを最適化する場合、パーティションの合計数は2の累乗にする必要があります。
パーティションの名前を指定でき、パーティションが格納される表領域を指定することもできます。名前を指定しない場合は、SYS_P
n
という形式のパーティション名が割り当てられます。TABLESPACE
を指定しない場合は、新しいパーティションは表のデフォルトの表領域に格納されます。それ以外の属性は常に、表レベルのデフォルトから継承されます。
この操作によってパーティション間でデータが再ハッシュされると、対応するすべてのローカル索引パーティションにUNUSABLE
のマークが付けられます。update_index_clausesを使用し、操作中にヒープ構成表のすべての索引を更新できます。
parallel_clause
を使用すると、新しいパーティションの作成をパラレル化するかどうかを指定できます。
add_list_partition_clause
を使用すると、パーティションの新しい一連の値を使用して、table
に新しいパーティションを追加できます。新しいパーティションに作成時の物理属性を指定できます。表にLOB列が含まれている場合、1つ以上のLOB項目にパーティション・レベルの属性を指定することもできます。
リスト・パーティションの追加の制限事項 表の DEFAULT
パーティションがすでに定義されている場合は、リスト・パーティションを追加できません。その場合、split_table_partition
句を使用して、DEFAULT
パーティションを分割する必要があります。
add_system_partition_clause
この句を使用すると、パーティションをシステム・パーティション表に追加できます。表に定義されているすべてのローカル索引に、対応する索引パーティションが追加されます。
BEFORE
句によって、既存のパーティションとの関係で新しいパーティションが追加される場所を指定できます。システム・パーティションは分割できません。そのため、この句は、既存の1つのパーティションの内容を複数の新しいパーティションに分割する場合に有効です。この句を省略した場合、新しいパーティションは既存のパーティションの後に追加されます。
table_partition_description
によって、新しいパーティションのパーティション・レベルの属性を指定できます。指定しない属性の値は、表レベルの値から継承されます。
システム・パーティションの追加の制限事項: システム・パーティションを追加する場合、OVERFLOW
句は指定できません。
COALESCE
は、ハッシュ・パーティションにのみ適用されます。coalesce_table_partition
句を使用すると、最後のハッシュ・パーティションが選択され、その内容がハッシュ・ファンクションによって決定される1つ以上の残りのパーティションに分散された後、選択されたパーティションが削除されます。
選択したパーティションに対応するローカル索引パーティションが削除されます。1つ以上の吸収パーティションに対応するローカル索引パーティションにUNUSABLE
のマークが付けられます。ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用すると、操作中にすべての索引を更新できます。
表パーティションの結合の制限事項: update_all_indexes_clause
を使用してグローバル索引を更新する場合、副次句ではなくUPDATE
INDEXES
キーワードのみを指定できます。
drop_table_partition
句を使用すると、パーティション表から、partition_extended_name
で指定されるパーティションおよびそのパーティション内のデータを削除できます。データを表に残したままパーティションを削除する場合は、そのパーティションを隣接するパーティションにマージする必要があります。
table
にLOB列が存在する場合、partition
に対応するLOBデータ、LOB索引パーティションおよび(存在する場合は)サブパーティションも削除されます。
table
にパーティション化されているネストした表の列が含まれる場合は、削除される表パーティションに対応するネストした表パーティションも削除されます。
table
が索引構成されており、定義されたマッピング表を持つ場合、対応するマッピング表のパーティションも同様に削除されます。
ローカル索引パーティションおよび削除されるパーティションに対応するサブパーティションは、UNUSABLE
のマークが付いている場合でも削除されます。
update_index_clauses
を使用し、操作中にtableの索引を更新できます。update_index_clauses
とともにparallel_clause
を指定すると、削除操作ではなく、索引の更新がパラレル化されます。
レンジ・パーティションを削除し、その後、削除したパーティションに属していた行を挿入した場合、1つ上位のパーティションに行が格納されます。ただし、そのパーティションが最上位のパーティションである場合、削除したパーティションが表していた値の範囲が表に対して無効になるため、挿入は失敗します。
表パーティションの削除の制限事項: 表パーティションの削除には、次の制限事項があります。
ハッシュ・パーティション表のパーティションは削除できません。かわりに、coalesce_table_partition
句を使用してください。
table
にパーティションが1つのみ存在する場合は、そのパーティションを削除できません。かわりに表を削除します。
update_index_clausesを使用してグローバル索引を更新する場合、副次句ではなくUPDATE
INDEXES
キーワードのみを指定できます。
drop_table_subpartition
この句を使用すると、レンジ、リスト、またはハッシュ・コンポジット・パーティション表からレンジまたはリスト・サブパーティションを削除できます。削除対象のサブパーティション内の行はすべて削除されます。
ローカル索引の対応するサブパーティションは、自動的に削除されます。その他の索引サブパーティションには影響がありません。update_global_index_clause
または
update_all_indexes_clauseを指定しないかぎり、グローバル索引にはUNUSABLE
のマークが付けられます。
表サブパーティションの削除の制限事項: 表サブパーティションの削除には、次の制限事項があります。
ハッシュ・サブパーティションは削除できません。かわりに、MODIFY
PARTITION
... COALESCE
SUBPARTITION
構文を使用してください。
パーティションに存在するサブパーティションが1つのみの場合は、そのサブパーティションを削除できません。かわりに、drop_table_partition
句を使用してください。
グローバル索引を更新する場合、update_all_indexes_clause
のオプションの副次句を指定することはできません。
rename_partition_subpart
句を使用すると、表パーティションまたは表サブパーティションの名前をnew_name
に変更できます。パーティションおよびサブパーティションのどちらの場合も、new_name
は同じ表に存在するすべてのパーティションおよびサブパーティションと異なる値である必要があります。
table
が索引構成されている場合、対応する主キー索引パーティションに、既存のオーバーフロー・パーティションおよびマッピング表パーティションと同じ名前が割り当てられます。
TRUNCATE
PARTITION
を指定すると、partition_extended_name
で指定したパーティションからすべての行を削除することができ、表がコンポジット・パーティション化されている場合は、そのパーティションのサブパーティションからすべての行が削除されます。TRUNCATE
SUBPARTITION
を指定すると、1つのサブパーティションからすべての行が削除されます。table
が索引構成されている場合、対応するすべてのマッピング表のパーティションおよびオーバーフロー領域のパーティションが切り捨てられます。
切り捨てるパーティションまたはサブパーティションにデータが含まれている場合は、まず、その表の参照整合性制約を使用禁止にする必要があります。また、別の方法として、行を削除してからパーティションを切り捨てる方法もあります。
table
にLOB列が存在する場合、このパーティションのLOBデータおよびLOB索引セグメントも切り捨てられます。table
がコンポジット・パーティション化されている場合、このパーティションのサブパーティションのLOBデータおよびLOB索引セグメントは切り捨てられます。
table
にパーティション化されているネストした表が含まれる場合、親パーティションに対応するネストした表パーティションが空でないかぎり、親パーティションを切り捨てることはできません。
table
でドメイン索引が定義されている場合、索引にIN_PROGRESS
またはFAILED
のマークが付いていると無効になります。また、切り捨てられる表パーティションに対応する索引パーティションにIN_PROGRESS
のマークが付いていると無効になります。
切り捨てられるそれぞれのパーティションまたはサブパーティションでは、対応するローカル索引パーティションおよびサブパーティションも切り捨てられます。これらの索引パーティションまたはサブパーティションにUNUSABLE
のマークが付いている場合、これらは切り捨てられ、UNUSABLE
のマークはVALID
にリセットされます。
update_global_index_clauseまたはupdate_all_indexes_clauseを使用し、操作中にtable
のグローバル索引を更新できます。これらの句とともにparallel_clause
を指定すると、切捨て操作ではなく、索引の更新がパラレル化されます。
DROP STORAGE DROP
STORAGE
を指定すると、MINEXTENTS
パラメータで割り当てられた領域を除き、削除された行からすべての領域の割当てを解除できます。この領域は、後で表領域内の他のオブジェクトで使用できます。
DROP ALL STORAGE DROP
ALL
STORAGE
を指定すると、MINEXTENTS
パラメータで割り当てられた領域も含め、削除された行からすべての領域の割当てを解除できます。パーティションまたはサブパーティションのすべてのセグメント、およびその依存オブジェクトのすべてのセグメントも、割当てが解除されます。
DROP ALL STORAGEの制限事項: この句には、「遅延セグメント作成の制限事項」に示されているものと同じ制限事項があります。
注意: DROP ALL STORAGE 句は、Oracle Database 11gリリース2 (11.2.0.2)から使用可能です。 |
REUSE STORAGE REUSE
STORAGE
を指定すると、削除した行が占有していた領域をパーティションまたはサブパーティションに割り当てることができます。この領域は、そのパーティションまたはサブパーティションに対する後続の挿入および更新のためにのみ使用できます。
表のパーティションおよびサブパーティションの切捨ての制限事項: update_all_indexes_clause
を使用してグローバル索引を更新する場合、副次句ではなくUPDATE
INDEXES
キーワードのみを指定できます。
split_table_partition
句を使用すると、partition_extended_name
によって指定されるパーティションから新しいセグメント、物理属性および初期エクステントをそれぞれ含む、2つの新しいパーティションが作成されます。現行パーティションに対応付けられたセグメントは、廃棄されます。
新しいパーティションは、指定されていないすべての物理属性を現行パーティションから継承します。
注意: 一定の条件が満たされると、SPLIT PARTITION およびSPLIT SUBPARTITION 操作を最適化して処理速度を上げることができます。これらの操作の最適化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。 |
DEFAULT
リスト・パーティションを分割すると、作成される1つ目のパーティションには分割値が格納され、2つ目のパーティションにはDEFAULT
値が格納されます。
table
が索引構成表である場合は、対応するマッピング表のパーティションが分割されて、親の索引構成表のパーティションと同じ表領域に配置されます。対応するオーバーフロー領域も分割されるので、OVERFLOW
句を使用して新しいオーバーフロー領域のセグメント属性を指定できます。
table
にLOB列がある場合、LOB_storage_clause
を使用して、分割の結果生成されたLOBデータ・セグメントに対して個々のLOB記憶域属性を指定できます。現行パーティションのLOBデータおよびLOB索引セグメントが削除された後、新しい表領域を指定しなくても、各パーティションの各LOB列に新しいセグメントが作成されます。
table
にネストした表の列が含まれる場合、split_nested_table_part
句を使用して、分割の結果生成されたネストした表セグメントに対して、記憶表名およびセグメント属性を指定できます。現行パーティションのネストした表セグメントが削除された後、各パーティションのネストした表の列ごとに新しいセグメントが作成されます。この句により、親表には、複数レベルのネストした表の列のみでなく、複数のネストした表の列を含めることが可能になります。
対応するローカル索引パーティションにUNUSABLE
のマークが付いている場合でも、それらは分割されます。UNUSABLE
のマークが付けられ、ユーザーは、分割パーティションに対応するローカル索引パーティションを再構築する必要があります。新しい索引パーティションの属性は、分割されたパーティションから継承されます。新しい索引パーティションは、分割された索引パーティションのデフォルト表領域に格納されます。索引パーティションにデフォルト表領域が定義されていない場合、基礎となる新しい表のパーティションの表領域が使用されます。
AT句 AT
句は、レンジ・パーティションのみに適用されます。新しい2つのパーティションのうちの最初の方に、新しい上限(境界を含まない)を指定します。値リストは、現行パーティションの元のパーティション境界より小さく、その次に小さいパーティション(そのようなパーティションがある場合)のパーティション境界より大きい値にする必要があります。
VALUES句 VALUES
句が適用されるのは、リスト・パーティションのみです。新しい2つのパーティションのうち、最初のものに含めるパーティション値を指定します。新しいパーティションのうち、最初のものは指定のパーティション値リストを使用して作成され、2つ目のパーティションは、現行パーティションの残りのパーティション値を使用して作成されます。このため、値リストには現行パーティションのすべてのパーティション値を含めることはできません。また、現行パーティションに存在しないパーティション値も含めることはできません。
INTO句 INTO
句を使用すると、分割の結果生成された2つのパーティションを定義できます。分割の結果生成される2つのパーティションにオプションの名前および物理属性を指定しない場合でも、range_partition_desc
またはlist_partition_desc
にはPARTITION
キーワードを適切に指定する必要があります。新しいパーティション名を指定しない場合、SYS_P
n
という形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。
レンジ-ハッシュ・コンポジット・パーティション表の場合、新しいパーティションにサブパーティションを指定するとき、サブパーティションに対してTABLESPACE
および表の圧縮のみを指定できます。他のすべての属性は、現行パーティションから継承されます。新しいパーティションにサブパーティション化を指定しない場合は、表領域も現行パーティションから継承されます。
レンジ-リストおよびリスト-リスト・コンポジット・パーティション表の場合、新しいパーティションにサブパーティションを指定できません。分割パーティションのリスト・サブパーティションでは、サブパーティションの数および値リストは現行パーティションから継承されます。
新しく作成したサブパーティションに対して名前を指定しなかったすべてのコンポジット・パーティション表では、次のように名前が親パーティションから継承されます。
親パーティション内のサブパーティションがpartition_name
アンダースコア(_)subpartition_name
という形式の名前(たとえば、P1_SUBP1
)を持つ場合、新しいパーティション名に基づいて、サブパーティションの名前が生成されます(たとえば、P1A_SUB1
やP1B_SUB1
)。
親パーティション内のサブパーティションがその他の形式の名前を持つ場合、SYS_SUBP
n
という形式のサブパーティション名が生成されます。
索引にUNUSABLE
のマークが付いている場合でも、table
で定義されている各ローカル索引の対応するパーティションが分割されます。
ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。
table
が参照パーティション表の親表の場合は、dependent_tables_clause
を使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。
parallel_clause
を使用すると、表のデフォルトのパラレル属性を変更せずに、分割操作をパラレル化できます。
表パーティションの分割の制限事項: この句は、ハッシュ・パーティションに対して指定できません。
split_table_subpartition
この句を使用すると、重複しない値リストを持つ2つのサブパーティションにリスト・サブパーティションを分割できます。
注意: 一定の条件が満たされると、SPLIT PARTITION およびSPLIT SUBPARTITION 操作を最適化して処理速度を上げることができます。これらの操作の最適化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。 |
AT句 AT
句は、レンジ・サブパーティションに対してのみ有効です。新しい2つのサブパーティションのうちの1つ目に、新しく上限(この値は含まない)を指定します。値リストは、subpartition_extended_name
で指定されるサブパーティションの元のサブパーティション境界より小さく、その次に小さいサブパーティション(そのようなパーティションがある場合)のパーティション境界より大きい値にする必要があります。
VALUES句 VALUES
句が有効であるのは、リスト・サブパーティションに対してのみです。指定したサブパーティション値は、新しい2つのサブパーティションのうち最初のものに使用されます。NULL
を指定できるのは、まだ同じパーティション内の別のサブパーティションに対してNULL
が指定されていない場合です。新しいサブパーティションのうち、最初のものは指定のサブパーティション値リストを使用して作成され、2つ目のパーティションは、現行サブパーティションの残りのパーティション値を使用して作成されます。このため、値リストには現行のサブパーティションのすべてのパーティション値を含めることはできません。また、現行のサブパーティションに存在しないパーティション値も含めることはできません。
INTO句 レンジ・サブパーティションとリスト・サブパーティションのどちらに対しても、INTO
句を使用すると、分割の結果生成された2つのサブパーティションを定義できます。2つのサブパーティションにオプションの名前および属性を指定しない場合でも、range_subpartition_desc
またはlist_subpartition_desc
ではSUBPARTITION
キーワードを適切に指定する必要があります。指定しないすべての属性は、現行のサブパーティションから継承されます。
対応するローカル索引サブパーティションにUNUSABLE
のマークが付いている場合でも、それらは分割されます。新しい索引サブパーティションに名前があらかじめ指定されていないかぎり、新しい表のサブパーティションの名前が継承されます。この場合、SYS_SUBPn
という形式の新しい索引サブパーティション名が割り当てられます。新しい索引サブパーティションの物理属性は、親サブパーティションから継承されます。親サブパーティションにデフォルトのTABLESPACE
属性が定義されていない場合、対応する新しい表のサブパーティションの表領域が継承されます。
ヒープ構成表の索引が無効になります。update_index_clausesを使用し、これらの索引を更新できます。
表サブパーティションの分割の制限事項: 表サブパーティションの分割には、次の制限事項があります。
この句は、ハッシュ・サブパーティションに対して指定できません。
サブパーティションの定義で指定できるpartitioning_storage_clause
の句は、TABLESPACE
および表の圧縮のみです。
merge_table_partitions
句を使用すると、table
の2つのレンジ・パーティション、2つのリスト・パーティションまたは2つのシステム・パーティションの内容を1つの新しいパーティションにマージして、元の2つのパーティションを削除できます。この句はハッシュ・パーティションでは無効です。かわりに、coalesce_table_partition
句を使用してください。
各パーティションに、partition
を使用してパーティション名を指定するか、またはFOR
句を使用して名前なしでパーティションを指定します。FOR句の詳細は、「パーティション表と索引の参照」
を参照してください。
レンジ・パーティションの場合、マージされる2つのパーティションは、隣接している必要があります。リスト・パーティションおよびシステム・パーティションをマージする場合は、隣接している必要はありません。
2つのレンジ・パーティションをマージする場合、新しいパーティションは、元の2つのパーティションのうち、上位のパーティションのパーティション境界を継承します。
2つのリスト・パーティションをマージする場合、結果のパーティションの値リストは、マージされる2つのパーティションの値リストの集合をあわせたものです。DEFAULT
リスト・パーティションを別のリスト・パーティションとマージすると、結果のパーティションはDEFAULT
パーティションになり、DEFAULT
値が含まれます。
2つのコンポジット・レンジ・パーティションまたは2つのコンポジット・リスト・パーティション、レンジ-リストまたはリスト-リスト・コンポジット・パーティションをマージする場合、サブパーティションの定義は指定できません。サブパーティション化情報は、サブパーティション・テンプレートから取得できます。サブパーティションのテンプレートが指定されていない場合は、1つのMAXVALUE
サブパーティションがレンジ・サブパーティションから、または1つのDEFAULT
サブパーティションがリスト・サブパーティションから作成されます。
新しいパーティションに対して明示的に指定しなかった属性は、表レベルのデフォルトから継承されます。ただし、新しいパーティションに対してパーティション名を再利用すると、表レベルのデフォルト値ではなく、名前が再利用されたパーティションの値が新しいパーティションに継承されます。
選択したパーティションに対応するローカル索引パーティションは削除され、マージされたパーティションに対応するローカル索引パーティションにUNUSABLE
のマークが付けられます。ヒープ構成表のすべてのグローバル索引にも、UNUSABLE
のマークが付けられます。update_index_clausesを使用し、操作中にこれらすべての索引を更新できます。
table
が参照パーティション表の親表の場合は、dependent_tables_clause
を使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。
merge_table_subpartitions
merge_table_subpartitions
句を使用すると、table
の2つのレンジ・サブパーティションまたはリスト・サブパーティションの内容を1つの新しいサブパーティションにマージして、元の2つのサブパーティションを削除できます。この句はハッシュ・サブパーティションでは無効です。かわりに、coalesce_hash_subpartition
句を使用してください。
各サブパーティションに、subpartition
を使用してサブパーティション名を指定するか、またはFOR
句を使用して名前なしでサブパーティションを指定します。FOR句の詳細は、「パーティション表と索引の参照」
を参照してください。
マージされる2つのサブパーティションは、同じパーティションに属している必要があります。レンジ・サブパーティションである場合は、隣接している必要があります。リスト・サブパーティションである場合は、隣接している必要はありません。マージの結果生成されるサブパーティション内のデータは、マージされたサブパーティションのデータが結合されたものです。
INTO
句を指定する場合、range_subpartition_desc
またはlist_subpartition_desc
で、それぞれrange_values_clause
またはlist_values_clause
を指定することはできません。また、partitioning_storage_clause
に指定できる句は、TABLESPACE
およびtable_compression
のみです。
新しいサブパーティションに対して明示的に指定しなかった属性は、パーティション・レベルの値から継承されます。ただし、新しいサブパーティションに対してサブパーティション名を再利用すると、パーティション・レベルのデフォルト値ではなく、名前が再利用されたサブパーティションの値が新しいサブパーティションに継承されます。
対応するローカル索引のサブパーティションがマージされ、結果として生成される索引サブパーティションにはUNUSABLE
のマークが付けられます。また、ヒープ構成表のパーティション化されたグローバル索引とパーティション化されていないグローバル索引の両方に対して、UNUSABLE
のマークが付けられます。update_index_clausesを使用すると、操作中にすべての索引を更新できます。
EXCHANGE
PARTITION
句またはEXCHANGE
SUBPARTITION
句を使用すると、次のデータおよび索引セグメントを交換できます。
1つの非パーティション表と、次のいずれかを交換できます。
1つのレンジ・パーティション、リスト・パーティションまたはハッシュ・パーティション
1つのレンジ・サブパーティション、リスト・サブパーティションまたはハッシュ・サブパーティション
1つのレンジ・パーティション表とレンジ-レンジまたはリスト-レンジ・コンポジット・パーティション表パーティションのレンジ・サブパーティション
1つのハッシュ・パーティション表とレンジ-ハッシュまたはリスト-ハッシュのコンポジット・パーティション表パーティションのハッシュ・サブパーティション
1つのリスト・パーティション表とレンジ-リストまたはハッシュ-リストのコンポジット・パーティション表パーティションのリスト・サブパーティション
交換対象の表、パーティションおよびサブパーティションの構造は、パーティション・キーを含め常に同じである必要があります。リスト・パーティションとリスト・サブパーティションの場合、対応する値リストも一致している必要があります。
この句をトランスポータブル表領域とともに使用すると、高速データ・ロードが容易になります。
関連項目: トランスポータブル表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
table
にLOB列がある場合、各LOB列のLOBデータ、およびLOB索引パーティション・セグメントまたはLOB索引サブパーティション・セグメントは、table
の対応するLOBデータおよびLOB索引セグメントと交換されます。
table
にネストした表の列が含まれる場合、そのような各列のネストした表パーティション・セグメントは、非パーティション表の対応するネストした表セグメントと交換されます。
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 パーティションまたはサブパーティションを交換する表を指定します。
schema
を指定しない場合、その表は自分のスキーマ内にあるとみなされます。
INCLUDING | EXCLUDING INDEXES INCLUDING
INDEXES
を指定すると、ローカル索引パーティションまたはサブパーティションを対応する表索引(非パーティション表の場合)またはローカル索引(ハッシュ・パーティション化表の場合)と交換できます。EXCLUDING
INDEXES
を指定すると、交換された表のすべての標準索引、索引パーティションおよびパーティションに対応するすべての索引パーティションまたはサブパーティションにUNUSABLE
のマークを付けることができます。この句を指定しない場合、EXCLUDING
INDEXES
がデフォルトになります。
WITH | WITHOUT VALIDATION WITH
VALIDATION
を指定すると、交換された表にあるいずれかの行が交換されたパーティションまたはサブパーティションにマップされない場合にエラーが戻されます。WITHOUT
VALIDATION
を指定すると、交換された表にある行が正しくマップされたかどうかがチェックされません。この句を指定しない場合、WITH
VALIDATION
がデフォルトになります。
exceptions_clause この句の詳細は、「制約の例外の処理」を参照してください。パーティション交換のコンテキストでは、この句は、パーティション表がUNIQUE
制約を使用して定義されている場合にのみ有効です。また、制約はDISABLE
VALIDATE
の状態である必要があります。この句は、サブパーティションではなくパーティション交換に対してのみ有効です。
関連項目:
|
パーティションまたはサブパーティションの交換の注意事項: パーティションとサブパーティションの交換時には、次の点に注意します。
交換される両方の表は同じ主キーを含む必要があり、参照表が空でないかぎり、どちらの表も有効な外部キーを参照できません。
パーティション化された索引構成表の交換時には、次の点に注意します。
ソースおよびターゲットの表およびパーティションは、その主キーが同じ列に同じ順序で設定されている必要があります。
キー圧縮が使用可能な場合は、ソースおよびターゲットの両方で使用可能で、接頭辞の長さは同じである必要があります。
ソースおよびターゲットの両方は、索引構成されている必要があります。
ソースおよびターゲットの両方に、オーバーフロー・セグメントが必要です。または、ソースおよびターゲットの両方がオーバーフロー・セグメントを持ってはいけません。また、ソースおよびターゲットの両方ともマッピング表を含むか、または両方とも含まない必要があります。
ソースおよびターゲットの両方は、LOB列に対して記憶域属性が同一である必要があります。
この句は、参照パーティション表の親表を変更する場合にのみ有効です。この句では、親表の子の参照パーティション表の操作によって作成されるパーティションの属性を指定できます。
親表がコンポジット・パーティションではない場合、1つ以上の子表を指定し、子表ごとに、親表内に作成された各パーティションの1つのpartition_spec
を指定します。
親表がコンポジットの場合、1つ以上の子表を指定し、子表ごとに、親表内に作成された各サブパーティションの1つのpartition_spec
を指定します。
関連項目: 参照パーティション表の作成の詳細は、「CREATE TABLE 」の句「reference_partitioning」を参照してください。参照によるパーティション化の概要は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。 |
この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
のグローバル索引を更新できます。
update_all_indexes_clause
この句を使用すると、table
のすべての索引を更新できます。
update_index_partition この句は、表パーティションの操作に対してのみ有効で、ローカル索引にのみ影響を与えます。
index_partition_description
を使用すると、各ローカル索引のそれぞれのパーティションの物理属性、表領域の記憶域およびロギングを指定できます。PARTITION
キーワードのみを指定すると、索引のパーティションは次のように更新されます。
単一の表パーティションに対する操作(MOVE
PARTITION
、SPLIT
PARTITION
など)の場合、対応する索引パーティションは処理された索引表パーティションの属性を継承します。索引パーティションの名前は生成されないため、この操作によって作成された新しい索引パーティションは、対応する新しい表パーティションから名前を継承します。
MERGE
PARTITION
操作の場合、この操作によって作成されたローカル索引パーティションは、作成された表パーティションの名前とローカル索引の属性を継承します。
ドメイン索引の場合、PARAMETERS
句を使用すると、未解析のまま適切なODCI索引タイプ・ルーチンに渡すパラメータ文字列を指定できます。PARAMETERS
句は、ドメイン索引に対してのみ有効であり、ドメイン索引について指定できるindex_partition_description
の唯一の部分です。
UNUSABLE
句の詳細は、「ALTER
INDEX
」の「UNUSABLE」を参照してください。
関連項目: ドメイン索引の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。 |
コンポジット・パーティション索引の場合、index_subpartition_clause
を使用すると、各サブパーティションに対して表領域の記憶域を指定できます。update_index_partition句のこのコンポーネントの詳細は、「CREATE INDEX
」の「
index_subpartition_clause」
を参照してください。
update_index_subpartition この句が有効であるのは、操作の対象がコンポジット・パーティション表のサブパーティションの場合のみであり、この句の影響を受けるのはコンポジット・パーティション表のローカル索引のみです。1つ以上のサブパーティションに対して、格納する表領域を指定できます。
すべての索引の更新の制限事項 次の制限事項は、update_all_indexes_clause
に適用されます。
この句は、索引構成表に対して指定できません。
exchange_partition_subpart
句を使用してパーティションまたはサブパーティションを交換する場合、update_all_indexes_clause
は、グローバル索引にのみ適用可能です。このため、update_index_partition
またはupdate_index_subpartition
句を指定できません。ただし、INCLUDING | EXCLUDING INDEXES句を使用して、交換操作中にローカル索引メンテナンスを指定できます。
この句を指定すると、table
のグローバル索引のみを更新できます。table
のすべてのローカル索引には、UNUSABLE
のマークが付けられます。
UPDATE GLOBAL INDEXES UPDATE
GLOBAL
INDEXES
を指定すると、table
で定義したグローバル索引を更新できます。
グローバル索引の更新の制限事項: グローバル索引がLOB列のグローバル・ドメイン索引として定義されている場合、ドメイン索引は、更新されるのではなくUNUSABLE
のマークが付けられます。
INVALIDATE GLOBAL INDEXES INVALIDATE
GLOBAL
INDEXES
を指定すると、table
で定義したグローバル索引を無効にできます。
どちらも指定しない場合、グローバル索引は無効になります。
グローバル索引の無効化の制限事項 この句がサポートされるのは、グローバル索引に対してのみです。索引構成表に対してはサポートされません。また、この句によって更新されるのは、USABLE
およびVALID
の索引のみです。UNUSABLE
の索引は使用禁止のままになり、INVALID
のグローバル索引は無視されます。
parallel_clause
を使用すると、表の問合せおよびDMLに対するデフォルトの並列度を変更できます。
この句の詳細は、「CREATE TABLE」の「parallel_clause
」
を参照してください。
表の並列化の変更の制限事項: 表の並列化の変更には、次の制限事項があります。
table
にLOB型またはユーザー定義オブジェクト型の列が含まれている場合、このtable
での
INSERT
、UPDATEおよびDELETE
は、通知なしに逐次実行されます。ただし、後続の問合せはパラレルで実行されます。
parallel_clause
をmove_table_clause
と組み合せて指定する場合、このパラレル化は移動のみに適用され、後続の表でのDML操作および問合せには適用されません。
move_table_clause
を使用すると、非パーティション表のデータまたはパーティション表のパーティションのデータを新しいセグメントに再配置できます。オプションとして、別の表領域への配置および記憶域属性の変更を行うこともできます。
LOB_storage_clause
句およびvarray_col_properties
句を使用して、表またはパーティションに関連付けられたLOBデータ・セグメントを移動することもできます。この句で指定していないLOB項目は移動できません。
表を別の表領域に移動する場合、COMPATIBLE
パラメータが10.0以上に設定されていると、ネストした表の列に対する記憶表は、その表が作成された表領域に残ります。COMPATIBLE
が10.0未満に設定されている場合、表と記憶表は新しい表領域に自動的に移動します。
ONLINE句 この句は、トップレベルの索引構成表、および索引構成済のネストした表の記憶表に対してのみ有効です。ONLINE
を指定すると、表の主キー索引の再構築中に、索引構成表に対するDML操作を実行できます。
表のオンライン化の制限事項: 表のオンライン化には、次の制限事項があります。
同じ文でこの句と他の句は結合できません。
この句は、パーティション化された索引構成表に対して指定できません。
パラレル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_clause MAPPING
TABLE
を指定すると、マッピング表が存在していない場合にマッピング表を作成できます。マッピング表がすでに存在する場合、マッピング表は索引構成表とともに移動され、すべてのビットマップ索引にはUNUSABLE
のマークが付けられます。新しいマッピング表は、親表と同じ表領域に作成されます。
NOMAPPING
を指定すると、既存のマッピング表が削除されます。
この句の詳細は、「CREATE TABLE」の「mapping_table_clauses
」
を参照してください。
表のマッピングの制限事項: table
でビットマップ索引が定義されている場合は、NOMAPPING
を指定できません。
key_compression key_compression
句を使用すると、索引構成表のキー圧縮を使用可能または使用禁止にできます。
COMPRESS
を指定すると、キー圧縮が使用可能になり、その結果、索引構成表における主キー列の値が重複しなくなります。integer
を使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。
接頭辞の長さの有効範囲は、1から(主キー列数-1)までです。デフォルトでは(主キー列数-1)になります。
NOCOMPRESS
を指定すると、索引構成表でのキー圧縮が使用禁止になります。これはデフォルトです。
TABLESPACE tablespace 再構築した索引構成表を格納する表領域を指定します。
LOB_storage_clause この句を使用すると、LOBセグメントを別の表領域に移動できます。表にLONG
列が含まれている場合は、この句を使用してLOBセグメントを移動することはできません。かわりに、LONG
列をLOBに変換するか、または表をエクスポートし、LOB列に必要な表領域の記憶域を指定する表を再作成して表データを再インポートする必要があります。
表の移動の制限事項: 表の移動には、次の制限事項があります。
MOVE
を指定する場合は、ALTER
TABLE
文の最初の句にする必要があります。この句以外では、physical_attributes_clause
、parallel_clause
およびLOB_storage_clause
のみが指定できます。
LONG
またはLONG
RAW
列を含む表は、移動できません。
パーティション表(ヒープ表または索引構成表)全体の移動はできません。個々のパーティションまたはサブパーティションを移動してください。
LOBについての注意: move_table_clause で指定するすべてのLOB列については、次のことに注意してください。
|
enable_disable_clause
を使用すると、Oracle Databaseが整合性制約を適用するかどうか、およびその方法を指定できます。DROP
およびKEEP
句は、一意制約または主キー制約を使用禁止にする場合のみに有効です。
関連項目:
|
TABLE LOCK DDL操作中にロックされた表にのみDDL操作を実行できます。このような表ロックは、DML操作中は必要ありません。
注意: 一時表に表ロックを適用することはできません。 |
ENABLE
TABLE
LOCK
を指定すると、表ロックが有効になり、表に対するDDL操作が実行可能になります。現在実行中のすべてのトランザクションは、表ロックが有効になる前にコミットまたはロールバックする必要があります。
注意: Oracle Databaseは、表をロックする前に、データベース内のアクティブなDMLトランザクションが完了するまで待機します。その結果、遅延が生じる可能性があることに注意してください。 |
DISABLE
TABLE
LOCK
を指定すると、表ロックが無効になり、表に対するDDL操作が実行できなくなります。
注意: ターゲット表の表ロックが使用禁止の場合、パラレルDML操作は実行されません。 |
ALL TRIGGERS ALL
TRIGGERS
句を使用すると、表に関連するすべてのトリガーを使用可能または使用禁止にできます。
例
コレクションの取出し例: 次の文は、サンプル表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;
列名の変更例: 次の文は、サンプル表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);
索引構成表の変更例: 次の文は、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);
次の文は、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;
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
になり、他のすべての属性は、まず表レベルのデフォルト値から継承され、次に表領域のデフォルト値から継承されます。
デフォルト・リスト・パーティションの使用例: 次の文は、リスト・パーティション表(「リスト・パーティション化の例:」で作成)を使用します。最初の文は、既存のデフォルト・パーティションを新規の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(30)); 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;
データの暗号化例: 次の文は、暗号化アルゴリズム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 NO SALT 'NOMAC');
次の例は、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
パラメータが指定されていないため、エクステントはemployees表が入っている表領域に属するデータファイルの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
句で指定する必要があるのは、列名と、定義のうち変更される部分のみです(列の定義をすべて指定する必要はありません)。この文は、既存の行の既存の値には影響しません。
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
をemployees
表に追加します。
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
を記憶表に設定します。
関連項目:
|
REF列の例: 次の文では、オブジェクト型dept_t
を作成し、その後に表staff
を作成します。
CREATE TYPE dept_t AS OBJECT (deptno NUMBER, dname VARCHAR2(20)); / CREATE TABLE staff (name VARCHAR(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);
追加の例: ALTER
TABLE
文を使用した整合性制約の定義例は、「constraint」を参照してください。
表の記憶域パラメータの変更例は、「storage_clause」を参照してください。