17

rollbackコミットされたトランザクションへの方法はありますかoracle 11g

in db を作成しdelete from tableてコミットしましたが、コミットした変更を行いたいと思いrollbackます。それを行う方法はありますか?

4

2 に答える 2

36

すでにコミットされているものをロールバックすることはできません。この特定の状況でできることは、最も迅速なオプションの 1 つとして、行を削除したテーブルに対してフラッシュバック クエリを発行し、それらを挿入し直すことです。簡単な例を次に示します。

: この操作の成功は、パラメータの値 (デフォルトは 900 秒) によって異なります。このundo_retention時間は、UNDO 情報が UNDO テーブルスペースに保持される時間 (自動的に短縮できます) です。

/* 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
于 2013-11-08T07:00:50.923 に答える