programing

커밋된 트랜잭션 롤백

yellowcard 2023. 7. 29. 08:19
반응형

커밋된 트랜잭션 롤백

할 수 있는 방법이 있습니까?rollback에 있어서의 헌신적인 거래.oracle 11g

내가 만든 것은delete from tabledb에서 그리고 그것을 커밋, 나는 지금 하고 싶습니다.rollback확약된 변화그것을 할 수 있는 방법이 있습니까?

이미 커밋된 항목은 롤백할 수 없습니다.이 경우 가장 빠른 옵션 중 하나로 행을 삭제한 테이블에 대해 플래시백 쿼리를 실행한 후 다시 삽입할 수 있습니다.다음은 간단한 예입니다.

참고: 이 작업의 성공 여부는 다음 값(기본값 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

이 쿼리 사용

SELECT * FROM employee AS OF TIMESTAMP 
   TO_TIMESTAMP('2003-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')

그런 다음 삭제 테이블에 다음과 같이 삽입합니다.

INSERT  INTO  employee (SELECT * FROM employee AS OF TIMESTAMP 
   TO_TIMESTAMP('2003-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS'));

언급URL : https://stackoverflow.com/questions/19853150/rollback-a-committed-transaction

반응형