现在我要500w条数据中update其中的一些数据,因此要建立回滚脚本,请问有什么好的方法

解决方案 »

  1.   

    什么备份脚本,你要做什么?
    savepoint?
      

  2.   

    就是由这个脚本恢复原来这些被update的数据信息,当然不经由DBA
      

  3.   

    楼主可以使用闪回事务查询,来回滚原来的update语句。但是这样做的前提是你有足够大的undo回滚段,和undo_retention的时间足够长,能够在时间内保存所有的删除的回滚信息到回滚段如下面的测试: --创建表,然后做删除操作,并且提交
      create table t as  select * from emp t;
      delete  from t  where t.empno = 7935;
    --闪回版本查询,找到事务id(versions_xid)
    select versions_xid,to_char(versions_starttime,'yyyy-mm-dd hh24:mi:ss') from t  versions between timestamp minvalue and maxvalue; 
    --根据xid从闪回表查询undo语句
    select t.undo_sql from flashback_transaction_query t where t.xid = '06001F0066020000';
    --根据查询出来的undo语句,回滚原来的操作,--也可以将undo语句存放到表中
    create table temp as select t.undo_sql from flashback_transaction_query t where t.xid = in ( select versions_xid from t  versions between timestamp minvalue and maxvalue; );