Skip to content

8.8 제약, 오류, 문제 해결

다른 RDBMS에서 쓰던 SQL을 옮길 때는 이름이 비슷하다는 이유만으로 같은 기능을 기대하기 쉽습니다. 먼저 Edition과 공개 문법을 확인하고, 그다음 데이터 제약과 동시 접근 문제를 나누어 살펴보세요.

기능 지원 범위

TRANSACTION은 Standard Edition 전용입니다. Cluster에서는 CREATE TABLE·CREATE TRANSACTION TABLE·CREATE TXN TABLE이 모두 거부됩니다. LOG는 CREATE LOG TABLE로 명시해야 합니다.

요구지원·대안
일반 SELECT·INSERT·UPDATE·DELETE지원, WHERE 없는 변경은 전체 행 대상
단일 PRIMARY KEY지원, 테이블당 하나
단일·복합 UNIQUE INDEX지원, 테이블 생성 후 별도 생성
컬럼 뒤 UNIQUE·테이블 수준 PRIMARY KEY해당 생성 문법 미지원
FOREIGN KEY·Trigger·Stored Procedure미지원
BEGIN·COMMIT·ROLLBACK지원, 중첩 BEGIN·SAVEPOINT 미지원
ADD·DROP·RENAME COLUMN, RENAME TO지원 조건 확인
MODIFY COLUMN미지원
AppendSDK별 공개 경로와 배치 경계 확인
TAG의 METADATA·BASETIME·BASEDISTANCETRANSACTION에는 적용하지 않음

Cluster에서 작은 기준 정보 변경은 LOOKUP을 검토할 수 있지만, 명시적 관계형 트랜잭션의 완전한 대체는 아닙니다. 원본 이벤트는 LOG·TAG, 관계형 트랜잭션은 별도 RDBMS 등 요구에 맞게 나누어야 합니다.

오류별 진단

증상확인할 부분다음 조치
ERR-01418 고유성 위반PK·UNIQUE 키와 기존 데이터입력 수정 또는 UPSERT 규칙 검토
NOT NULL 위반생략·NULL·빈 문자열·DEFAULT입력값과 제약 확인
UPDATE가 0행 처리키와 현재 상태 조건대상 없음·이미 처리됨 등 업무 상태 확인
Resource busy다른 쓰기, 오래된 읽기 스냅샷, 열린 커서원인에 따라 대기·새 트랜잭션·커서 종료
COMMIT·ROLLBACK이 busy같은 연결의 열린 결과 집합결과 집합 정리 후 종료 재시도
오류 뒤 후속 SQL도 거부롤백 전용 상태 여부ROLLBACK 후 새 작업 시작
DDL 실패참조 인덱스·VIEW·활성 트랜잭션의존 관계와 변경 시점 조정
마운트에서 값이 예상과 다름마운트명·소유자·테이블명운영 데이터와 백업 데이터 구분

같은 Resource busy라도 재시도 방법은 다릅니다. 자세한 두 연결 실습은 잠금과 busy timeout에서 확인하세요. 오류 문자열에 TRANSACTION이 있다는 이유만으로 반복 실행하지 마세요.

제약 오류와 데이터 보존

CREATE TRANSACTION TABLE ch8_error (
    id    LONG PRIMARY KEY,
    code  VARCHAR(32) NOT NULL,
    value INTEGER
);
CREATE UNIQUE INDEX ch8_error_code ON ch8_error(code);
INSERT INTO ch8_error VALUES (1, 'A', 10);

아래는 각각 의도적으로 실패하는 선택 실습입니다. 정상 SQL과 묶지 말고 확인할 문장만 실행하세요.

-- PRIMARY KEY 중복
INSERT INTO ch8_error VALUES (1, 'B', 20);
-- UNIQUE 중복
INSERT INTO ch8_error VALUES (2, 'A', 20);
-- 필수값 위반
INSERT INTO ch8_error VALUES (3, NULL, 30);
-- 지원하지 않는 스키마 변경
ALTER TABLE ch8_error MODIFY COLUMN (code VARCHAR(64));
SELECT id, code, value FROM ch8_error ORDER BY id;
DROP TABLE ch8_error;

마지막 조회에는 (1, A, 10)만 남습니다. 단일 문장 실패가 상태를 보존한다는 점과, BEGIN 안의 앞선 성공 문장까지 자동으로 취소되는 것은 아니라는 점을 구분해야 합니다. 트랜잭션에 해당 비교 예제가 있습니다.

진단 정보 수집

서버 버전·Edition, DDL과 인덱스, 실행 SQL, 오류 코드와 전체 메시지, 실제 영향 행 수를 함께 준비하면 좋습니다. 연결 장애라면 COMMIT 요청·응답 시각과 업무 키도 필요합니다. 비밀번호·개인정보·민감한 업무 값은 가린 뒤 재현에 필요한 최소 표본만 공유하세요.

복구를 위해 내부 저장 파일을 직접 수정하거나 운영 테이블을 재생성하지 마세요. 원인과 반영 상태를 먼저 확인하는 것이 데이터 손실을 줄이는 길입니다.

최근 업데이트