정보

[Oracle] 오라클 컬럼 사이즈 변경 방법 완벽 정리: ALTER TABLE MODIFY 실전 가이드

mindlab091909 2025. 5. 7. 22:55
반응형

 

데이터베이스 테이블 구조를 관리하다 보면 기존 테이블의 컬럼 크기를 변경해야 하는 상황이 자주 발생합니다. 특히 오라클(Oracle) 데이터베이스에서는 문자열이나 숫자 타입의 컬럼 크기를 조정할 때 ALTER TABLE MODIFY 구문을 주로 사용합니다. 이 포스팅에서는 오라클에서 컬럼 사이즈를 변경하는 방법, 그리고 변경 시 반드시 주의해야 할 사항들을 예제와 함께 상세하게 설명드리겠습니다.

✅ 이 글은 오라클을 사용하는 DBA 및 개발자, 데이터 분석가 분들이 실무에서 자주 부딪히는 문제를 해결할 수 있도록 구성되었습니다.


✅ 오라클 컬럼 사이즈 변경이 필요한 이유

  1. 비즈니스 요건 변경: 고객 이름, 주소 등 문자열 컬럼의 길이를 늘려야 할 경우.
  2. 데이터 정밀도 향상: 금액, 평균값 등을 계산할 때 소수점 자릿수를 늘려야 할 경우.
  3. DB 설계 오류 수정: 초기 설계 당시 컬럼 사이즈를 너무 작게 설정한 경우.
  4. 성능 최적화: 불필요하게 큰 컬럼 사이즈를 줄여 저장공간과 처리 효율을 개선.

🛠️ 오라클 컬럼 사이즈 변경 기본 구문

오라클에서 컬럼 사이즈를 변경할 때 사용하는 기본 문법은 다음과 같습니다.

ALTER TABLE [스키마명].[테이블명] MODIFY [컬럼명] [데이터타입(사이즈)];

예시로 자주 사용하는 변경 구문들을 살펴보겠습니다.

문자열 컬럼(VARCHAR2) 사이즈 변경

-- ename 컬럼의 크기를 10 → 50으로 확장
ALTER TABLE emp MODIFY ename VARCHAR2(50);

숫자 컬럼(NUMBER) 사이즈 변경

-- deptno 컬럼의 정수 자릿수 2 → 10으로 확장
ALTER TABLE emp MODIFY deptno NUMBER(10);

소수점을 포함한 숫자(NUMBER(p, s)) 변경

-- sal 컬럼을 정수부 + 소수부 포함하여 7,2 → 10,5로 확장
ALTER TABLE emp MODIFY sal NUMBER(10,5);

🔎 현재 테이블 컬럼 타입과 사이즈 확인 방법

컬럼 사이즈를 변경하기 전, 반드시 현재 데이터 타입과 크기를 확인해야 합니다. 아래 SQL문은 EMP 테이블의 컬럼 정보와 데이터 타입을 확인하는 쿼리입니다.

SELECT table_name,
       column_name,
       data_type ||
         CASE
           WHEN data_type LIKE '%CHAR%' THEN '(' || data_length || ')'
           WHEN data_type = 'NUMBER' AND data_precision > 0 AND data_scale > 0 THEN '(' || data_precision || ',' || data_scale || ')'
           WHEN data_type = 'NUMBER' AND data_precision > 0 THEN '(' || data_precision || ')'
         END AS data_type
  FROM all_tab_columns
 WHERE table_name = 'EMP';

또는 아래처럼 간단하게 DESC 명령으로도 확인할 수 있습니다:

DESC emp;

⚠️ 컬럼 사이즈 변경 시 자주 발생하는 오류 및 해결 방법

컬럼 사이즈를 줄이거나 소수점 자릿수를 조정할 때는 기존 데이터의 제약으로 인해 오류가 발생할 수 있습니다. 아래는 실무에서 자주 마주치는 대표적인 오류 유형과 해결 방법입니다.


❌ ORA-01441: 일부 값이 너무 커서 열 길이를 줄일 수 없음

ALTER TABLE emp MODIFY ename VARCHAR2(5);

오류 메시지:

ORA-01441: cannot decrease column length because some value is too big

원인: ename 컬럼에 이미 길이 5보다 큰 문자열이 존재하는 경우.

해결 방법:

  1. 변경 전 아래 쿼리로 확인:
SELECT * FROM emp WHERE LENGTH(ename) > 5;
  1. 데이터를 삭제하거나 줄이거나, 혹은 원하는 사이즈로 필터링된 데이터만 유지.

❌ ORA-01440: 정도 또는 자리수를 축소할 열은 비어 있어야 합니다

ALTER TABLE emp MODIFY sal NUMBER(7,5);

오류 메시지:

ORA-01440: column to be modified must be empty to decrease precision or scale

원인: 기존 컬럼에 데이터가 들어 있는 상태에서 정도(precision)나 소수점 자리수(scale)를 줄일 경우 발생.

해결 방법:

  • 해당 컬럼에 데이터가 있는 경우, 데이터를 삭제하거나 백업 후 컬럼 수정.
  • 또는 precision을 늘리는 방식으로 구문을 재작성해야 합니다.

예:

-- 전체 자릿수를 10으로 늘리면서 소수점도 5자리로 확장
ALTER TABLE emp MODIFY sal NUMBER(10,5);

💡 실무에서 꼭 기억할 팁

상황 조치

문자열 컬럼 길이 축소 반드시 기존 데이터의 길이 확인 (LENGTH 함수 활용)
NUMBER 컬럼의 소수점 증가 전체 자릿수도 함께 늘릴 것
컬럼 크기 줄이기 전 데이터 백업 필수
에러 없이 사이즈 줄이기 데이터 삭제 후 시도 또는 임시 테이블 생성 후 마이그레이션

🧪 컬럼 사이즈 변경 실습 시나리오

실무에 가장 자주 사용되는 emp 테이블을 기준으로 간단한 실습 시나리오를 구성해 보겠습니다.

  1. 현재 컬럼 정보 조회:
DESC emp;
  1. ename 컬럼을 VARCHAR2(50)으로 확장:
ALTER TABLE emp MODIFY ename VARCHAR2(50);
  1. sal 컬럼 소수점 확장 전 확인:
SELECT MAX(sal), LENGTH(TRUNC(sal)) FROM emp;
  1. 정수부 고려한 확장 적용:
ALTER TABLE emp MODIFY sal NUMBER(10,5);
  1. 컬럼 축소 전 데이터 확인:
SELECT * FROM emp WHERE LENGTH(ename) > 5;

🔚 마무리: 오라클 컬럼 사이즈 변경, 실수 없이 하는 법

오라클에서 ALTER TABLE MODIFY 명령은 매우 강력한 기능이지만, 데이터 무결성기존 데이터 제약을 반드시 고려해야 합니다. 사이즈를 변경하기 전에 충분한 확인 과정을 거치고, 에러 메시지를 정확히 해석하며 대응하는 것이 중요합니다.

👨‍💻 실무에서는 컬럼 크기 변경 후, 인덱스/제약조건/애플리케이션 로직의 영향도 분석까지 꼭 수행하시길 권장합니다.

 

반응형