TRUNCATE TABLE
目的
ノート:
TRUNCATE
TABLE
文をロールバックしたり、FLASHBACK
TABLE
文を使用して、切り捨てられた表の内容を取得することはできません。
TRUNCATE
TABLE
を使用すると、表からすべての行を削除できます。デフォルトでは、次の処理も実行されます。
-
削除された行が使用していたすべての領域(ただし、
MINEXTENTS
記憶域パラメータで指定された領域は除く)の割当てが解除されます。 -
NEXT
記憶域パラメータが、切捨て処理によってセグメントから最後に削除されたエクステントのサイズに設定されます。
TRUNCATE
TABLE
文で行を削除する方が効果的です。表を削除して再作成するとその表の依存オブジェクトが無効になるため、次のアクションを繰り返す必要があります。
-
表に対するオブジェクト権限の付与
-
表の索引、整合性制約およびトリガーの作成
-
表の記憶域パラメータの指定
TRUNCATE
TABLE
文を使用すると、DELETE
文を使用してすべての行を削除するよりも迅速に削除できます。特に、表にトリガー、索引およびその他の依存オブジェクトが多数ある場合に有効です。
関連項目:
-
表からデータを削除する他の方法については、「DELETE」および「DROP TABLE」を参照してください。
-
クラスタの切捨ての詳細は、「TRUNCATE CLUSTER」を参照してください。
前提条件
表を切り捨てるには、その表が自分のスキーマ内にあるか、自分にDROP
ANY
TABLE
システム権限が付与されている必要があります。
CASCADE
句を指定するには、影響する子表が自分のスキーマにすべて含まれているか、自分にDROP
ANY
TABLE
システム権限が付与されている必要があります。
既存のTRUNCATE TABLE
コマンドを使用して、プライベート一時表を切り捨てることができます。プライベート一時表を切り捨てても、既存のトランザクションはコミットされません。これは、トランザクション固有とセッション固有の両方のプライベート一時表に適用されます。切り捨てられたプライベート一時表は、RECYCLEBIN
に移動されないことに注意してください。
関連項目:
構文
truncate_table::=
セマンティクス
TABLE句
切り捨てる表が設定されているスキーマおよびその表の名前を指定します。クラスタを構成する表は、切り捨てることができません。schema
を指定しない場合、表は自分のスキーマ内にあるとみなされます。
-
索引構成表や一時表も切り捨てることができます。一時表を切り捨てた場合、現行のセッションで作成された行のみが削除されます。
-
table
の記憶域パラメータNEXT
が、切捨て処理中にセグメントから最後に削除されたエクステントのサイズに変更されます。 -
table
に対する索引(ローカル索引のレンジ・パーティションとハッシュ・パーティション、およびローカル索引のサブパーティション)のUNUSABLE
のインジケータも、自動的に切捨ておよびリセットされます。 -
table
が空でない場合は、表中の非パーティション索引およびグローバル・パーティション索引のすべてのパーティションにUNUSABLE
のマークが付けられます。ただし、表が切り捨てられると索引も切り捨てられ、索引セグメントに対して新しい最高水位標が計算されます。この操作は、索引に対して新しいセグメントを作成することと同じです。このため、切捨て操作の最後に、索引が再度USABLE
になります。 -
ドメイン索引の場合は、この文が、適切なTRUNCATEルーチンを起動し、ドメイン索引のデータを切り捨てます。
関連項目:
ドメイン索引の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。
-
標準表および索引構成表がLOB列を含む場合、すべてのLOBデータおよびLOB索引セグメントは切り捨てられます。
-
table
がパーティション化されている場合、各パーティションまたはサブパーティションのLOBデータ・セグメントおよびLOB索引セグメントと同様に、パーティションおよびサブパーティションも切り捨てられます。ノート:
表を切り捨てた場合、表の索引データおよび表に対応付けられたマテリアライズド・ビューのダイレクト・パス・インサート情報はすべて、自動的に削除されます。
この情報は、マテリアライズド・ビュー・ログのいずれにも依存していません。このダイレクト・パス・インサート情報を削除した場合、マテリアライズド・ビューの増分リフレッシュのデータが失われる場合があります。
-
カーソルはすべて無効になります。
表の切捨ての制限事項
この文には、次の制限事項があります。
-
TRUNCATE
TABLE
文はロールバックできません。 -
切捨て操作を行う前の表の状態にフラッシュバックすることはできません。
-
クラスタを構成する表は、個別に切り捨てることはできません。これを行うには、クラスタを切り捨てるか、表のすべての行を削除するか、または表を削除して再作成する必要があります。
-
使用可能になっている外部キー制約の親である表は、切り捨てることはできません。その表を切り捨てる場合、制約を無効にしておく必要があります。整合性制約が自己参照型の場合は、例外として表を切り捨てることができます。
-
table
でドメイン索引が定義されている場合、索引および索引パーティションにIN_PROGRESS
のマークを付けることはできません。 -
参照パーティション表の親表は切り捨てることができません。まず、参照パーティション表の子表を削除する必要があります。
-
重複表を切り捨てることはできません。
MATERIALIZED VIEW LOG句
MATERIALIZED
VIEW
LOG
句を使用すると、表が切り捨てられた場合に、この表に定義されているマテリアライズド・ビュー・ログを保存するか、または削除するかを指定できます。この句を使用した場合、マテリアライズド・ビューのマスター表を、エクスポートまたはインポートによって再編成できます。この場合、マスター表で定義された主キー・マテリアライズド・ビューを高速リフレッシュする機能は影響を受けません。主キー・マテリアライズド・ビューを継続的に高速リフレッシュできるようにするには、マテリアライズド・ビュー・ログに主キー情報を記録する必要があります。
ノート:
下位互換性を保つために、MATERIALIZED
VIEW
のかわりにキーワードSNAPSHOT
もサポートされています。
PRESERVE
PRESERVE
を指定すると、マスター表を切り捨てたときにマテリアライズド・ビュー・ログを保存できます。これはデフォルトです。
PURGE
PURGE
を指定すると、マスター表を切り捨てたときにマテリアライズド・ビュー・ログを削除できます。
関連項目:
マテリアライズド・ビュー・ログおよびTRUNCATE
文の詳細は、『Oracle Database管理者ガイド』を参照してください。
STORAGE句
STORAGE
句を使用すると、行の切捨てによって解放された領域をどのようにするかを指定できます。DROP
STORAGE
句、DROP
ALL
STORAGE
句およびREUSE
STORAGE
句は、対応する索引から削除されたデータの空き領域にも適用されます。
DROP STORAGE
DROP
STORAGE
を指定すると、表のMINEXTENTS
パラメータで割り当てられた領域を除き、表から削除された行からすべての領域の割当てを解除できます。この領域は、後で表領域内の他のオブジェクトで使用できます。また、NEXT
記憶域パラメータが、切捨て処理によってセグメントから最後に削除されたエクステントのサイズに設定されます。この設定(デフォルト)は、小規模や中規模のオブジェクトに有効です。このようなオブジェクトの場合、ローカル管理表領域のエクステント管理が非常に高速に行われるため、領域を確保する必要はありません。
DROP ALL STORAGE
DROP
ALL
STORAGE
を指定すると、MINEXTENTS
パラメータで割り当てられた領域も含め、表から削除された行からすべての領域の割当てを解除できます。表のすべてのセグメント、およびその依存オブジェクトのすべてのセグメントも、割当てが解除されます。
DROP ALL STORAGEの制限事項
この句には、「遅延セグメント作成の制限事項」に示されているものと同じ制限事項があります。
REUSE STORAGE
REUSE
STORAGE
を指定すると、表に割り当てられた削除行の領域を確保できます。STORAGEの値は、表を作成したときの値にリセットされません。この領域は、挿入操作または更新操作によってその表内に作成される新規データによってのみ使用されます。記憶域パラメータは現行の設定のまま残ります。
この設定は、行数が非常に多く、表に何千ものエクステントが必要な場合や、データを後で再挿入する予定がある場合に、大規模な表のすべての行を削除する別の方法として有効です。
この句は一時表では無効です。表が切り捨てられたときに、セッションは一時表からアンバインドされるので、記憶域が自動的に削除されます。
切り捨てるオブジェクトに対して複数の空きリストを指定している場合は、REUSE
STORAGE
句によって、インスタンスへの空きリストのマッピングも削除され、最高水位標は第1エクステントの先頭までリセットされます。
CASCADE
CASCADE
を指定すると、ON
DELETE
CASCADE
参照制約が有効化されていて、table
を参照する子表は、すべて切り捨てられます。これは、指定したオプションを使用して、すべての子表、孫表(およびそれ以下の子表)を切り捨てる再帰的な操作になります。
例
表の切捨て: 例
次の文は、サンプル表hr.employees
の仮想コピーのすべての行を削除して、解放された領域をemployees
表が定義されている表領域に戻します。
TRUNCATE TABLE employees_demo;
ここでは、employees
表の索引データもすべて削除され、解放された領域は、それらの索引が定義されていた表領域に戻されます。
切捨て後のマテリアライズド・ビュー・ログの保存: 例
次の文は、マテリアライズド・ビュー・ログを保存するTRUNCATE
文の例です。
TRUNCATE TABLE sales_demo PRESERVE MATERIALIZED VIEW LOG; TRUNCATE TABLE orders_demo;