
ORA-06512와 함께 발생하는 대표 에러 종합 가이드
ORA-06512는 PL/SQL 예외 스택의 위치 정보입니다. 실제 원인은 대개 함께 출력된 다른 ORA/PLS 코드입니다.
→ 스택의 최상단(또는 바로 위) 라인과 동반 코드를 먼저 읽으세요.
1. 스택 읽는 법 (가장 중요한 습관)
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at "APP.PKG_BILLING", line 128
ORA-06512: at line 1
- 근본 원인:
ORA-06502(형 변환/값 오류) - 발생 위치:
APP.PKG_BILLING128 라인
2. 대표 동반(근본 원인) 에러 Top 16
2.1 데이터/형식 불일치
ORA-06502 — numeric or value error (길이 초과, 형 변환, 정밀도, 서브스트링)
ORA-01722 — invalid number (문자 → 숫자 변환 실패)
ORA-01861 — literal does not match format string (날짜 포맷 불일치)
-- 문제 컬럼/변수의 데이터 타입 확인
DESC 테이블명;
-- 날짜/숫자 변환 지점 찾기
SELECT ... TO_DATE(:v,'YYYY-MM-DD') ... FROM dual;
해결
- 입력값 검증(길이/타입) & 정규화
TO_NUMBER/TO_DATE에 명시적 포맷 사용- 변수/컬럼 길이 확장, 예외 처리 추가
2.2 존재/권한 문제
ORA-00942 — table or view does not exist
ORA-00904 — invalid identifier (컬럼/별칭/오타)
ORA-01031 — insufficient privileges
PLS-00201 — identifier must be declared
PLS-00302 — component must be declared
ORA-06550 — PL/SQL compilation unit 오류 (컴파일 에러)
-- 오브젝트 존재/권한 확인
SELECT owner, object_name, object_type, status FROM dba_objects
WHERE object_name = UPPER(:name);
-- 컴파일 에러 상세
SHOW ERRORS PROCEDURE 스키마.프로시저명;
해결
- 스키마 접두사 명시(
schema.table) 및 동의어 점검 - 필요 권한/롤 부여 (
GRANT SELECT ON schema.table TO user;) - 정확한 컬럼/별칭 이름 사용, 재컴파일
2.3 데이터 제약 & 조회 로직
ORA-00001 — unique constraint violated (PK/Unique 중복)
ORA-01400 — cannot insert NULL into ("COL")
ORA-01403 — no data found (SELECT INTO가 행을 못 찾음)
ORA-01422 — exact fetch returns more than requested number of rows
-- 중복/NULL/조회 결과 수 확인
SELECT ... FROM ... WHERE key = :v;
-- 제약 확인
SELECT constraint_name, constraint_type FROM user_constraints WHERE table_name='테이블';
해결
- 키 생성 로직/시퀀스 재검토, 중복 체크
- NOT NULL 컬럼에 기본값/검증 로직 추가
SELECT INTO→COUNT선확인 또는 커서 사용
2.4 트리거/패키지 상태 & 뮤테이팅
ORA-04088 — error during execution of trigger
ORA-04098 — trigger is invalid and failed re-validation
ORA-04061 — existing state of package has been invalidated
ORA-04068 — existing state of packages has been discarded
ORA-04091 — table is mutating, trigger/function may not see it
-- 트리거/패키지 상태
SELECT object_name, status FROM user_objects WHERE object_type IN ('TRIGGER','PACKAGE','PACKAGE BODY')
AND object_name IN ('TRG_X','PKG_Y');
-- 최근 컴파일 에러
SELECT name, type, line, position, text FROM user_errors ORDER BY time DESC;
해결
- 무효화(INVALID) 오브젝트 재컴파일
- 뮤테이팅 방지: compound trigger / statement-level 로직 / 패키지 전역변수 큐 사용
- 패키지 상태 에러는 세션 재시작 또는
ALTER PACKAGE COMPILE
2.5 사용자 정의 예외
ORA-20000 ~ ORA-20999 — RAISE_APPLICATION_ERROR로 발생시킨 비즈니스 예외
- 응용 로직 점검(업무 규칙 위반인지 확인)
- 에러 코드/메시지 매핑 테이블 확인
3. 빠른 진단 플레이북 (현장 절차)
- 전체 스택을 로그에 저장
-- 서버 출력 켜기 SET SERVEROUTPUT ON BEGIN -- 실패 로직 호출 EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('에러: '||SQLERRM); DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); RAISE; END; / - 스택 최상단 원인 코드 식별 → 해당 범주(위 2장) 체크리스트 적용
- 소스 위치 열람
SELECT line, text FROM dba_source WHERE name='PKG_USER' AND type='PACKAGE BODY' AND line BETWEEN 120 AND 150; - 오브젝트 상태·권한 점검 → INVALID 재컴파일, 권한 GRANT
- 재현 테스트 데이터로 최소 케이스 작성 → 성공/실패 조건 분리
4. 예외 처리 템플릿 (현업 권장안)
CREATE OR REPLACE PACKAGE app_err AS
e_dup EXCEPTION; PRAGMA EXCEPTION_INIT(e_dup, -1); -- ORA-00001
e_num EXCEPTION; PRAGMA EXCEPTION_INIT(e_num, -1722); -- ORA-01722
e_date EXCEPTION; PRAGMA EXCEPTION_INIT(e_date, -1861); -- ORA-01861
END;
/
CREATE OR REPLACE PROCEDURE proc_example IS
BEGIN
-- 업무 로직 ...
EXCEPTION
WHEN app_err.e_dup THEN
app_log('dup key', DBMS_UTILITY.FORMAT_ERROR_BACKTRACE); RAISE;
WHEN app_err.e_num OR app_err.e_date THEN
app_log('format issue', SQLERRM); RAISE;
WHEN OTHERS THEN
app_log('unknown', SQLERRM||' @ '||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
RAISE;
END;
/
5. 로깅 설계 팁
FORMAT_ERROR_BACKTRACE()+FORMAT_CALL_STACK()동시 기록- 업무 키(주문번호 등), 바인드 값, 세션정보(
SYS_CONTEXT) 저장 - 오류 발생률 모니터링 대시보드(시간대/모듈별)
6. 예방 체크리스트
- 입력 검증(길이·타입·널)과 명시적 캐스팅 사용
- 스키마 접두/권한/동의어 일관성 유지, CI에 컴파일·유닛테스트 포함
- 트리거 로직 최소화, 뮤테이팅 회피 패턴 적용
- 패키지 상태 INVALID 모니터링 및 자동 재컴파일 파이프라인
- 업무 예외는
RAISE_APPLICATION_ERROR로 코드/메시지 표준화
7. 기본 오류 대응 4단계 (일반오류형 공통)
- ① 외부 노출/권한·접속 경로 점검 (DB 링크/권한/리스너)
- ② 영향 범위 최소화(문제 프로시저·잡 일시 중단)
- ③ 접근 제어/리소스 제약 조정(권한·락·세션 제한)
- ④ 로그 수집·모니터링 지속 및 재발 방지 패치
ORA-06512 자체는 원인이 아닙니다.
“함께 나온 코드”를 기준으로 위의 범주(형식/존재·권한/제약/트리거·패키지/사용자 정의 예외)를 대입해 진단하면, 대부분 수 분 내 근본 원인에 도달할 수 있습니다.
'경험 공유 > DBMS' 카테고리의 다른 글
| [Oracle] 아카이브 풀(Archive Full) - ORA-16014, ORA-00257, ORA-19809 (5) | 2025.11.09 |
|---|---|
| [Oracle] 오라클 LogMiner — 실습 케이스 (시간/SCN 기반) & 자동 복구 SQL 생성 스크립트 (0) | 2025.11.02 |
| [Oracle] Flashback 복구 가이드 및 ORA-38706 오류 조치 (4) | 2025.11.01 |
| [PostgreSQL] HA 클러스터 인식 오류 (/etc/hosts 권한 문제) (1) | 2025.11.01 |
| [Oracle] OGG-01004 오류 조치 (1) | 2025.10.31 |
