오라클 데이터베이스에서 테이블 삭제에 대해 알아보도록 합시다. 기본적인 문법은 DROP TABLE 일텐데, 이 명령에 추가적으로 단서를 주었을 때 변화하는 드랍의 기능을 중점적으로 다루어 보도록 하겠습니다.
- DROP TABLE(CASCADE CONSTRAINTS)
- DROP TABLE PURGE(CASCADE CONSTRAINTS)
- FLASHBACK
- RECYCLEBIN
DROP TABLE(CASCADE CONSTRAINTS)
Cascade Constraints는 종속적 제약조건까지 정리하겠다는 뜻입니다. DROP TABLE이 단순히 테이블을 삭제하는 것과 차이가 있는 부분입니다.
DROP TABLE USERNAME.TABLENAME CASCADE CONSTRAINTS;
DROP TABLE PURGE(CASCADE CONSTRAINTS)
휴지통에 버리지 않고 완전히 삭제하겠다는 의미에서 PURGE 옵션을 추가할 수 있습니다.
완전히 삭제가 필요한 주요 보안성 테이블을 정리하기 위하여 제공하는 옵션이기 때문에 사용시 주의해 주십시오. 휴지통에 남기지 않고 테이블을 삭제하기 때문에 복구를 고려하기는 힘들 것입니다. (오라클 테크니컬 서포트를 요청하면 어떻게 될 지는 모르겠네요...)
DROP TABLE USERNAME.TABLENAME CASCADE CONSTRAINTS PURGE;
FLASHBACK (ora-38305 object not in recycle bin)
드랍 테이블을 휴지통에서 복구할 수도 있습니다.
FLASHBACK TABLE USERNAME.TABLENAME TO BEFORE DROP;
PURGE로 삭제하시면 플래시백은 불가합니다. 그러한 이유로 드랍 퍼지 객체가 휴지통에 없다는 오류가 발생합니다.
RECYCLEBIN
테이블을 삭제하면 휴지통으로 이동합니다. 해당 휴지통을 영문으로 리사이클빈이라고 합니다.
Select Recyclebin
드랍테이블(퍼지 안 했을 때) 휴지통을 조회해 보겠습니다.
SELECT * FROM RECYCLEBIN;
Purge Recyclebin
휴지통 비우기는 다음과 같은 명령어로 진행할 수 있습니다.
PURGE RECYCLEBIN;
DROP TABLE , FLASHBACK , PURGE , RECYCLE BIN
드랍 테이블, 플래시백, 퍼지 등 객체를 주제로 하여 다시 한 번 점검해 보도록 하겠습니다~ DROP TABLE 문 및 FLASHBACK, 그리고 PURGE 에 대해 알아보겠습니다. 이 글을 읽는 분은 부디... '아, 이런 기능도 있구나.' 하고 읽어보시며 학습하시는 분이거나, PURGE로 테이블을 완전히 삭제하지 않으신 분이길 바랍니다. 예제는 다음과 같습니다.
--상기 예제 문장입니다.
DROP TABLE USERNAME.TB_DROP CASCADE CONSTRAINTS;
DROP TABLE USERNAME.TB_DROP CASCADE CONSTRAINTS PURGE;
CREATE TABLE USERNAME.TB_DROP
(
C1 VARCHAR2(1 BYTE)
)
TABLESPACE TABLESPACENAME
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64M
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
INSERT INTO USERNAME.TB_DROP VALUES ('1');
SELECT * FROM RECYCLEBIN;
FLASHBACK TABLE TB_DROP TO BEFORE DROP;
SELECT * FROM USERNAME.TB_DROP;
PURGE TABLE USERNAME.TB_DROP;
DROP TABLE
테이블을 드랍하였습니다. 물론 실무에 이런 식으로 DROP 을 함부로 하시면 안 돼요~!
DROP TABLE USERNAME.TB_DROP CASCADE CONSTRAINTS;
SELECT FROM DROPPED TABLE
테이블이 드랍됐으니 당연히 조회가 되지 않겠죠?
SELECT * FROM USERNAME.TB_DROP;
SELECT * FROM RECYCLEBIN;
DROP 을 실수로 덜컥 해버렸다면... 휴지통에 남아있을 가능성이 있습니다. 이 때에는 복구가 가능하답니다!
FLASHBACK TABLE TB_DROP TO BEFORE DROP;
드랍 이전 상태로 돌리는 명령어 입니다.
SELECT FROM FLASHBACKED TABLE
다행히 복구가 정상적으로 이루어졌습니다. SELECT 를 해보니 테이블이 조회가 되는 것을 확인하였답니다.
DROP TABLE PURGE
그런데 DROP TABLE 명령에 PURGE 를 포함하면 휴지통에 남기지 않고 드랍합니다.
DROP TABLE USERNAME.TB_DROP CASCADE CONSTRAINTS PURGE;
퍼지 옵션으로 드랍한 테이블을 복구하려고 시도할 때에 발생할 수 있는 오류는 다음과 같습니다. ORA-38305: object not in RECYCLE BIN (ORA-38305: 객체가 RECYCLE BIN에 없음) RECYCLE BIN 에 없으니 당연히 FLASHBACK 이 안 될 것입니다. DROP 문은 항상 조심 또 조심하셔야 합니다. 특히 PURGE 는 정말 신중하게 진행하셔야 합니다.