프로그래밍/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