2009/03/06

[oracle]フラッシュバック問い合わせができない場合

昨日、フラッシュバック問い合わせの記事を書きましたが、タイトル通り、oracleではフラッシュバック問い合わせができない場合があります。

なんでかなーと思って、ひょっとしたら「テーブル定義が変更されたから?」なのではないかと予想しながら、調べたら案の定ビンゴ!!

3.フラッシュバック問合せの実行

フラッシュバック問合せでは、以下のようなケースでは対応不可となる。

①表の構造を変更したとき

たとえば、表に主キーを追加したりカラムを追加したりするとその時点以前へのフラッシュバック問合せはできなくなる。

via:3.フラッシュバック問合せの実行

現に問い合わせを行ったとき、以下のエラーが返ってきた。
ORA-01466: データを読み込めません - 表定義が変更されました

そこで、実際に対象となるテーブルが変更されたかどうかを確認してみます。

エラーの出る可能性のあるスキーマオブジェクトを見つける。
SQL> column object_name format a30
SQL> select object_name, created, last_ddl_time, timestamp
from user_objects
where last_ddl_time >= sysdate

via:ORA-01466: データを読み込めません - 表定義が変更されました

と単純にuser_objectsに問い合わせればテーブルの変更履歴がつかめることがわかりました。

変更した時系列に並べたい場合は、order by last_ddl_timeを使えばオッケーです。

ちなみに、余談ですが、user_objectsテーブルには、STATUSカラムもあって、オブジェクトがvalidかinvalidを確認することができます。

うーん、なんて便利なんだ!!

0 コメント:

コメントを投稿