パーティションテーブルの指定されたパーティションからすべてのデータを削除します。この操作はデータを完全に削除しますが、パーティション構造は保持します。このコマンドを実行する前に、データが不要になったこと、またはバックアップされていることを確認してください。
概要
ALTER TABLE table_name TRUNCATE PARTITION partition_name
[{DROP|REUSE} STORAGE]パラメーター
パラメーター | 必須 | 説明 | 例 |
| はい | パーティションテーブルの名前。 |
|
| はい | 切り捨てるパーティションの名前。 |
|
| いいえ | この句は Oracle 構文との互換性のために解析されますが、無視され、ストレージには影響しません。 |
|
注
このコマンドを実行するには、テーブルのオーナーまたは特権ユーザーである必要があります。
TRUNCATE PARTITIONは、テーブルレベルの排他ロックAccessExclusiveLockを取得します。このロックは、テーブルに対するすべてのデータ操作言語 (DML) およびほとんどのデータ定義言語 (DDL) 操作をブロックします。この文はオフピーク時に実行し、テーブルに対する他の重大な操作をブロックしないように、完了するのに十分な時間を確保してください。TRUNCATE PARTITIONは、ファイルの削除と組み合わせたメタデータのみの操作です。数億行のパーティションであっても数秒で完了し、I/O、CPU、およびメモリのオーバーヘッドは最小限です。テーブルに
ON TRUNCATEトリガーが定義されている場合、この操作はそれらを起動します。意図しない副作用を防ぐために、これらのトリガーのビジネスロジックを理解していることを確認してください。
例
この例では、販売記録テーブルから過去の四半期パーティションを切り捨てる方法を示します。これは一般的なデータライフサイクル管理タスクであり、古いデータを削除しつつ、後で同じ期間の新しいデータをロードするためにパーティション構造を保持します。
よくある質問
Q1: TRUNCATE PARTITION と DROP PARTITION の違いは何ですか?TRUNCATE PARTITION はパーティション内のデータのみを削除しますが、パーティション定義は保持します。対照的に、DROP PARTITION はパーティション定義とそのすべてのデータの両方を削除します。
Q2: TRUNCATE PARTITION を実行した後にデータを回復できますか?
いいえ。TRUNCATE はデータを完全に削除する DDL 操作です。デフォルトでは、トランザクションログに記録されず、標準のフラッシュバックメソッドを使用してロールバックまたは回復することはできません。
Q3: このコマンドを実行すると、なぜ RA-02149: specified partition does not exist というエラーが表示されるのですか?
このエラーは、指定されたパーティションが存在しないか、その名前の大文字と小文字が一致しないことを示します。事前チェックセクションのクエリを実行して正確なパーティション名を確認するか、完全に一致させるために二重引用符を使用してください。
Q4: このコマンドを実行すると、なぜ ORA-01031: insufficient privileges というエラーが表示されるのですか?
このエラーは、コマンドを実行しているユーザーがターゲットテーブルに対する ALTER 権限を持っていないために発生します。データベース管理者に連絡して、必要な権限を付与してもらってください。
Q5: このコマンドを実行すると、なぜ ERROR: cannot truncate partition of table because it has global indexes というエラーが表示されるのですか?
TRUNCATE PARTITION は、テーブルにグローバルインデックスがある場合に失敗します。グローバルインデックスは、すべてのパーティションにわたって一意性とアクセスパスを維持します。TRUNCATE 操作は、グローバルインデックスの整合性を損なうことなくインデックスエントリを迅速にクリアすることはできません。
関連する SQL 文
ALTER TABLE DROP PARTITION: パーティション定義とそのデータを削除します。
ALTER TABLE ADD PARTITION: パーティションテーブルに新しいパーティションを追加します。
ALTER TABLE SPLIT PARTITION: 1 つのパーティションを 2 つの新しいパーティションに分割します。