Oracle 中利用閃回查詢確定某表在某時間點之后的修改內容,並恢復至該時間點


Oracle 中利用閃回查詢確定某表在某時間點之后的修改內容:

1.查看 DELETE 及 UPDATE 操作修改的數據:
SQL> SELECT *
FROM  tab AS OF TIMESTAMP  to_timestamp('time_point', 'yyyy-mm-dd hh24:mi:ss')
MINUS
SELECT *
FROM  tab;
其中將查詢得  tab 表在 time_point 時點之后因 DELETE 及 UPDATE 操作修改的數據。
2. 查看 INSERT 操作修改的數據:
SQL> SELECT *
FROM  tab
MINUS
SELECT *
FROM  tab AS OF TIMESTAMP  to_timestamp(' time_point', 'yyyy-mm-dd hh24:mi:ss');
其中將查詢得  tab 表在  time_point 時點之后因 INSERT 操作修改的數據。
 
Oracle 中利用閃回查詢恢復某表至某時間點:
1.恢復  DELETE  及 UPDATE 操作修改的數據:
SQL> MERGE INTO  tab a
USING (SELECT *
         FROM  tab AS OF TIMESTAMP to_timestamp('time_point', 'yyyy-mm-dd hh24:mi:ss')
       MINUS
       SELECT *
         FROM  tab) b
ON (a. unique_id  = b.unique_id)
WHEN MATCHED THEN
  UPDATE
     SET a. col1                         = b. col1,
         a. col2                           = b. col2,
WHEN NOT MATCHED THEN
  INSERT
  VALUES
    (b. unique_id,
     b. col1,
     b. col2);
其中將恢復  tab 表至  time_point 時點,恢復數據為因 DELETE 及 UPDATE 操作修改的數據。
其中  tab 表包含字段 unique_idcol1col2注意:需要通過唯一條件 unique_id 定位數據。
2.恢復 INSERT 操作修改的數據:
SQL> DELETE FROM  tab a
WHERE EXISTS (SELECT 1
          FROM (SELECT *
                  FROM  tab
                MINUS
                SELECT *
                  FROM  tab AS OF TIMESTAMP to_timestamp('time_point', 'yyyy-mm-dd hh24:mi:ss')) b
         WHERE a. unique_id = b. unique_id);
其中將恢復  tab 表至  time_point 時點,恢復數據為因 INSERT 操作修改的數據。
注意:需要通過 唯一條件 unique_id 定位數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM