컬럼 drop에 대해서는 많이 언급했었다. 어디서? --; 컬럼 unused는 부하가 많은 곳에서 바로 drop하기 전에 사용하면 좋을 것 같다.
오라클 8i부터 사용되지 않는 컬럼에 대해 사용하지 않겠다고 mark할 수 있으며(unused) 이럴 경우 질의시 보이지 않는다. 실제 보이지만 않을 뿐이지 물리적인 부분은 그대로 있으므로 이 시점에서 사용된 공간이 반환되는 것은 아니다. 보통 컬럼의 drop으로 부하가 많이 걸릴 수 있을때 일단 unused해 뒀다가 후에 한가한(?) 시간에 drop할 용도로 사용하면 되겠다.
SQL> select * from test;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 80/12/17 800 20 7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30 7521 WARD SALESMAN 7698 81/02/22 1250 500 30 7566 JONES MANAGER 7839 81/04/02 2975 20
SQL> alter table test set unused(job,deptno); -- job,deptno를 사용하지 않겠다
테이블이 변경되었습니다.
SQL> select * from test; -- 보면 job,deptno가 이젠 표시되지 않는다.
EMPNO ENAME MGR HIREDATE SAL COMM ---------- ---------- ---------- -------- ---------- ---------- 7369 SMITH 7902 80/12/17 800 7499 ALLEN 7698 81/02/20 1600 300 7521 WARD 7698 81/02/22 1250 500 7566 JONES 7839 81/04/02 2975
SQL> select * from user_unused_col_tabs; -- 이처럼 질의하면 unused 정보를 알 수 있다.
TABLE_NAME COUNT ------------------------------ ---------- TEST 2
SQL> alter table test drop unused columns; -- unused된 공간을 release하자.
테이블이 변경되었습니다.
SQL> select * from user_unused_col_tabs; -- 이젠 unused된 컬럼이 없다.^^
선택된 레코드가 없습니다.
위에서 alter table test drop unused columns 는 모든 unused된 컬럼들을 drop한다. 특정 컬럼만 drop하고 싶으면 당근 drop column구문을 사용하면 되겠다. 예를 들어, job컬럼만 drop 하고자 한다면,
alter table test drop column (job);
끝.
| This article comes from dbakorea.pe.kr (Leave this line as is)
|