오라클 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 에 있는 객체 조회 및 쿼리방법
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 > Oracle' 카테고리의 다른 글
오라클 drop 된 테이블 복원 ( Flashback ) Recycle Bin 에서 객체제거 (0) | 2017.06.23 |
---|---|
오라클 drop 된 테이블 복원 ( Flashback ) Recycle Bin 에 있는 객체 조회 및 쿼리방법 (2) | 2017.06.22 |
오라클 SQL 튜닝 by Nested Loops Join (0) | 2017.06.20 |
오라클 테이블 생성 ( not null enable ) (1) | 2017.06.01 |
테이블 logging 옵션 10초만에 변경! (1) | 2017.05.31 |