[SQL] 데이터 복구 - FLASHBACK VERSION QUERY

·2025년 7월 15일
0

SQL

목록 보기
117/126

💡 빠른 데이터 복구 기술인 flashback 기술 총정리

  1. flashback query : 특정 시점의 데이터의 상태를 조회하는 기능
  2. flashback table : 테이블 데이터를 특정 시점으로 복구
  3. flashback drop : 삭제된 테이블을 복구
  4. flashback version query : 특정 기간동안 데이터 변경내역 조회
  5. flashback transaction query : 트랜잭션 변경 내역과 관련 정보를 조회
  6. flashback database : 전체 데이터베이스를 특정 시점으로 복구
  7. flashback archive ( total recall ) : 데이터 베이스 내의 특정 테이블의 모든 변경이력을 책임지고 저장하는 기능

실습1. 휴지통을 비우시오

휴지통(recyclebin) 비우기

purge recyclebin;

실습2. emp 테이블을 drop 할 때 휴지통에 넣지말고 삭제하시오

drop table emp purge;

-- 아무것도 안나옴
show recyclebin;

purge를 쓰면 recyclebin으로 들어가지 않고 바로 삭제됨
권장하지 X

💡 실제로 drop 할 때는 가급적 purge 옵션 쓰지 X. 혹시 복구가 필요할 수도 있기 때문

실습3. emp 테이블을 demo 스크립트를 돌려서 생성하시오

실습4. king 의 월급을 0 으로 변경하시오

update emp
 set sal = 0
 where ename='KING';

commit;

실습5. KING 의 직업을 ANALYST 로 변경하시오

update emp
 set job='ANALYST'
 where ename='KING';

commit;

실습6. KING 의 데이터를 지우고 commit 하시오

delete from emp
where ename='KING';

commit;

실습7. 그동안 emp 테이블의 KING 의 데이터가 어떻게 변경되어 왔는지 확인하시오

select versions_starttime, ename, sal, job, versions_operation
 from emp
 versions between timestamp to_timestamp('2025/07/15 13:54:00', 'RRRR/MM/DD HH24:MI:SS')
 and maxvalue
 where ename='KING'
 order by versions_starttime asc nulls first;

U: update

실습8. KING의 데이터가 지워지기 전까지 시점으로 복구하시오

select versions_starttime, ename, sal, job, versions_operation
 from emp
 versions between timestamp to_timestamp('2025/07/15 13:54:00', 'RRRR/MM/DD HH24:MI:SS')
 and maxvalue
 where ename='KING'
 order by versions_starttime asc nulls first;
 
alter table emp enable row movement;
 
flashback table emp to timestamp to_timestamp('25/07/15 13:57:52','RRRR/MM/DD HH24:MI:SS');

select ename, sal, job from emp where ename='KING';

문제1. DEPT 테이블로 버젼 쿼리를 연습하기 위해 다음의 작업을 수행하시오

#1. 부서번호 20번의 loc 를 kkkkk 로 변경하시오! commit 하세요
#2. 부서번호 20번의 dname 을 hhhh 로 변경하시오! commit 하세요
#3. 부서번호 20번의 데이터를 지우시오! commit 하세요

update dept
set loc = 'kkkkk'
where deptno = 20;

commit;

update dept
set dname = 'hhhh'
where deptno = 20;

commit;

delete from dept
where deptno = 20;

commit;

select * from dept;

문제2. 플래쉬백 버젼 쿼리로 dept 테이블의 과거 변경 이력정보를 확인하고 아래의 작업들을 수행하기 제일 처음 상태로 dept 를 되돌리시오

#1. 부서번호 20번의 loc 를 kkkkk 로 변경하시오! commit 하세요
#2. 부서번호 20번의 dname 을 hhhh 로 변경하시오! commit 하세요
#3. 부서번호 20번의 데이터를 지우시오! commit 하세요

select versions_starttime, deptno, loc, dname, versions_operation
 from dept
 versions between timestamp to_timestamp('2025/07/15 14:15:00', 'RRRR/MM/DD HH24:MI:SS')
 and maxvalue
 order by versions_starttime asc nulls first;
 
select * from dept;

alter table dept enable row movement;
 
flashback table dept to timestamp  to_timestamp('25/07/15 14:15:22','RRRR/MM/DD HH24:MI:SS');

select * from dept;

💡 flashback version 쿼리는 테이블을 과거로 flashback 하기 전에 어느 시점으로 복구하는게 맞는지정확한 시간을 확인하기 위해서 필요

0개의 댓글