楼主可以使用闪回事务查询,来回滚原来的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; );
savepoint?
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; );