본 문서는 Recyclebin을 활용하여 DROP TABLE 명령으로 삭제된 테이블을 복구하는 방법을 안내합니다.
1. 개요
사용자의 실수로 테이블이 삭제되었을 때, 휴지통 기능을 활용하면 긴급 상황에서 테이블을 신속히 복구 할 수 있습니다.
ex) 아래와 같이 신속한 복구가 가능합니다.
- 실수로 “EMP” 테이블을 삭제
SQL> DROP TABLE EMP;
- 테이블 조회 시 장애 발생
SQL> SELECT * FROM EMP; -- 에러 발생!!
TBR-8033: Specified schema object was not found.
- RECYCLEBIN 조회
SQL> SELECT OWNER, OBJECT_NAME, TYPE, TS_NAME, DROPTIME
FROM DBA_RECYCLEBIN
WHERE ORIGINAL_NAME='T100';
OWNER OBJECT_NAME TYPE TS_NAME DROPTIME
----------- ---------------------- -------- ------------- ----------------------------
EDU EDU_TBL285600 TABLE TBS_EDU 2020-09-08:05:28:14
- “EMP” 테이블을 신속히 복구
SQL> FLASHBACK TABLE EMP TO BEFORE DROP;
SQL> SELECT * FROM EMP; -- 정상적으로 수행됨!!
2. Issue Case Study
2.1. 테이블 삭제와 복구
테이블 삭제 시, 휴지통 기능이 활성화 되어 있을 경우 다음과 같이 동작합니다.
- 파라미터 USE_RECYCLEBIN 값이 Y 로 설정되어 있을 경우 RECYCLEBIN 에 오브젝트가 저장됩니다.
- 테이블을 제거 하지 않고 이름과 상태를 변경합니다. (삭제 전 테이블 이름을 별도 저장합니다.)
- 테이블, 인덱스, 제약조건의 이름이 시스템에서 부여하는 이름으로 변경됩니다.
- 테이블스페이스에서 세그먼트가 유지되며, 이름만 바뀝니다.
- 외래키 제약조건은 제거됩니다.
2.1.1. RECYCLE BIN 이란
- Recycle Bin(휴지통)은 Drop 된 테이블들을 삭제 처리 하지 않고 보관함으로써 사용자의 실수로부터 삭제된 테이블을 신속히 복구하기 위한 역할을 수행합니다.
- Drop 된 테이블이 Recycle Bin으로 이동될 때, 그것과 연관된 객체와 제약 조건들은 이름이 변경됩니다. (이후에 생성되는 테이블과의 이름이 충돌 되는 것을 방지하기 위해서 입니다.)
- Recycyle Bin 자체는 데이터 딕셔너리이며, 사용자는 DBA_RECYCLEBIN 뷰를 통해 Recycle Bin 에 있는 테이블 리스트를 조회 할 수 있습니다.
- Recycyle Bin 기능이 활성화 되어 있을 경우, DROP TABLE tableName PURGE; 구문을 통해 휴지통으로 이동하지 않고 완전히 삭제할 수 있습니다.
- Drop 된 테이블은 기존 테이블스페이스의 공간을 사용하면서 계속 존재하며, PURGE TABLE tableName; 구문을 통해 휴지통에서 제거할 수 있습니다.
- 휴지통을 완전히 비울 시 PURGE RECYCLEBIN; 를 수행합니다.
2.1.2. 삭제한 테이블 조회
삭제한 테이블은 RECYCLE BIN 에서 다음과 같이 확인 할 수 있습니다.
- DBA_RECYCLEBIN 에서 삭제한 테이블을 조회합니다.
- DBA_TABLES, DBA_INDEXES 에서는 테이블이 더 이상 조회가 안 됩니다.
- DBA_OBJECTS 에서 시스템에서 부여한 변경된 OBJECT_NAME 으로 조회 됩니다. (STATUS 값은 INVALID)
(변경된 이름은 Ownername_tblSeqNum 형식으로 SeqNum 는 계속 sequence 에 의해 증가 됩니다.)
- DBA_SEGMENTS 에서 시스템에서 변경된 SEGMENT_NAME 으로 조회 됩니다.
2.1.3. 복구 방법
다음 구문으로 복구할 수 있습니다. => FLASHBACK TABLE tableName TO BEFORE DROP;
예) FLASHBACK TABLE EDU.T100 TO BEFORE DROP;
다른 이름으로 복구 할 수 있습니다. => FLASHBACK TABLE tableName TO BEFORE DROP RENAME TO tableName;
예) FLASHBACK TABLE EDU.T100 TO BEFORE DROP RENAME TO T101;
- 테이블이 복원되면 인덱스, 제약조건 등 관련된 오브젝트들도 같이 복원됩니다.
- 테이블을 복원하면 테이블의 이름은 이전 상태로 복구되거나 지정한 대로 변경됩니다.
- 인덱스, 제약조건의 이름은 원래의 이름으로 복구되지 않습니다.
- 외래키는 복구 되지 않습니다.
2.1.4. 복구가 불가능한 경우
다음과 같은 경우에는 USE_RECYCLEBIN 을 Y 로 설정하더라도 RECYCLEBIN 으로 오브젝트가 들어가지 않아 FLASHBACK TABLE 이 불가능합니다.
- EMP 테이블을YS 계정의 오브젝트를 DROP 할 경우 DROP 할 경우
- S – ALTER MOVE 한 경우 원본 테이블