Oracle 中利用闪回查询确定某表在某时间点之后的修改内容,并恢复至该时间点

Oracle 中利用闪回查询确定某表在某时间点之后的修改内容,并恢复至该时间点


--1.查看 DELETE 及 UPDATE 操作修改的数据:
  --其中将查询得 tab 表在 time_point 时点之后因 DELETE 及 UPDATE 操作修改的数据。
SELECT *
FROM C_XZSP_ZWZX_CONF_SUBMIT AS OF TIMESTAMP  to_timestamp('2017-03-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss')
MINUS
SELECT *
FROM C_XZSP_ZWZX_CONF_SUBMIT;


--2.查看 INSERT 操作修改的数据:
  --其中将查询得 tab 表在 time_point 时点之后因 INSERT 操作修改的数据。
SELECT *
FROM C_XZSP_ZWZX_CONF_COMPLETE
MINUS
SELECT *
FROM C_XZSP_ZWZX_CONF_COMPLETE AS OF TIMESTAMP  to_timestamp('2017-03-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss');




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_id、col1、col2。注意:需要通过唯一条件 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 定位数据。


转载自:http://www.cnblogs.com/autopenguin/p/5952671.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值