본문 바로가기

Oracle/SQL

SQL - Flashback DROP 된 데이터 복구 (인덱스도 함께 복구)

DROP 시킨 데이터 복구 하기

CREATE INDEX EMP_SAL_IDX
ON EMP(SAL);

→ 해당 테이블은  인덱스가 존재한 상태

DROP TABLE EMP;

→ 테이블을 drop 시킴.

 

1. 휴지통속 emp 테이블 확인 ( 삭제된 인덱스 이름들 꼭 복사해놓기) 

select object_name, original_name, droptime
from user_recyclebin;

→ 확인해보면 emp 테이블과 연관된 인덱스들도 같이 휴지통으로 들어간다.
 index 이름이 뭐였는지 original_name 에 있는 이름을 잘 확인해야한다.(어디 복사해놓아야함!!!!) 

2. 휴지통속에있는 테이블을 밖으로 복원하는 명령어

FLASHBACK table emp to before drop;

→ drop 되기 전으로 플래시백 시키는작업이다.

3. emp_sal_idx 인덱스도 복구되었는지 확인

select index_name
from user_indexes
where table_name='EMP';

→ 인덱스 이름이 휴지통으로 들어갔다 와서 이상하다 

4. 인덱스 이름을 원래 이름으로 변경 (그래서 아까전에 인덱스 이름 복사해놓으라고 한것 ) 

alter index "BIN$ykx6Z4DZRzGMF5GP9RyplQ==$0"  rename to emp_sal_idx;

→ " " 더블 쿼테이션 둘러주어야한다


휴지통 비우기 (이건.. 몰라도됨.. ) 

purge recyclebin;

dept 테이블에 loc, dname 컬럼에 인덱스를 걸어준후 dept 테이블을 drop 시키기

 

create index detp_loc_idx
on dept(loc);

create index dept_dname_idx
on dept(dname);

drop table dept;

 

1. 휴지통확인

select object_name, original_name, droptime
from user_recyclebin;

INDEX 복구할 준비 해놓아야한다. 

오라클 셀렉절에 아예 문장을 한번에 만드는 방법도 있다. 

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

밑에 나오는 실행 계획을 복붙 하여 INDEX 이름을 바꿔놓을 준비 할것

2. 휴지통에서 빼오는 작업

flashback table dept to before drop;

3. 아까 복붙 해놓은 INDEX 이름을 변경 해준다.

아니면 NOTEPAD ++ 를 이용해서 해도된다~