반응형

오라클 drop 된 테이블 복원 ( Flashback ) Recycle Bin 이란 무엇인가


실수로 삭제하지 않아야 할 테이블을 삭제했을 경우 당혹스러울 때가 있는데 오라클에서는 drop 된 테이블도 복원할 수 있는 기능이 있습니다.

바로 Flashback 이라는 기능인데 테이블을 drop 할 때 데이터베이스는 테이블과 연관된 공간을 바로 제거하지는 않습니다.

데이터베이스는 테이블의 이름을 변경하여 관련 오브젝트를 Recycle Bin에 넣습니다.


위에서 말한대로 사용자가 실수로 테이블을 drop 했을 때 복구할 수 있습니다.

이 기능을 Flashback Drop 이라고하며 FLASHBACK TABLE 문을 사용하여 테이블을 복원 가능합니다.

FLASHBACK TABLE 문을 사용하기 전에 Recycle Bin의 작동 방식과 관리방법을 이해하도록 하겠습니다.



FlashBack 에 대한 내용은 4가지 주제로 구성됩니다.


1. Recycle Bin 이란 무엇인가?

2. Recycle Bin 에 있는 객체 조회 및 쿼리방법

3. Recycle Bin 에 있는 객체 제거

4. Recycle Bin 에서 테이블 복원





1. Recycle Bin 이란 무엇인가?


Recycle Bin 은 실제로 삭제된 객체(Table, Index 등)의 정보가 들어있는 데이터 사전 테이블입니다.

삭제된 테이블 및 인덱스, PK 등 관련된 객체는 제거되지 않고 여전히 공간을 차지하고 있습니다.


Recycle Bin 에서 특별히 제거 될 때까지 또는 사용자가 테이블 스페이스 제한으로 인해 데이터베이스에서 제거할 때까지 사용자공간에 계속 쌓여있습니다.


각각의 사용자들은 자신의 Recycle Bin이 있는것으로 보면 됩니다.

사용자가 SYSDBA 권한이 없으면 사용자가 휴지통에 액세스 할 수 있는 객체는 자신이 소유한 객체에만 권한이 있습니다.

자신이 소유한 객체의 Recycle Bin 을 확인하는 방법은 아래 문법을 사용하면 됩니다.



SELECT * FROM RECYCLEBIN;



데이터를 포함하여 테이블스페이스를 삭제할 때, 테이블스페이스의 객체는 Recycle Bin에 저장되지 않으며 

데이터베이스는 테이블스페이스에있는 객체의 Recycle Bin에있는 항목을 제거합니다.


또한 데이터베이스는 데이터를 포함하지 않고 테이블스페이스를 삭제할 때 

테이블스페이스의 오브젝트에 대한 Recycle Bin 항목을 제거하고, 그렇지 않으면 테이블스페이스를 비워둡니다.


  • 사용자를 삭제하면 해당 사용자에 속한 모든 객체가 Recycle Bin 에 저장되지 않고 Recycle Bin의 모든 객체가 제거됩니다.
  • 클러스터를 삭제하면 멤버의 테이블이 Recycle Bin 에 저장되지 않고 Recycle Bin 의 이전 멤버 테이블이 제거됩니다.
  • type 을 삭제하면 하위타입과 같은 종속된 오브젝트가 Recycle Bin 에 배치되지 않고 Recycle Bin 에 있는 이전의 종속된 오브젝트가 제거됩니다.



Recycle Bin 에서의 이름생성 규칙


삭제된 테이블을 Recycle Bin으로 이동하면 테이블과 관련 개체의 이름은 시스템이 생성하게 됩니다.

여러 테이블의 이름이 같을 경우 이름이 충돌되는 내용이 발생할 수 있습니다.

위와 같은 상황은 아래와 같을 때 발생할 수 있습니다.


  • 사용자가 테이블을 삭제하고 같은 이름으로 다시 생성한 후 다시 삭제한 경우
  • 두명의 사용자가 같은 이름의 테이블을 가지고 있을 때 두 사용자가 테이블을 삭제한 경우


Recycle Bin 의 이름변경규칙은 다음과 같습니다.


    BIN$unique_id$version


이름작성규칙

  • unique_id 는 Recycle Bin 의 전역적으로 unique한 26자의 식별자로, 모든 데이터베이스에서 unique 한 Recycle Bin 의 이름으로 만듭니다.
  • version 은 데이터베이스에 의해 할당된 버전의 번호입니다.




Recycle Bin 활성화 및 비활성화



Recycle Bin 초기화 파라메터를 사용하여 Recycle Bin을 활성화 시키거나 비활성화 시키도록 설정할 수 있습니다.


Recycle Bin이 활성화되는 경우

 - 삭제된 테이블과 관계된 객체들은 Recycle Bin에 저장됩니다.


Recycle Bin이 비활성화되는 경우

 - 삭제된 테이블과 관계된 객체들은 Recycle Bin에 저장되지 않습니다.

   단순히 Drop 된 테이블이기 때문에 다른수단을 사용하여 복구해야 합니다.

   ( ex : 기존에 백업해놓은 곳에서 복구 )

   



Recycle Bin 의 Default 값은 활성화로 되어있습니다.


Recycle Bin 비활성화 하는 방법

( 아래문장 중 하나를 실행하시면 됩니다. )

ALTER SESSION SET recyclebin = OFF;
ALTER SYSTEM  SET recyclebin = OFF;


Recycle Bin 활성화 하는 방법

( 아래문장 중 하나를 실행하시면 됩니다. )

ALTER SESSION SET recyclebin = ON;
ALTER SYSTEM  SET recyclebin = ON;


ALTER SYSTEM 또는 ALTER SESSION 으로 Recycle Bin 을 활성화 및 비활성화하면 즉시 적용됩니다.

Recycle Bin 을 비활성화해도 이미 Recycle Bin 에 있는 객체가 제거되거나 영향을 미치지 않습니다.


다른 초기화 파라메터와 마찬가지로 텍스트 초기화 파일인 initSID.ora 에서 recyclebin 의 파라메터 초기값을 설정할 수 있습니다.


recyclebin=on
recyclebin=off



이상으로 Recycle Bin 에 대해 알아보았습니다.

다음에 뒷 부분에 대해서 포스팅하도록 하겠습니다.



반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,