▷ RECYCLEBIN (휴지통) 이란?
Oracle에는 10g 버전부터 휴지통(RECYCLEBIN)이라고 불리는 공간이 존재합니다.
RECYCLEBIN은 테이블 Drop 시, 완전히 삭제되어서 저장 공간이 반환되기 전 이동하는 공간으로 바로 복구가 가능한 기능을 제공합니다. (Windows 휴지통과 유사)
객체가 DROP 될 때, 해당 객체는 완전히 삭제되는 것이 아니라 휴지통으로 이동되고 휴지통에 이동된 객체는 'BIN$' 접두어가 붙은 이름으로 저장됩니다.
참고로 DROP 명령어는 DDL 명령어로, 명령문이 수행된 후 자동으로 COMMIT 되기 때문에 ROLLBACK이 되지 않습니다.
▷ RECYCLEBIN 관련 뷰
- USER_RECYCLE_BIN (= RECYCLEBIN)
: 현재 사용자의 휴지통 객체에 대한 정보를 제공, 사용자 자기 자신이 직접 DROP한 오브젝트 볼 수 있는 뷰
- DBA_RECYCLEBIN
: 모든 사용자의 휴지통 객체에 대한 정보를 제공, 관리자가 DROP된 모든 오브젝트를 볼 수 있는 뷰
▷ DAB_RECYCLEBIN 뷰 컬럼 설명
Column | Description |
OWNER | Object의 원래 소유자명 (USER_RECYCLE_BIN에서는 제외되는 컬럼) |
OBJECT_NAME | Recyclebin에서 사용하는 Object의 새 이름 |
ORIGINAL_NAME | Object의 Original name (원래 테이블, 인덱스 명 확인 가능) |
OPERATION | Object에 대해 수행된 작업 (ex. DROP, TRUNCATE) |
TYPE | Object 유형 (Table, Index 등) |
TS_NAME | Object가속한 Tablespace 이름 |
CREATETIME | Object 생성 시간 |
DROPTIME | Object Drop 시간 |
DROPSCN | Object를 Recyclebin으로 옮긴 트랜잭션 SCN |
PARTITION_NAME | 삭제된 파티션 명 |
CAN_UNDROP | Object를 Drop 취소할 수있는지(Yes) 없는지(No) 확인 |
CAN_PURGE | Object를 Purge 할 수있는지(Yes) 없는지(No) 확인 |
RELATED | 상위 Object 번호 |
BASE_OBJECT | 기본 Object 번호 |
PURGE_OBJECT | Purge되는 Object 번호 |
SPACE | Object가사용하는 block 수 |
▷ RECYCLEBIN Object의 네이밍 규칙
- RECYCLEBIN의 오브젝트 이름은 동일 이름 충돌을 방지하기 위해 고유 이름을 사용합니다.
BIN$[Unique_id]$[Version] ex) BIN$+hFk2F4lQsjgUzOKEKxu1Q==$0 |
▷ RECYCLEBIN 기능 활성화 조회
‘on’이면 활성화 되어있는 상태, ‘off’이면 비활성화 상태입니다.
SQL> select name, value from v$parameter where name like '%recyclebin%'; SQL> show parameter recyclebin; NAME TYPE VALUE -------------------------------- ----------- -------------------- recyclebin string on |
▷ RECYCLEBIN 활성화/비활성화
● 시스템레벨 수준 (DB 재시작 후 적용 가능)
SQL> ALTER SYSTEM SET RECYCLEBIN=ON SCOPE=SPFILE; |
● 세션레벨 수준
SQL> ALTER SESSION SET RECYCLEBIN=ON; |
▷ 휴지통 Object 조회
● user가 직접 drop 한 휴지통 object 조회 (Drop 한 시간 기준)
SQL> SELECT * FROM [RECYCLEBIN | USER_RECYCLEBIN] order by droptime desc; |
● 관리자가 DROP된 모든 Object를 볼 수 있는 뷰 (sys 계정 실행)
SQL> SELECT * FROM DBA_RECYCLEBIN order by droptime desc; |
- 휴지통 Object 조회 예시
SQL> select * from t1; SQL> drop table t1; SQL> select * from RECYCLEBIN order by droptime desc; --recyclebin 내 object_name 기준 조회 (원래 테이블 내용이 조회됩니다.) SQL> select * from "BIN$BIHn+L+mQB/gYwo4qMBS/A==$0"; |
▷ 휴지통에 있는 Object 복구
● 같은 테이블 이름으로 복구 (인덱스도 같이 복구되지만 Original name으로 변경 필요)
SQL> FLASHBACK TABLE “[OBJECT_NAME]” TO BEFORE DROP; SQL> FLASHBACK TABLE [ORIGINAL_NAME] TO BEFORE DROP; |
- 같은 테이블 이름으로 복구 예시
SQL> select OBJECT_NAME, ORIGINAL_NAME, OPERATION, TYPE, TS_NAME, CREATETIME, DROPTIME from RECYCLEBIN order by droptime desc; -- Object_name으로 복구 SQL> FLASHBACK TABLE “BIN$BIHn+L+mQB/gYwo4qMBS/A==$0” TO BEFORE DROP; -- Orignal_name으로 복구 SQL> FLASHBACK TABLE t1 TO BEFORE DROP; -- 복구한 t1 테이블 조회 SQL> select * from t1; |
● 다른 테이블 이름으로 복구
SQL> FLASHBACK TABLE [ORIGINAL_NAME] TO BEFORE DROP RENAME TO [테이블명]; |
- 다른 테이블 이름으로 복구 예시
SQL> select OBJECT_NAME, ORIGINAL_NAME, OPERATION, TYPE, TS_NAME, CREATETIME, DROPTIME from RECYCLEBIN order by droptime desc; -- t1 테이블을 object_name을 이용해 t1_bak로 이름으로 복구 SQL> FLASHBACK TABLE "BIN$BIHn+L+yQB/gYwo4qMBS/A==$0" TO BEFORE DROP RENAME TO t1_bak; -- t1 테이블을 Recyclebin의 Orignal_name을 이용해 t1_bak로 이름으로 복구 SQL> FLASHBACK TABLE t1 TO BEFORE DROP RENAME TO t1_bak; SQL> select * from t1_bak; |
▷ 휴지통 테이블 복구시 종속된 인덱스 복구
Drop된 테이블을 복구할 경우 테이블에 종속된 인덱스도 같이 복구되는데 Original name이 아닌 Object name(Bin$로 시작하는 이름)으로 복구됩니다.
Original name로 복구하려면 수동으로 변경해줘야 합니다.
따라서 테이블을 복구하기 전에 각 Object의 Original name을 기록해 두어야 복구 후 이름을 수정하여 원래 테이블, 인덱스명으로 사용할 수 있습니다.
- 테이블 복구시 인덱스 복구 예시
-- t1 테이블 인덱스 조회 select table_name, index_name, column_name from user_ind_columns; -- t1 테이블 Drop Drop table t1; -- recyclebin 조회 select OBJECT_NAME, ORIGINAL_NAME, OPERATION, TYPE, TS_NAME, CREATETIME, DROPTIME from RECYCLEBIN order by droptime desc; -- t1 테이블 복구 FLASHBACK TABLE t1 TO BEFORE DROP; -- t1 테이블 인덱스 조회 (Object name 명으로 복구된 것을 확인) select table_name, index_name, column_name from user_ind_columns; -- Original name으로 인덱스명변경 ALTER INDEX "BIN$BJO6cl1DCpbgYwo4qMCtRw==$0" RENAME TO PK_T1; -- t1 테이블 인덱스 조회 select table_name, index_name, column_name from user_ind_columns; |
▷ 휴지통 Object 삭제
● 휴지통에 있는 OBJECT_NAME 별로 삭제 명령어
-- OBJECT_NAME 으로 삭제 SQL> PURGE TABLE “[OBJECT_NAME]”; |
● 휴지통에 있는 ORIGNAL_NAME 별로 삭제 명령어
-- ORIGNAL_NAME 으로 삭제 SQL> PURGE TABLE [ORIGNAL_NAME]; |
▷ 휴지통 비우기
● 전체 휴지통 비우기
sqlplus / as sysdba 접속 후 아래 명령 실행
$ sqlplus / as sysdba SQL> PURGE DBA_RECYCLEBIN; DBA Recyclebin purged. |
● Login 계정의 휴지통 비우기
SQL> PURGE RECYCLEBIN; |
ORACLE Database의 RECYCLEBIN 기능은 실수로 삭제된 객체의 복원을 위한 강력한 도구로써, 데이터 관리에 큰 도움을 제공합니다.
'일 > 개발, IT정보' 카테고리의 다른 글
Cisco Catalyst 스위치 제품 번호 읽는 방법 (0) | 2024.10.20 |
---|---|
UDF와 Scalar T-SQL UDF Inlining (0) | 2024.10.19 |
DAS, NAS, SAN 스토리지 개념 (1) | 2024.10.16 |
Oracle 실행 계획 확인 / 쿼리 튜닝과 최적화 (0) | 2024.10.15 |
DB 이상현상, 정규화 과정 (3) | 2024.10.14 |