2016-10-27 11 views
0

パーティションは約644万行/月となり、定期的に(毎月)パーティションが削除されます。最近、このテーブルの主キーに結合テーブルを導入しました(カスケード削除を使用)。これにより、結合テーブルがその内部の行を参照するため、パーティションを削除できない場合の参照整合性に問題が発生します。Oracle 11g - カスケード・パーティションの削除

アプリケーションコードを作成するためのアドバイスを受けましたが、これは最適ではないソリューションだと感じました。

これを読んで以来、私はしました:https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1007479をし、彼らが最初にDELETE FROM table partition (partitionID);に推薦され、その後、ALTER TABLE table DROP PARTITION partitionID;

我々は心配していることが表示されます:

  1. 処理負荷
  2. への影響ログの元に戻す/やり直す

誰かが良いアイデアを持っているのだろうかと思います。あるいは、これが悪い考えではないことを再確認することができます。

+0

してください[編集]あなたの質問は '問題のすべてのテーブルのtable'文を作成を追加します。

Oracleは、ここでより多くの情報を持っています。 –

答えて

0

Wernfriedの答えは非常に役に立ちますが、私が後にしたのは、メインテーブルのようにジョインテーブルを分割する機能でした。このようにして、結合表のパーティションを削除し、次に親パーティションを削除できます。これにより、削除を必要とせずに参照整合性の問題を回避できます。削除はテーブルのサイズのためにオプションになっていないでしょう。私たちの元に戻す/やり直しログはひどく緊張しませんでした。

これは2つの方法で実現できます。最初の方法が最も簡単ですが、古いデータベースのバージョンでは機能しない可能性があります。ジョインテーブルで参照パーティションを作成すると、2つのパーティションを同期させることができます。

もう1つの選択肢は、親パーティションに同じ行を子パーティションに含めることです。これには結合テーブルのサイズが大きくなるという欠点がありますが、テーブルパーティションを同期させたままにすることができます。 https://docs.oracle.com/database/121/VLDBG/GUID-54D18B18-6838-4115-9389-E1FB0D20A8CA.htm

1

ドキュメントも

DELETE FROM sales partition (dec98); 
ALTER TABLE sales DROP PARTITION dec98; 

を言うドロップされたパーティションは表の全データの小さな割合が含まれている場合、このメソッドは、小さなテーブルのために、または大きなテーブルのために最も適切です。あなたがDELETEをスキップすると、あなたが得ることはありません

ALTER TABLE table DROP PARTITION partitionID UPDATE INDEXES; 

または

ALTER TABLE table DROP PARTITION partitionID; 
ALTER INDEX ... REBUILD; 

:私はこのような場合にパフォーマンスが似いつもの方法よりもわずかに改善することができます仮定

任意の元に戻すログ。