컬럼 변경 명령어 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;
'Oracle DBA > SQL' 카테고리의 다른 글
095 복잡한 쿼리를 단순하게 하기 1(VIEW) (0) | 2023.07.11 |
---|---|
테이블 명, 컬럼명 변경하기 (RENAME) (0) | 2023.07.11 |
092 계층형 질의문으로 서열을 주고 데이터 출력하기 4 (0) | 2023.07.10 |
091 계층형 질의문으로 서열을 주고 데이터 출력하기 3 (0) | 2023.07.10 |
090 계층형 질의문으로 서열을 주고 데이터 출력하기 2 (0) | 2023.07.10 |