프로그래밍/Oracle

[Oracle] Flashback 기술 2 - Drop / Version Query

eunki 2022. 6. 10. 18:16
728x90

예제 3-1. 사원 테이블의 월급에 인덱스를 생성

create index emp_sal
    on emp(sal);

 

 

 

예제 3-2. emp 테이블을 drop

drop table emp;

 

 

 

예제 3-3. 휴지통 속에 있는 emp 테이블을 확인

select object_name, original_name, droptime
    from user_recyclebin;

 

 

 

예제 3-4. 휴지통 속에 emp 테이블과 관련된 인덱스가 있는지 확인

select *
    from user_recyclebin
    where original_name = 'EMP';
select 'alter index "' || object_name || '" rename to ' || original_name || ';'
    from user_recyclebin
    where type = 'INDEX';

 

 

 

예제 3-5. 휴지통 속에 있는 emp 테이블을 복구

flashback table emp to before drop;

 

 

 

예제 3-6. emp_sal 인덱스도 복구가 되었는지 확인

select index_name
    from user_indexes
    where table_name = 'EMP';

emp 테이블이 휴지통 속에 한 번 들어갔다 나온 이후에 emp_sal 인덱스도 복구는 되었지만 인덱스 이름이 이상해졌습니다.

이렇게 되면 SQL 튜닝 할 때 불편해집니다. 그래서 원래 이름으로 변경해줘야 합니다.

 

 

 

예제 3-7. 인덱스 이름을 원래 이름으로 변경

alter index "BIN$rkhg1zrdQTmpsGQuzy3gRw==$0" rename to emp_sal;

휴지통에서 테이블을 복구했으면 반드시 인덱스 이름을 원래 이름으로 되돌려주는 작업을 해줘야 합니다.

 

 

 

예제 3-8. 휴지통 비우기

purge recyclebin;

 

 

 

 

예제 4-1. KING 의 직업을 ANALYST 로 변경하고 commit

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

 

 

 

예제 4-2. KING 의 데이터를 지우고 commit

delete emp
    where ename = 'KING';
    
commit;

 

 

 

예제 4-3. 10분 전부터 현재까지 emp 테이블이 어떻게 변경되어 왔는지 확인

select versions_starttime, ename, sal, job, versions_operation
    from emp
    versions between timestamp to_timestamp('22/06/10 11:17:03', 'RR/MM/DD HH24:MI:SS')
            and maxvalue
    where ename = 'KING'
    order by versions_starttime nulls first;
728x90