실수로 DELETE FROM -- ; COMMIT; 을 실행하여 테이블 내 데이터가 모두 사라졌을 때 복구할 수 있는 기능
아무때나 복구할 수 있는 것은 아님
show parameter undo;
undo_retention : 복구할 수 있는 최대 시간 (900초)
롤백은 마지막 커밋한 부분까지만 돌릴 수 있어서, ROLLBACK으로 살아나지 못함
SELECT *
FROM emp
AS OF TIMESTAMP(systimestamp - interval '5' minute); -- 현재 시간에서 5분전의 데이터를 조회
현재 시각을 출력하는 쿼리문
select systimestamp
from dual;
INSERT INTO emp
SELECT *
FROM emp
AS OF TIMESTAMP(systimestamp - interval '5' minute); -- 현재 시간에서 5분전의 데이터를 다시 emp 테이블에 입력
commit;
사원 테이블의 월급 칼럼을 10분전 상태로 되돌리시오 - commit이후임
merge into emp e
using (select empno, sal
from emp as of timestamp(systimestamp - interval '10' minute)
) s
on (e.empno = s.empno)
when matched then
update set e.sal = s.sal;
show parameter undo; undo_retention 파라미터 값 이내로만 복구 가능
ALTER TABLE emp ENABLE ROW MOVEMENT;
FLASHBACK TABLE emp TO TIMESTAMP(systimestamp - interval '5' minute);
-- 현재 시간에서 5분을 뺀 시간으로 emp 테이블을 복구함
commit;
DROP(테이블 완전 삭제)에도 테이블 복구가 가능하다. (휴지통을 통해서)
SELECT *
FROM USER_RECYCLEBIN; //휴지통 조회
인덱스와 테이블이 DROP된 상태로 확인됨
FLASHBACK TABLE emp TO BEFORE DROP; -- 삭제된 테이블 복구/ 휴지통을 비우는 작업을 하지 않았다면 복구가능
PURGE RECYCLEBIN; -- 휴지통을 비우는 명령어