레이블이 #오라클컬럼삭제인 게시물을 표시합니다. 모든 게시물 표시
레이블이 #오라클컬럼삭제인 게시물을 표시합니다. 모든 게시물 표시

2021년 11월 13일 토요일

오라클 대용량 테이블 컬럼 삭제(Oracle Set Unused)

 

오라클 대용량 테이블 컬럼 삭제(Oracle Set Unused)


대용량 테이블의 큰 사이즈를 가지는  칼럼은 경우 서비스중 삭제 하기에는 시스템에 부담이 되어 미래에 삭제하기 위해 사용 안 한다고 표시하는 것으로 한번 UNUSED로 지정된 칼럼은 다시 사용한다고 되돌리기는 불가능하고 DESC 명령어로 칼럼이 나타나지 않으며 DML 사용시 해당 칼럼은 사용 불가능 합니다. SET UNUSED 구문은 오라클 8i 이후 사용 가능 합니다.


[기본형식]

ALTER TABLE table_name SET UNUSED (column_name)


SET UNUSED를 이용하는 것을 컬럼의 논리적 삭제logical delete라고 하고 ALTER TABLE ~ DROP COLUMN을 이용하는 것은 컬럼의 물리적 삭제 physical delete라고 합니다.


SET UNUSED로 컬럼을 사용안한다고 표시 후 DROP UNUSED COLUMNS 구문으로 UNUSED된 컬럼을 물리적으로 삭제할 수 있습니다. 


EMP10 테이블을 생성하고 ename 컬럼을 UNUSED 컬럼으로 변경 후 딕셔너리 뷰를 통해 일반 컬럼 및 UNUSED된 컬럼(히든 컬럼hidden column)을 조회해 보고 히든 컬럼을 물리적으로 삭제하는 실습을 해보겠습니다.

실습


실습을 위해 EMP10 테이블을 생성 합니다.


다음과 같은 조건으로 EMP10 테이블을 생성하세요.


  • 사번(empno) number, primary key(table level constraints)

  • 성명(ename) varchar2(50)


CREATE TABLE EMP10 (

     EMPNO NUMBER ,                                          

     ENAME VARCHAR2(50) ,

     CONSTRAINTS PK_EMP10 PRIMARY KEY(EMPNO)

);



<실행결과>

Table EMP10이(가) 생성되었습니다.


EMP10이 대용량 테이블이라고 가정을 하고 ename 칼럼을 삭제하고 싶은데 낮에 DB에 사용자들의 접속이 많은 시간에는 삭제 하기가 어려워 SET UNUSED로 사용하지 않음을 표시하고 추후 사용자들의 접속이 뜸한 시점에 DROP UNUSED COLUMN으로 삭제를 하려고 합니다.


ename 컬럼을 사용안하는 컬럼으로 변경하세요.


ALTER TABLE EMP10 SET UNUSED(ENAME); 


<실행결과>

Table EMP10이(가) 변경되었습니다.


UNUSED된 컬럼의 개수는 USER_UNUSED_COL_TABS 딕셔너리 뷰에서 조회할 수 있습니다.


USER_UNUSED_COL_TABS 딕셔너리 뷰에서 EMP10 테이블을 조회합니다.


SELECT * 

FROM  USER_UNUSED_COL_TABS

WHERE TABLE_NAME = 'EMP10';


<실행결과>

 

TABLE_NAME

COUNT

1

EMP10

1


USER_TAB_COLS 딕셔너리 뷰는 현재 사용자가 소유 한 테이블, 뷰의 컬럼의 정보를 제공 합니다.SET UNUSED된 히든 컬럼hidden column이 보인다는 점에서 USER_TAB_COLUMNS와 다릅니다. 


EMP10 테이블의 모든 컬럼 정보를 USER_TAB_COLS 뷰를 통해 확인 합니다.


SELECT COLUMN_NAME

             , DATA_TYPE

             , DATA_LENGTH

             , HIDDEN_COLUMN

FROM    USER_TAB_COLS

WHERE TABLE_NAME = 'EMP10';




<실행결과>

 

COLUMN_NAME

DATA_TYPE

DATA_LENGTH

HIDDEN_COLUMN

1

EMPNO

NUMBER

22

NO

2

SYS_C00002_20122715:56:54$

VARCHAR2

50

YES


USER_TAB_COLS 뷰는 UNUSED된 히든 컬럼, 가상컬럼 등을 모두 표시 합니다.

ename 컬럼은 컬럼명이 “SYS_C00002_20122715:56:54$”으로 변경되어 있고 HIDDEN_COLUMN의 값이 YES로 설정 되어 있는 것을 확인 할 수 있습니다.



USER_TAB_COLUMNS 뷰를 통해 조회하면 히든 컬럼은 조회되지 않습니다.


EMP10 테이블의  컬럼 정보를 USER_TAB_COLUMNS 뷰를 통해 확인 합니다.


SELECT COLUMN_NAME

             , DATA_TYPE

FROM    USER_TAB_COLUMNS

WHERE TABLE_NAME = 'EMP10';


<실행결과>

 

COLUMN_NAME

DATA_TYPE

1

EMPNO

NUMBER


SET UNUSED된 ename 컬럼은 조회되지 않습니다.


UNUSED된 ename 컬럼을 물리적으로 삭제 하세요.


ALTER TABLE EMP10 DROP UNUSED COLUMNS;


<실행결과>

Table EMP10이(가) 변경되었습니다.

 

#칼럼삭제, #컬럼삭제, #오라클컬럼삭제, #오라클칼럼삭제, #setunused, #ORACLE교육, #ORACLE강좌​

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...