2016-12-28 10 views
0

次のクエリを使用して、テーブルに存在するすべてのレコードの最終更新日時を取得しようとしています。その結果表示が正しくテーブルのいくつかのために タイムスタンプ付き最終更新レコード

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN),id FROM TABLE_NAME 

が、私は、エラーメッセージ、次しまった他人のために

(私は自動生成されたHRスキーマからテーブルを使用しています。具体的には)ORA- 08181:指定された番号が有効なシステム変更でない数

ORA-06512: "SYS.SCN_TO_TIMESTAMP"、行に1

  • 00000
      - 「指定された数ではありません有効なシステム変更番号 "

    *原因:指定されたscnが有効なscnの範囲を超えています。 *処置:有効なscnを使用してください。

  • なぜこのエラーメッセージが表示されますか?クエリを実行する前に、同じテーブルに対していくつかの挿入クエリと更新クエリを実行しました。

    は(最後のDML操作のためのシステム変更番号)あなた

    +0

    また、データの変更を追跡するために余分な列を持っている方が良いでしょう。 ORA_ROWSCNは非常に現実的ではなく、古いデータ(たとえば、あなたの場合)では機能しません。 – GurV

    答えて

    1

    Oracle 10gおよび9iには5日間のフラッシュバックしかできないという制限があります。 Oracle 11gには制限はありません。

    データベース内で使用可能なシステム変更番号(SCN)番号のうち、最も古いものを確認できます。あなたが最小SCNより古いSCNをチェックすると、あなたが得るSCN

    SELECT SCN_TO_TIMESTAMP(scn number here) FROM dual; 
    

    のための最後のTIMESTAMPを得ることができます上記のクエリからのSCN番号を使用して、このクエリに

    select min(SCN) min_scn from sys.smon_scn_time; 
    

    を使用して

    エラー。

    ソースlink

    +0

    'select min(SCN)min_scn from sys.smon_scn_time;'私には「ORA-00942:テーブルまたはビューが存在しません」というメッセージが表示されます。それはOracle 11gのSQL Developerです。 – mivk

    1

    SCNありがとう限られた期間のために生成され、Oracleによって記憶されます。古いscnをタイムスタンプに変換していて、エラーが発生しています。

    ORA_ROWSCNには2つの動作があります。 tabeが"NOROWDEPENDENCIES"(デフォルト)で作成されている場合。 ORA_ROWSCNは、oracleデータ・ブロックのscn番号を戻します。

    tabeが"ROWDEPENDENCIES"で作成されている場合。 ORA_ROWSCNは、行のscn番号を返します。

    関連する問題