Skip to content
9.8 제약, 오류, 문제 해결

9.8 제약, 오류, 문제 해결

LOOKUP 테이블의 제약 사항, 발생 가능한 오류, 문제 해결 방법을 다룹니다.

제약 요약

항목제약대표 오류
PRIMARY KEY필수이며 하나만 지정ERR-02322, ERR-02171
PRIMARY KEY 컬럼SET 대상으로 지정 불가ERR-02176
컬럼 타입TEXT·CLOB·BLOB·BINARY 사용 불가ERR-02173
JSON 컬럼일반 컬럼으로는 가능, PRIMARY KEY로는 불가
메모리VOLATILE과 하나의 한도를 공유ERR-01344
UPDATEWHERE 필수. 생략 시 실행되지 않음

PRIMARY KEY 오류

LOOKUP은 PRIMARY KEY 없이 만들 수 없고, 두 개 이상 지정할 수도 없습니다. 다음 두 문장은 각각 실패합니다.

-- 실패: PRIMARY KEY가 없습니다. (ERR-02322)
CREATE LOOKUP TABLE ch9_err_nopk (code VARCHAR(16), label VARCHAR(64));

-- 실패: PRIMARY KEY가 두 개입니다. (ERR-02171)
CREATE LOOKUP TABLE ch9_err_twopk (
    code VARCHAR(16) PRIMARY KEY,
    name VARCHAR(32) PRIMARY KEY
);

두 문장 모두 테이블을 만들지 않으므로 정리할 객체가 없습니다. 복합 키가 필요하면 구분자로 조합한 단일 키 컬럼을 두고, PRIMARY KEY 정책의 설계 기준을 따릅니다.

PRIMARY KEY 컬럼은 값을 바꿀 수 없습니다.

CREATE LOOKUP TABLE ch9_err_pk (code VARCHAR(16) PRIMARY KEY, label VARCHAR(64));
INSERT INTO ch9_err_pk VALUES ('KR', '대한민국');

-- 실패: PRIMARY KEY 컬럼은 SET 대상이 아닙니다. (ERR-02176)
UPDATE ch9_err_pk SET code = 'KO' WHERE code = 'KR';

키를 바꿔야 하면 기존 행을 삭제하고 새 키로 다시 입력합니다.

지원하지 않는 컬럼 타입

TEXT, CLOB, BLOB, BINARY는 LOOKUP 컬럼으로 사용할 수 없습니다. 긴 문자열은 VARCHAR로 선언하고, 원문 보관이 필요하면 LOG 테이블에 분리합니다.

-- 실패: 지원하지 않는 컬럼 타입입니다. (ERR-02173)
ALTER TABLE ch9_err_pk ADD COLUMN (memo TEXT);

JSON은 일반 컬럼으로 사용할 수 있습니다. 사용 범위는 JSON 컬럼과 조회를 참고합니다.

DROP TABLE ch9_err_pk;

메모리 한도

LOOKUP은 디스크에 영속 저장되지만 조회 실행 경로는 메모리입니다. 서버가 기동하면 전체 행과 인덱스를 메모리에 올리므로 사용량이 한도를 넘으면 ERR-01344가 발생합니다.

이 한도는 VOLATILE 테이블과 공유합니다. 설정 이름이 VOLATILE_로 시작하지만 LOOKUP도 같은 한도에 포함되므로, 두 타입을 함께 쓰는 환경에서는 합계로 판단해야 합니다.

SELECT NAME, VALUE FROM V$PROPERTY
 WHERE NAME = 'VOLATILE_TABLESPACE_MEMORY_MAX_SIZE';

SELECT * FROM V$STORAGE_DC_VOLATILE_TABLE;

한도에 가까워지면 보존 범위를 줄이거나, 사용하지 않는 보조 인덱스를 제거하거나, 대규모 기준 정보는 인덱스와 성능의 기준에 따라 다른 테이블 타입을 검토합니다.

다중 row 변경 범위

일반 predicate UPDATE/DELETE는 여러 row에 적용될 수 있습니다. 실행 전 같은 predicate로 대상 수를 확인하고 일반 predicate UPDATE/DELETE의 계약을 따릅니다.

LOOKUP JSON primary key 오류

JSON column은 일반 column으로 사용할 수 있지만 PRIMARY KEY로 선언할 수 없습니다. 식별자를 별도 scalar column으로 두고 JSON 컬럼과 조회의 type·path 규칙을 따릅니다.

제약 및 주의사항

  • PRIMARY KEY 정책은 PRIMARY KEY 정책을 참고합니다.
  • memory 규모와 index 비용은 인덱스와 성능에서 측정합니다.
  • 시계열 원본은 TAG, 재시작 후 사라져도 되는 cache는 VOLATILE을 선택합니다.
  • Append gate는 SDK Append matrix를 따릅니다.
최근 업데이트