Oracle DBA/SQL

컬럼 변경 명령어 4가지 (ALTER)

Nuez 2023. 7. 11. 10:27
반응형

컬럼 변경 명령어 4가지

* 주의사항: 

1. 위의 ALTER문을 이용한 변경작업은 업무시간(바쁠 때) 수행하면 안되고, db가 한가한 밤이나 주말에 수행해야함. 

2. 컬럼 삭제는 rollback, flashback 둘 다 안됨. 주의해야 함. 


1. 컬럼 추가

 

예: emp 테이블에 email이라는 컬럼 추가

ALTER TABLE emp
ADD email VARCHAR2(30);


2. 컬럼 삭제

한 번 삭제되면, rollback, flashback 둘 다 안됨. 조심해서 해야 함. 

 

예 : emp 테이블에 sal 컬럼 삭제

ALTER TABLE emp
DROP COLUMN sal;

 

롤백으로 복구 시도

완료됐다고 출력되지만, 실제 테이블 조회하면 복구 X

 

플래쉬백으로 복구 시도

플래쉬백도 복구X 

 

해결 방법 : 백업파일을 통한 복구 


3. 컬럼 변경

늘리는 것은 잘 되는데, 줄이는 것은 데이터가 자리를 확보하고 있으면 할 수 없음. 

 

예 : emp 테이블의 job 컬럼의 길이를 varchar2(50)으로 늘리시오.

ALTER TABLE emp
MODIFY (job VARCHAR2(50) );

4. 컬럼 감추기

예제

ALTER TABLE emp
SET UNUSED COLUMN sal;

SELECT *
FROM emp;

DDL 명령어라 바로 커밋됐고, SAL 컬럼 보이지 않음 

 

DROP의 경우 성능이 떨어질 경우가 있으므로, 일단은 컬럼 감추고 업무시간 외에 DROP하는게 나음.

 


컬럼을 감춰둔 테이블명과 갯수는 잊어버려도 찾을 수 있음.

하지만 어떤 컬럼인지는 확인할 수 없음. (이력에 남지 않음)

컬럼 감추는 명령 수행시, 어떤 컬럼이었는지 따로 기록해두어야 함.  


감춘 테이블명 확인하는 방법

SELECT *
FROM DICTIONARY
WHERE table_name LIKE '%UNUSED%';

여기서 1번 테이블이 컬럼 감춘 유저 테이블의 목록을 보여줌. 

 

SELECT *
FROM USER_UNUSED_COL_TABS;

이렇게 테이블 명과 감춰진 컬럼 갯수 확인할 수 있음.


 

* 감춘 컬럼 다시 나타나게 할 수 있을까?

 

없음. 바로 DROP 하면 db 성능 느려지니까 잠시 감춰두는 용도로만 쓰는 것. 

나중에 한 번에 삭제하려고 감추는 것이므로 애초에 감출 때는 삭제가 확실했을 때 해야 함


감춘 컬럼들을 한 번에 삭제하는 명령어 

ALTER TABLE emp
DROP UNUSED COLUMNS;

 

다시 감춘 컬럼이 있는 테이블목록 조회하면 이제 emp 테이블이 뜨지 않는 것을 확인할 수 있음.

SELECT *
FROM USER_UNUSED_COL_TABS;