커밋(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;)
'DBMS, 데이터베이스' 카테고리의 다른 글
DB 관리툴 - dbeaver 설치 및 사용(윈도우 10) (0) | 2022.06.16 |
---|---|
전체, 데이터베이스별, 테이블 용량 확인 쿼리 (0) | 2022.06.15 |
데이터베이스 마이그레이션 이야기 4 (MySQL to MySQL) (0) | 2022.06.08 |
TODO List 테이블 생성과 CRUD, MySQL 쿼리 예제 (0) | 2022.06.07 |
MySQL 다운로드 및 설치 (0) | 2022.06.07 |