커밋(commit)한 Insert, Update, Delete 쿼리 취소

 

실수로 쿼리를 잘못 적용한 경우, 취소(Rollback)하려면 다음처럼 진행한다. 단, 최근 시간 기준으로 제한된 시간만 가능하므로 신속하게 진행해야 하며, 또한 해당 시간 안에 일어날 쿼리 작업도 취소된다는 점에 주의하자. 

 

1) Oracle

 

INSERT INTO 테이블명

SELECT * FROM 테이블명 

AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '원하는시간(분)' MINUTE);

 

INSERT INTO mytable

SELECT * FROM mytable

AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '15' MINUTE);

 

*오라클은 기본 15분으로 설정되어 있음 (변경 가능)

설정 확인: SHOW PARAMETER UNDO_RETENSION;   

                (초단위 값으로 900이 설정되어 있을 것임.)

 

2) MySQL , PostgreSQL

MySQL이나 PostgreSQL에 커밋된 데이터 수정 쿼리를 "실행 취소"하는 쿼리는 없다. 데이터베이스 백업이 있는 경우에만, 백업을 복원하고 DBA 도구(MySQL은 mysqlbinlog )를 사용하여 백업 이후 로그에서 모든 데이터 수정 쿼리를 "재생"하여 복원을 시도할 수는 있다. 

 

[참고] MySQL에서 rollback 기능을 사용하려면

(1) 트랜잭션 시작을 알린다.

begin;   (또는 start transaction;)

(2) 자동 커밋 옵션을 끈다. (기본 ON 상태)

set autocommit=0;

(3) 생성 쿼리 작업을 한다.

insert into city (ID, Name, CountryCode, District, Population) values (10000, "OSM", "AFG", "NONE", 1);

(4) 생성되었는지 확인한다.

select * from city where ID=10000;select * from city where ID=10000; 

(5) 지금까지 insert, update, delete 작업을 취소하려면

rollback;

아니면, 여기에서... DB에 적용하려면

commit;

 

[팁] savepoint 위치명;

이 명령으로 특정 쿼리 앞에 실행하면 해당 위치로 rollback 할 수 있다. 

begin;

set autocommit=0; 

다른 삽입/수정/삭제 쿼리들을 실행1

다른 삽입/수정/삭제 쿼리들을 실행2

...

savepoint a;

delete from city where ID=10000;

rollback to savepoint a;

 

 

[참고] PostgreSQL에서 rollback 기능을 사용하려면 (savepoint 사용도 가능함)

(1) 트랜잭션 시작을 알린다.

 begin;   (또는 begin transaction;)

(2) 생성 쿼리 작업을 한다.

insert into city (ID, Name, CountryCode, District, Population) values (10000, "OSM", "AFG", "NONE", 1);

(3) 생성되었는지 확인한다.

select * from city where ID=10000;select * from city where ID=10000; 

(4) 지금까지 insert, update, delete 작업을 취소하려면

rollback;

아니면, 여기에서... DB에 적용하려면

commit;   (또는 end;)

반응형

+ Recent posts