* 오라클 사용 시 발생할 수 있는 각종 ORA 에러들의 원인 및 해결방법을 참고할 수 있도록 작성.
* 자주 보는 에러코드를 Ctrl+F로 찾을 수 있도록 정리.
* 전체는 ORA 에러코드에 대한 정보는 아래 공식 URL 참고.
https://docs.oracle.com/cd/B10501_01/server.920/a96525/e0.htm#ERRMG101
오라클 에러코드 모음
* ORA-00001 : 무결성 제약 조건에 위배됩니다. (PK 중복)
- PK 채번 규칙 확인
- 쿼리 2번 실행 확인
- 송신 데이터 확인
* ORA-00600 : internal error code, arguments: [], [],[] (DB 내부 오류)
- DB 내부오류라 검색해도 정보가 참 안 나옵니다.
- 뒤에 argument를 통해 시간초과, 파일 손상, 메모리 오류 등 원인을 찾을 수 있다고 하는데 저의 경우는 CLOB 컬럼을 IS NOT NULL 했더니 발생했습니다. 혹 추가한 SQL에 CLOB이 있는지 확인해보세요.
(CLOB_COLUMN IS NOT NULL => DBMS_LOB.SUBSTR(CLOB_COLUMN, 3000) IS NOT NULL)
* ORA-00904 : invalid identifier, 부적합한 식별자 (오타)
- 오타 확인
- WM_CONCAT이나 LISTAGG 사용 시 발생했다면 버전이 안 맞아서 나올 수 있습니다.
* ORA-00918 : column ambiguously defined, 열의 정의가 애매합니다. 모호합니다.
- SELECT 혹은 WHERE 절에 특정 컬럼이 어떤 테이블의 컬럼을 사용하는 건지 명확하지 않다는 것.
-- CASE 1
SELECT AGE ( -- 둘 중 어떤 AGE?
SELECT A.AGE, B.AGE
FROM A, B
)
-- CASE 2
SELECT *
FROM A , B
WHERE AGE = '50' -- A, B에 모두 AGE가 있을 때
* ORA-00942 : 테이블 또는 뷰가 존재하지 않습니다.
* ORA-01031 : 권한이 불충분합니다.
* ORA-01400 : NULL을 삽입할 수 없습니다. (NOT NULL 속성에 NULL 삽입)
* ORA-01438 : 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다.
- 데이터타입보다 큰 값을 넣으려 함.
* ORA-01461 : LONG 값은 LONG 열에 삽일할 때만 바인드 할 수 있습니다.
- VARCHAR2에 4000자 이상 저장할 때 발생
- CLOB으로 컬럼 타입 변경이 필요(아래 포스팅 내 컬럼 타입 변경 참고)
* ORA-01489 : result of string concatenation is too long
- WM_CONCAT, LISTAGG 중 너무 길게 붙인 경우 발생
- SUBSTR로 잘라쓰던지 LISTAGG의 경우 ON OVERFLOW TRUNCATE (아래 포스팅 참고)
* ORA-01732: 뷰에 대한 데이터 조작이 부적합합니다
- UNION 혹은 GROUP BY 된 VIEW를 직접 조작하려 할 때 발생합니다. (아래 참고)
* ORA-01758 : table must be empty to add mandatory(Not Null) column
- 테이블은 필수 열을 추가하기 위해(NOT NULL) 비어 있어야 합니다.
- 테이블에 신규 컬럼 추가를 위해 ALTER 문 실행 시 발생. 이미 테이블에 row가 존재하는데 not null 속성의 새로운 컬럼을 만들려고하다보니 기존 row들은 해당 컬럼을 가지고 있지 않기 때문에 발생하는 오류.
- 기존 row를 모두 지우고 추가하던지, default를 주고 먼저 생성한 다음 not null 속성을 추가해주면 된다.
ALTER TABLE ooo ADD (xxx VARCHAR2(1) DEFAULT 'Y');
ALTER TABLE ooo MODIFY (xxx VARCHAR2(1) NOT NULL);
* ORA-01810: 형식 코드가 두 번 나타났습니다. (format code appears twice)
- TO_CHAR, TO_DATE 등에서 format 부분을 2번 쓴 경우 발생
- YYYY-MM-DD HH:MM:SS (오타 확인 필요)
* ORA-01818: 'HH24'와 AM/PM은 혼재할 수 없습니다. ('HH24' precludes use of meridian indicator)
- TO_DATE 시 format에 HH24와 AM/PM을 동시에 사용하면 발생
- AM/PM을 쓸거면 HH24를 HH로 변경하면 TO_DATE 후 알아서 24시 형태로 표현됨.
- HH24 쓸거면 AM/PM 제거
* ORA-01843: 지정한 월이 부적합합니다. ( not a valid month )
- TO_DATE 시 월이 1~12 외의 값이 들어 간 것
- 또는 TO_DATE('05-MAY-2022', 'DD-MON'-YYYY')를 그대로 date타입에 저장 시 발생합니다.
DB툴에선 정상인데, 서버에서 에러가 나는 경우면 서버와 디비간 NLS_LANG 차이로 발생합니다.
3번째 인자를 추가해주면 해결됩니다.
- TO_DATE('05-MAY-2022', 'DD-MON'-YYYY', 'NLS_DATE_LANGUAGE=AMERICA')
* ORA-01849: 시간은 1과 12사이여야 합니다. (hour must be between 1 and 12 )
- 'YYYYMMDD HH24MISS'
- 시간에 HH24 추가
* ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 ( literal does not match format string )
- 주로 SQL문의 데이터 타입 차이로 발생함.
- TO_DATE, TO_CHAR 등 부분 검토 필요
* ORA-06550 : PL/SQL 스크립트에서 에러가 발생한 Line과 Column을 알려주는 에러
- 해당 메시지 아래 찍힌 PLS-00000 에러는 확인 해봐야함.
* ORA-06553 : arguments의 갯수가 다르다.
- 내장함수 쓸 때 찾아보고 쓰자. 뭔가 잘못 쓴거다.
- WM_CONCAT, LIST_AGG 사용 시 매개변수 갯수가 안 맞을 때 발생
* ORA-12154 : TNS:could not resolve the connect identifier specified
- TNSname.ora 파일에 문제가 있는거다.
- DB IP나 Port 확인해보고, DB 별칭 앞에 공백있어도 에러나더라.
( ' 'DEV_DB = () 이라고 시작하는 맨앞에 공백은 지워주자 )
* ORA-12899 : 열에 대한 값이 너무 큼(실제: 2, 최대값: 1)
- 데이터타입 사이즈보다 긴 값을 넣으려 함.
* ORA-22858 : 데이터유형의 변경이 부적당합니다.
- VARCHAR2를 CLOB으로 ALTER 시 발생 (자세한 내용 아래 포스팅 4.2 참고)
- ORACLE 11g에서 VISIBLE ALTER문 실행 시 발생 (자세한 내용 아래 포스팅 참고)
* ORA-38104 : Columns referenced in the ON Clause cannot be updated
- MERGE문에서 ON절에서 사용한 컬럼을 UPDATE 할 때 발생(MERGE문 사용법은 아래 포스팅 참고)
'IT > DB' 카테고리의 다른 글
[ORACLE] 오라클 ROUND, TRUNC (소수점 반올림, 버림) (0) | 2021.09.10 |
---|---|
[ORACLE] 오라클 ORA-01489 에러 LISTAGG 길이 초과 시 해결 방법 (0) | 2021.08.20 |
[ORACLE] 오라클 문자열 붙이기 / WM_CONCAT / LISTAGG (0) | 2021.08.20 |
[ORACLE] 오라클 테이블 컬럼 순서 변경 (0) | 2021.08.20 |
[ORACLE] 오라클 DDL ALTER 문(컬럼명/타입 변경,코멘트 추가,디폴트 추가,CLOB 변경) (0) | 2021.08.20 |
댓글