Oracleのデータ復旧メモ。
TEST_TBLからデータを削除してコミットしてしまったけど復旧したい。
1.バックアップしたデータからの復旧(全てのバージョン) 2.ログ・マイナーを使用した復旧(Oracle8i以降) 3.フラッシュバック・クエリを使用した復旧(Oracle9i以降)
フラッシュバック・クエリの例を記載します。
CREATE TABLE TMP_TEST_TBL AS SELECT COMPANY_CD, USER_ID, SLIP_NO, TO_DATE(TO_CHAR(UPD_DT, 'YYYY/MM/DD HH24:MI:SS'), 'YYYY/MM/DD HH24:MI:SS') AS UPD_DT FROM TEST_TBL AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '100' MINUTE);
100分前の状態に戻します。
「AS OF TIMESTAMP」句からフラッシュバック・クエリとなっている。
「SYSTIMESTAMP」はシステムの日時を戻す関数なので、
「SYSTIMESTAMP」から「INTERVAL ‘100’ MINUTE」を引くことで「今から100分前」を表している。
「INTERVAL」には「MINUTE」の他にも「HOUR」や「DAY」を扱えるが、遡るのに限度はあるようです。
INSERT INTO TEST_TBL SELECT COMPANY_CD, USER_ID, SLIP_NO, TO_DATE(TO_CHAR(UPD_DT, 'YYYY/MM/DD HH24:MI:SS'), 'YYYY/MM/DD HH24:MI:SS') AS UPD_DT FROM TMP_TEST_TBL
これで助かったことがあるので、メモ。