Oracle

게시글 보기
작성자 유건데이타 등록일 2015-08-29
제목 COLUMN 을 DROP하는 방법
COLUMN 을 DROP하는 방법
==================================

PURPOSE
-------
Oracle8i 부터는 Table에서 필요없는 컬럼을 삭제할 수 있는 기능이
추가되었다. 그 사용방법에 대해 알아보자.


Explanation
-----------
Oracle8i 이상에서 column을 drop하려면 DROP COLUMN 구문을 이용하여
실행할 수 있다.

column을 drop하는 방법에는 실제로 column이 drop되는 시점에 따라
다음의 두 가지로 나눌 수 있다.

1. drop column command를 실행할 때 즉시 drop하는 방법.

SYNTAX : ALTER TABLE table_name DROP COLUMN column_name;

-> 해당 table의 모든 data block의 모든 row에서 그 column의 값을
삭제한다. 그러므로 large table인 경우 굉장히 오랜 시간이 걸릴 수
있으며 동시에 실행되는 dml 문장 등이 hang될 수 있으므로 주의해야
한다.

2. drop column command를 실행할 때 먼저 unused로 설정하고 나중에
다시 unused column들을 drop시키는 방법.

SYNTAX : ALTER TABLE table_name SET UNUSED COLUMN column_name;

-> drop하기 전에 column을 unused로 만들 수 있다.
실제로 data block에서 data를 삭제하지 않고 unused로만 설정하기
때문에 오래 걸리지는 않는다.
Table에 unused로 설정된 column의 갯수를 확인하기 위해서는
USER/ALL/DBA_UNUSED_COL_TABS view를 조회하면 가능하다.


위의 어떤 작업을 실행하든지 해당 column의 정보는 data dictionary에서
나오지 않으며 desc 등에서도 확인할 수 없다.

column을 drop하게 되면 그 table에 기존에 unused로 설정된 것까지
한꺼번에 drop한다.


[주의사항]

- column을 drop하면 해당 column이 포함된 모든 index와 constraint에서도
삭제되므로 주의해야 한다.

- drop된 column은 rollback할 수 없으므로 필요하다면 export 등의 backup
을 받아두는 것이 좋다.

- drop column operation은 parallel 로 실행할 수 없다.

- object table에서는 drop column을 실행할 수 없다.

- column을 drop한 후에는 analyze를 다시 해 주는 것이 좋다.


Examples
--------

1. column을 drop하는 예제

o ALTER TABLE EMP DROP COLUMN ENAME;

-> EMP table에서 ENAME column을 삭제한다.

o ALTER TABLE EMP DROP (ENAME, SAL);

-> EMP table에서 ENAME과 SAL column을 한꺼번에 삭제한다.


2. column을 unused로 설정하는 방법

o ALTER TABLE EMP SET UNUSED COLUMN ENAME;

-> EMP table의 ENAME column을 unused로 만든다.

o ALTER TABLE EMP DROP UNUSED COLUMNS;

-> EMP table에서 unused로 설정된 column을 drop할 때에는 실행한다.



Reference Documents
Comment
등록된 코멘트가 없습니다.