[Oracle] 테이블 삭제, 복구 : DROP TABLE(constraints, purge option), FLASHBACK TABLE

오라클 데이터베이스에서 테이블 삭제에 대해 알아보도록 합시다. 기본적인 문법은 DROP TABLE 일텐데, 이 명령에 추가적으로 단서를 주었을 때 변화하는 드랍의 기능을 중점적으로 다루어 보도록 하겠습니다.

  • DROP TABLE(CASCADE CONSTRAINTS)
  • DROP TABLE PURGE(CASCADE CONSTRAINTS)
  • FLASHBACK
  • RECYCLEBIN

DROP TABLE(CASCADE CONSTRAINTS)

Drop Table

Cascade Constraints는 종속적 제약조건까지 정리하겠다는 뜻입니다. DROP TABLE이 단순히 테이블을 삭제하는 것과 차이가 있는 부분입니다.

DROP TABLE USERNAME.TABLENAME CASCADE CONSTRAINTS;

DROP TABLE PURGE(CASCADE CONSTRAINTS)

Drop Table Purge

휴지통에 버리지 않고 완전히 삭제하겠다는 의미에서 PURGE 옵션을 추가할 수 있습니다.

완전히 삭제가 필요한 주요 보안성 테이블을 정리하기 위하여 제공하는 옵션이기 때문에 사용시 주의해 주십시오. 휴지통에 남기지 않고 테이블을 삭제하기 때문에 복구를 고려하기는 힘들 것입니다. (오라클 테크니컬 서포트를 요청하면 어떻게 될 지는 모르겠네요...)

DROP TABLE USERNAME.TABLENAME CASCADE CONSTRAINTS PURGE;

FLASHBACK (ora-38305 object not in recycle bin)

Flashback

드랍 테이블을 휴지통에서 복구할 수도 있습니다.

FLASHBACK TABLE USERNAME.TABLENAME TO BEFORE DROP;

Ora-38305 object not in RECYCLE BIN

PURGE로 삭제하시면 플래시백은 불가합니다. 그러한 이유로 드랍 퍼지 객체가 휴지통에 없다는 오류가 발생합니다.

RECYCLEBIN

테이블을 삭제하면 휴지통으로 이동합니다. 해당 휴지통을 영문으로 리사이클빈이라고 합니다.

Select Recyclebin

Select Recyclebin

드랍테이블(퍼지 안 했을 때) 휴지통을 조회해 보겠습니다.

SELECT * FROM RECYCLEBIN;

Purge Recyclebin

Purge Recyclebin

휴지통 비우기는 다음과 같은 명령어로 진행할 수 있습니다.

PURGE RECYCLEBIN;

DROP TABLE , FLASHBACK , PURGE , RECYCLE BIN

드랍 테이블, 플래시백, 퍼지 등 객체를 주제로 하여 다시 한 번 점검해 보도록 하겠습니다~ DROP TABLE 문 및 FLASHBACK, 그리고 PURGE 에 대해 알아보겠습니다. 이 글을 읽는 분은 부디... '아, 이런 기능도 있구나.' 하고 읽어보시며 학습하시는 분이거나, PURGE로 테이블을 완전히 삭제하지 않으신 분이길 바랍니다. 예제는 다음과 같습니다.

oracle drop table 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

oracle drop table

테이블을 드랍하였습니다. 물론 실무에 이런 식으로 DROP 을 함부로 하시면 안 돼요~!

DROP TABLE USERNAME.TB_DROP CASCADE CONSTRAINTS;

SELECT FROM DROPPED TABLE

oracle drop table does not exist

테이블이 드랍됐으니 당연히 조회가 되지 않겠죠?

SELECT * FROM USERNAME.TB_DROP;

SELECT * FROM RECYCLEBIN;

oracle drop table recyclebin

DROP 을 실수로 덜컥 해버렸다면... 휴지통에 남아있을 가능성이 있습니다. 이 때에는 복구가 가능하답니다!

FLASHBACK TABLE TB_DROP TO BEFORE DROP;

oracle drop table flashback

드랍 이전 상태로 돌리는 명령어 입니다.

SELECT FROM FLASHBACKED TABLE

oracle drop table select

다행히 복구가 정상적으로 이루어졌습니다. SELECT 를 해보니 테이블이 조회가 되는 것을 확인하였답니다.

DROP TABLE PURGE

oracle drop table purge

그런데 DROP TABLE 명령에 PURGE 를 포함하면 휴지통에 남기지 않고 드랍합니다.

DROP TABLE USERNAME.TB_DROP CASCADE CONSTRAINTS PURGE;

oracle drop table purge flashback

퍼지 옵션으로 드랍한 테이블을 복구하려고 시도할 때에 발생할 수 있는 오류는 다음과 같습니다. ORA-38305: object not in RECYCLE BIN (ORA-38305: 객체가 RECYCLE BIN에 없음) RECYCLE BIN 에 없으니 당연히 FLASHBACK 이 안 될 것입니다. DROP 문은 항상 조심 또 조심하셔야 합니다. 특히 PURGE 는 정말 신중하게 진행하셔야 합니다.

댓글