かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

外部キー制約参照先テーブルのTRUNCATE

time 2017/01/30

外部キー制約参照先テーブルのTRUNCATE

ORACLEでテーブルの切捨て(全データ削除)を行うことができるTRUNCATE文があります。

このTRUNCATE文ですが、外部キー制約(参照制約・参照整合性制約)の参照先テーブルで実行するとエラー(ORA-02266)が発生します。

本記事では、その回避の方法について解説します。

sponsored link

外部キー参照先テーブルのトランケートはNG

外部キー制約(参照制約・参照整合性制約)の参照先テーブルでトランケートを実行するとエラー(ORA-02266)が発生します。

※参照元テーブルのトランケートは問題なく実行できます

エラーの回避方法

しかし、各テーブルを初期化したい場合や、断片化の解消の一環で一度全データを切捨てたい場合など、トランケートを行いたい時があります。

その場合のエラーの回避方法は2つあります。

外部キー制約の一時的に無効化する

1つ目の方法は、外部キー制約の一時的に無効化することです。

トランケート前に無効化し、トランケート後や断片化解消のメンテナンス後に再度有効化します。

文法

使用例

注意点としては、当然のことですが、有効化する際には参照先テーブルに存在しないデータが参照元テーブルに存在しない状態になっている必要があります。

外部キー制約の一時的に削除する

2つ目の方法は、外部キー制約の一時的に削除することです。

トランケート前に削除し、トランケート後や断片化解消のメンテナンス後に再作成します。

文法

使用例

まとめ

テーブルの全データ削除できるTRUNCATE文ですが、外部キーが設定してある場合、参照先テーブルのトランケートはエラーになります。

対処法としては、一時的に外部キー制約を無効化するか削除しておく必要があります。

覚えておきましょう。
関連


sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link