2026년 08월 11일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-02143 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-02143 invalid STORAGE option 는?
ORA-02143 에러는 Oracle DDL 문에서 STORAGE 절에 유효하지 않은 옵션을 지정했을 때 발생하는 에러입니다. 주로 CREATE TABLE, CREATE INDEX, ALTER TABLE 등의 명령에서 STORAGE 파라미터에 잘못된 값이나 허용되지 않는 옵션을 사용할 경우 Oracle 엔진이 해당 구문을 파싱하는 단계에서 즉시 오류를 반환합니다. 이 에러는 대부분 문법 오류, 잘못된 파라미터 값, 또는 특정 Oracle 버전에서 지원하지 않는 옵션 사용으로 인해 발생합니다.
주요 발생 원인
1. STORAGE 절 내 잘못된 파라미터 값 또는 범위 초과
STORAGE 절에서 INITIAL, NEXT, MINEXTENTS, MAXEXTENTS, PCTINCREASE 등의 파라미터에 허용 범위를 벗어난 값을 입력하거나, 숫자가 아닌 문자를 입력하는 경우 ORA-02143이 발생합니다. 예를 들어 MAXEXTENTS에 음수 값을 지정하거나, PCTINCREASE에 100을 초과하는 값을 입력하면 Oracle은 즉시 에러를 반환합니다. 또한 단위(K, M, G)를 잘못 조합하거나 지정 방식이 틀린 경우에도 동일한 에러가 발생합니다.
2. STORAGE 절에 지원되지 않거나 이미 deprecated된 옵션 사용
Oracle 버전이 업그레이드되면서 일부 STORAGE 파라미터가 deprecated되거나 완전히 제거된 경우가 있습니다. 예를 들어 로컬 관리 테이블스페이스(Locally Managed Tablespace)를 사용하는 환경에서는 STORAGE 절의 일부 옵션이 무시되거나 오류를 유발할 수 있습니다. 특히 딕셔너리 관리 테이블스페이스(Dictionary Managed Tablespace) 환경에서만 유효한 파라미터를 로컬 관리 테이블스페이스에 적용하려 할 때 에러가 발생합니다.
3. STORAGE 절의 문법 오류 (괄호, 콤마, 키워드 오타 등)
STORAGE 절은 반드시 소괄호()로 옵션을 감싸야 하며, 옵션 간 구분자나 순서가 잘못된 경우에도 ORA-02143이 발생합니다. 예를 들어 파라미터 사이에 콤마(,)를 잘못 삽입하거나, 키워드를 오타로 잘못 입력(예: INITIALL 대신 INITIAL)하면 Oracle 파서가 구문을 인식하지 못해 에러를 반환합니다. 외부 스크립트나 다른 DBMS에서 마이그레이션한 DDL 스크립트를 Oracle에서 실행할 때 이런 유형의 오류가 자주 발생합니다.
해결 방법
원인 1 해결: 올바른 STORAGE 파라미터 값 사용
허용 범위 내의 올바른 값을 사용하여 STORAGE 절을 재작성합니다.
-- 잘못된 예시 (ORA-02143 발생 가능)
CREATE TABLE employees_bad (
emp_id NUMBER,
emp_name VARCHAR2(100)
)
STORAGE (
INITIAL 64K
NEXT -1M -- 음수 값은 허용되지 않음
MINEXTENTS 1
MAXEXTENTS 999999999 -- 지나치게 큰 값
PCTINCREASE 150 -- 100 초과 불가
);
-- 올바른 예시
CREATE TABLE employees_good (
emp_id NUMBER,
emp_name VARCHAR2(100)
)
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
);
-- ALTER TABLE에서 STORAGE 수정 올바른 예시
ALTER TABLE employees_good
STORAGE (
NEXT 2M
MAXEXTENTS UNLIMITED
);
원인 2 해결: 테이블스페이스 관리 방식 확인 후 옵션 조정
테이블스페이스가 로컬 관리 방식인지 딕셔너리 관리 방식인지 먼저 확인합니다.
-- 테이블스페이스 관리 방식 확인
SELECT tablespace_name,
extent_management,
allocation_type
FROM dba_tablespaces
WHERE tablespace_name = 'USERS';
-- 로컬 관리 테이블스페이스(EXTENT MANAGEMENT LOCAL)에서는
-- STORAGE 절을 최소화하거나 생략 권장
CREATE TABLE orders (
order_id NUMBER,
order_date DATE
)
TABLESPACE USERS;
-- STORAGE 절 없이 테이블스페이스만 지정하면 자동으로 관리됨
-- 딕셔너리 관리 테이블스페이스에서는 STORAGE 절 전체 사용 가능
CREATE TABLE orders_dict (
order_id NUMBER,
order_date DATE
)
TABLESPACE DICT_TS
STORAGE (
INITIAL 128K
NEXT 128K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
);
원인 3 해결: 문법 오류 수정
STORAGE 절의 문법을 정확하게 작성합니다. 파라미터 사이에는 콤마 없이 공백으로 구분합니다.
-- 잘못된 문법 예시 (ORA-02143 발생)
CREATE TABLE products_bad (
prod_id NUMBER,
prod_name VARCHAR2(200)
)
STORAGE (
INITIAL 64K, -- 콤마(,) 사용 금지
NEXT 1M, -- 콤마(,) 사용 금지
PCTINCREASE 0
);
-- 올바른 문법 예시 (공백으로 파라미터 구분)
CREATE TABLE products_good (
prod_id NUMBER,
prod_name VARCHAR2(200)
)
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
);
-- INDEX 생성 시 올바른 STORAGE 절 예시
CREATE INDEX idx_products_name
ON products_good (prod_name)
TABLESPACE INDX
STORAGE (
INITIAL 256K
NEXT 256K
PCTINCREASE 0
);
-- 기존 오브젝트의 STORAGE 정보를 조회하여 참고하는 방법
SELECT segment_name,
segment_type,
initial_extent,
next_extent,
min_extents,
max_extents,
pct_increase
FROM dba_segments
WHERE owner = 'SCOTT'
AND segment_name = 'EMPLOYEES';
예방 방법
1. DDL 스크립트 작성 전 테이블스페이스 속성 사전 확인
새로운 오브젝트를 생성하기 전에 반드시 대상 테이블스페이스의 관리 방식(EXTENT MANAGEMENT)을 DBA_TABLESPACES 뷰에서 확인하고, 로컬 관리 테이블스페이스라면 STORAGE 절 사용을 최소화하거나 생략하는 정책을 팀 내 DBA 가이드라인으로 정립하는 것이 좋습니다. Oracle 10g 이후 대부분의 환경이 로컬 관리 테이블스페이스를 사용하므로, 불필요한 STORAGE 절을 제거하면 유지보수성도 향상됩니다.
2. DDL 배포 전 테스트 환경에서 반드시 검증 및 표준 템플릿 사용
운영 환경에 DDL 스크립트를 배포하기 전에 개발 또는 QA 환경에서 동일한 스크립트를 실행하여 ORA-02143을 포함한 각종 DDL 오류를 사전에 발견하고 수정하는 습관을 가져야 합니다. 또한 팀 내에서 검증된 STORAGE 절 표준 템플릿을 작성하고 공유하면, 개별 개발자나 DBA가 파라미터 값 범위나 문법 오류를 범할 가능성을 크게 줄일 수 있습니다.
관련 에러
- ORA-02140: invalid INITIAL storage option value —
INITIAL파라미터에 잘못된 값이 지정된 경우 - ORA-02141: invalid NEXT storage option value —
NEXT파라미터에 잘못된 값이 지정된 경우 - ORA-02142: missing or invalid STORAGE clause option —
STORAGE절 자체가 누락되거나 구조가 잘못된 경우 - ORA-02144: no option specified for ALTER CLUSTER —
ALTER CLUSTER문에 옵션이 누락된 경우 - ORA-01658: unable to create INITIAL extent for segment in tablespace — 테이블스페이스에 공간이 부족하여 초기 익스텐트를 생성할 수 없는 경우 (STORAGE 설정과 함께 발생하는 연관 에러)
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.