본문 바로가기

데이터베이스/오라클

[오라클]플래쉬백(Flashback)을 통한 데이터 복구 -4 (TABLE LEVEL FLASHBACK, 휴지통(RECYCLE BIN))


 오라클 10g 버전 이후부터 도입하게 된 휴지통 기능은 윈도우의 그것과 비슷한 기능을 합니다.
비록 지웠다고는 하나, 다시 되살릴 수 있는 것이죠. 그래서 혹시나 모를 데이터의 손실도 방지합니다.

 사용방법은 테이블 드롭을 하게 되면 휴지통(Recycle Bin)에 위치하게 되는데, 이때 이름만 바꿔서 위치하게 됩니다.
물론 그자리에 다른 테이블이나 객체가 그 용량만큼 다시 자리를 잡을 수 있지만, 그렇게 되면 앞으로 하게될 플래쉬백 복구 기능을 사용하지 못합니다.

 휴지통 기능을 사용하는 방법은 다음과 같습니다.
전 글에서 썻던 ftest 테이블을 이용해서 진행하겠습니다.


[실행화면] : 인덱스를 만듭니다.



[실행화면] : 해당 테이블을 DROP시킵니다.

 

[실행화면] : DROP후 테이블을 확인합니다.



 보시는 바와 같이 테이블이 존재 하지 않습니다.
그렇다면, 휴지통을 확인합니다.


 오리지널 네임이라고해서 이전 테이블의 이름이 나옵니다. 근데 휴지통의 이름은 "BIN~" 으로 해서 바뀌었네요.
그렇다면 이 테이블이 휴지통으로 들어가기전 만들었던 인덱스를 조회해 봅니다.

 보시게 되면 참조하고 있는 테이블의 이름이 휴지통의 그것과 똑같습니다.
여기서 알게 되는건 휴지통으로 들어가도 인덱스는 계속 그 테이블을 가리키고 있다는 말이 됩니다.

 그렇다면 다음과 같이 플래쉬백 테이블 복구를 해봅니다.

SQL> FLASHBACK TABLE 테이블명 TO BEFORE DROP;


 이것을 쓰게 되면 방금전 드롭했던 테이블이 복구가 됩니다.
복구 조건은 처음에도 말했지만, 원래 테이블이 위치하던 디스크 공간에 다른 테이블이 쓰게되면 이 기능은 쓰질 못합니다.

[실행화면] : 플래쉬백 복구를 합니다.

 
 완료되었다는 메시지가 확인 되었으면, 테이블 조회도 해보고 다음처럼 인덱스 조회도 해봅니다.



 인덱스를 조회했더니, 휴지통에서 쓰던 이름과 동일합니다. 복구가 된다 하더라도 그 이름이 안바꼈단 말이겠죠.
그렇다면 원하는 이름으로 바꿔주면 되겠습니다.

 휴지통 기능이면 비우는 기능도 있어야겠죠? 그와 관련된 명령어는 'PURGE' 입니다.
다음과 같이 쓸수 있겠습니다.

SQL> PURGE TABLE 테이블명;  - 휴지통에 있는 테이블을 제거합니다.
SQL> PURGE RECYCLEBIN; - 휴지통을 비웁니다.
SQL> DROP TABLE 테이블명 PURGE; - 휴지통에 넣지않고, 바로 삭제 해버립니다.
 
도움 되셨다면 밑의 추천(손가락 표시)과 댓글 부탁드립니다.