[실무에서 바로 쓰는 SQL 기본과 SQL 튜닝][ORACLE] 19강

MinHee·2023년 5월 20일
0
post-thumbnail

FLASHBACK QUERY : 실수로 삭제한 데이터 복구

실수로 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;

FLASHBACK TABLE : 실수로 삭제한 데이터 복구

show parameter undo; undo_retention 파라미터 값 이내로만 복구 가능

  1. 테이블을 복구(FLASHBACK)이 가능한 상태로 변경

ALTER TABLE emp ENABLE ROW MOVEMENT;

  1. FLASHBACK

FLASHBACK TABLE emp TO TIMESTAMP(systimestamp - interval '5' minute);
-- 현재 시간에서 5분을 뺀 시간으로 emp 테이블을 복구함

  1. commit

commit;

## FLASHBACK DROP : 실수로 삭제한 데이터 복구

DROP(테이블 완전 삭제)에도 테이블 복구가 가능하다. (휴지통을 통해서)

SELECT *
FROM USER_RECYCLEBIN; //휴지통 조회

인덱스와 테이블이 DROP된 상태로 확인됨

FLASHBACK TABLE emp TO BEFORE DROP; -- 삭제된 테이블 복구/ 휴지통을 비우는 작업을 하지 않았다면 복구가능

PURGE RECYCLEBIN; -- 휴지통을 비우는 명령어

profile
성장하는 개발자

0개의 댓글