3

テーブル内のいくつかの行を誤って削除し、コミットも行いました。今、私はそれらを回復したいと思っています。

私が使用しているDBはOracle 11g R2です。

次のクエリを使用して、削除されたレコードを取得しました。

SELECT * FROM MY_TABLE AS OF TIMESTAMP ('13-MAR-11 8:50:58','DD-MON-YY HH24: MI: SS')

しかし、実行中に次のようなエラーが表示されます。

Error at Command Line:3 Column:75
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

しかし、このクエリの問題を理解できませんでした。

誰でも助けてもらえますか?

4

2 に答える 2

5

これには実際のタイムスタンプ (または日付) が必要です。値のペアを渡しています。

試す:

SELECT * FROM MY_TABLE
AS OF TIMESTAMP TO_DATE('13-MAR-11 08:50:58','DD-MON-YY HH24:MI:SS')

(時間形式指定子も正しくなく、日付文字列と一致しません。)

于 2013-03-11T07:12:20.000 に答える
2

例えば ​​:

    SELECT * FROM EMP AS OF TIMESTAMP 
   TO_TIMESTAMP('2005-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
   WHERE name = 'JOHN';

ただし、ORA-1555、その他のオプションでフラッシュバック問合せが失敗する場合があります:

ログマイナー

Oracle 補足ログが有効になっている場合は、delete ステートメントの undo sql を取得できます

-- switch again logfile to get a minimal redo activity alter system switch logfile;

-- mine the last written archived log 
exec dbms_logmnr.add_logfile('archivelog/redologfile', options =>dbms_logmnr.new); 
exec dbms_logmnr.start_logmnr(options => dbms_logmnr.dict_from_online_catalog); 
select operation, sql_redo from v$logmnr_contents where seg_name = 'EMP';

Oracle PRM-DUL

PRM-DUL は最後のオプションになります。Oracle ブロックの削除された行ピースでも、常に削除されたマスクで行フラグがマークされているだけで、行ピースはスキャン Oracle データ ブロックを介して読み取ることができます。PRM-DUL は、テーブル全体をスキャンし、削除済みとマークされたすべてのレコード/行の断片を見つけて、フラット ファイルに書き出すことができます。

于 2016-02-21T13:43:43.710 に答える