web-dev-qa-db-ja.com

Oracle ORA-08103のトラブルシューティング-オブジェクトは存在しません

Oracleからこのエラーが断続的に発生します。トリガーは、実行時間の長いクエリが実行されている間に、パーティションテーブルからパーティションを切り捨てています。

クエリを実行する予定のパーティションとは別のパーティションを切り詰めているので、これが機能することを期待しています。 (ITERATOR)または(JOIN-FILTER)が必要な場所でPARTITION LIST(ALL)を実行して、不正なクエリプランを疑っています。

クエリは複雑で、複数の分割テーブルを結合します。

だから私の質問は:クエリのどのテーブル(またはインデックス)が問題を引き起こしているのかを正確に把握するために、Oracleからさらに詳細を取得できますか?エラーが発生したときに有効だったクエリプランをキャプチャする方法はありますか? (私が今それを見るならば、それは計画と異なるかもしれません)

5
wrschneider

どの程度断続的にエラーが発生していますか?

パーティションを切り捨てているトリガーでロギングがありますか? (自律型トランザクションで)どのパーティションが切り捨てられるかについての情報を書き込む単純な手順を使用できます。

また、Leigh Riffelの提案に従ってon servererrorトリガーを作成し、クエリとエラースタックをログに記録します。

最後に、長時間実行されているクエリのすべての発生のトレースを有効にします(このクエリがあまり頻繁に実行されない場合を想定しています)。

alter session set sql_trace = true;
alter session set tracefile_identifier = wrschneider08103;

クエリの前と

alter session set sql_trace = false;

あと。

次に、エラーが再び醜い頭を育てたら、名前に「wrschneider08103」を含む最後のトレースファイルでtkprofを実行します...

うまくいけば、このようにして収集した情報を関連付けることができるでしょう。

3
Colin 't Hart

ServerError Trigger を使用して、この情報の一部を取得できるはずです。

1
Leigh Riffel