Откат совершенной транзакции

Есть ли способ rollback совершенной транзакции в oracle 11g

Я сделал delete from table в БД и зафиксировал его, теперь я хочу rollback зафиксированное изменение. Есть ли способ сделать это?

Ответ 1

Вы не можете отменить то, что уже было выполнено. То, что вы можете сделать в этой конкретной ситуации, как один из самых быстрых вариантов, заключается в том, чтобы выдать запрос flashback в таблицу, из которой вы удалили строки и вставить их обратно. Вот простой пример:

Примечание. Успех этой операции зависит от значения (по умолчанию 900 секунд) параметра undo_retention - периода времени (может быть автоматически уменьшен), в течение которого информация отмены сохраняется в табличном пространстве отмены.

/* our test table */
create table test_tb(
   col number
);
/* populate test table with some sample data */
insert into test_tb(col)
   select level
     from dual
  connect by level <= 2;

select * from test_tb;

COL
----------
         1
         2
/* delete everything from the test table */    
delete from test_tb;

select * from test_tb;

no rows selected

Вставьте удаленные строки назад:

/* flashback query to see contents of the test table 
  as of specific point in time in the past */ 
select *                                   /* specify past time */
  from test_tb as of timestamp timestamp '2013-11-08 10:54:00'

COL
----------
         1
         2
/* insert deleted rows */
insert into test_tb
   select *                                 /* specify past time */  
    from test_tb as of timestamp timestamp '2013-11-08 10:54:00'
   minus
   select *
     from test_tb


 select *
   from test_tb;

  COL
  ----------
          1
          2