日本語PDF

TRUNCATE TABLE

目的

ノート:

TRUNCATE TABLE文をロールバックしたり、FLASHBACK TABLE文を使用して、切り捨てられた表の内容を取得することはできません。

TRUNCATE TABLEを使用すると、表からすべての行を削除できます。デフォルトでは、次の処理も実行されます。

  • 削除された行が使用していたすべての領域(ただし、MINEXTENTS記憶域パラメータで指定された領域は除く)の割当てが解除されます。

  • NEXT記憶域パラメータが、切捨て処理によってセグメントから最後に削除されたエクステントのサイズに設定されます。

表を削除して再作成するより、TRUNCATE TABLE文で行を削除する方が効果的です。表を削除して再作成するとその表の依存オブジェクトが無効になるため、次のアクションを繰り返す必要があります。
  • 表に対するオブジェクト権限の付与

  • 表の索引、整合性制約およびトリガーの作成

  • 表の記憶域パラメータの指定

切捨ての場合は、このような影響はありません。

TRUNCATE TABLE文を使用すると、DELETE文を使用してすべての行を削除するよりも迅速に削除できます。特に、表にトリガー、索引およびその他の依存オブジェクトが多数ある場合に有効です。

関連項目:

前提条件

表を切り捨てるには、その表が自分のスキーマ内にあるか、自分に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;