반응형

오라클 자주발생하는 에러 및 해결







오라클 자주 발생하는 에러모음이며

추가적인 오류 발생 및 해결방안/예측가능한 방법이

생길 시 주기적으로 정리하여 업데이트 예정입니다.








오류 순서 ( 오류코드를 ctrl + F 로 찾아서 원하는 내용 확인하시면 편합니다. )


ORA-00001: 무결성 제약 조건(USERS.EMP)에 위배됩니다.

ORA-00904: "EMPNOA": 부적합한 식별자

ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

ORA-01400: NULL을 ("SCOTT"."EMP"."EMPNO") 안에 삽입할 수 없습니다.

ORA-01438: 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다

ORA-01555: 너무 이전 스냅샷:롤백 세그먼트 11수에 "_SYSSMU11_1602219420$" 이름으로 된 것이 너무 작습니다

ORA-14016: LOCAL 분할영역 인덱스로 강조된 테이블은 분할영역이 되어 있어야 합니다

ORA-12899: "SCOTT"."EMP"."ENAME" 열에 대한 값이 너무 큼(실제: 13, 최대값: 10)

ORA-30926: 원본 테이블의 고정 행 집합을 가져올 수 없습니다









오류코드 ( ORA-00001 )

ORA-00001: 무결성 제약 조건(USERS.EMP)에 위배됩니다.


간단하지만 자주 발생하는 오류로 PK 가 설정되어 있을 때 
중복된 값이 입력된 경우






EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7369 SMITH CLERK 7902 1980-12-17 800   20
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30



원인

1. EMPNO 가 Primary Key 로 설정되어 있을 때 같은 값을 입력할 경우 key 중복오류가 발생합니다.

2. 다수의 건을 적재 시 Primary Key 값이 동일한 row 가 여러건이 아닌지 확인이 필요합니다.











오류코드 ( ORA-00904 )


ORA-00904: "EMPNOA": 부적합한 식별자



SQL 실행


SELECT EMPNOA FROM EMP ;



원인


1. 테이블에 없는 컬럼을 조회했을 경우 발생합니다.

2. 오탈자가 원인인 경우가 많으니 잘 살펴봅니다.

3. 정상적으로 사용중인 테이블에서 발생하는 경우 컬럼이 DROP 되었을 수 있으니 테이블을 다시 확인해봅니다.



해결


1. 오탈자 확인 후 수정합니다.

2. 컬럼이 DROP 된 경우 ADD , 또는 SELECT 문에서 같이 제외합니다.









오류코드 ( ORA-00942 )

ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

( table or view does not exist )



원인

1. FROM 절에 테이블명이 잘못 입력된 경우

2. 테이블은 존재하지만 해당 스키마에 권한이 없는 경우

   ( GRANT 로 권한을 부여하여 해결합니다. ( GRANT 권한 부여 방법 ) )


해결

대부분의 오류는 이 두개에서 자주 발생하게 되니 오탈자가 없는지 먼저 확인해보시길 바랍니다.









오류코드 ( ORA-01400 )


ORA-01400: NULL을 ("SCOTT"."EMP"."EMPNO") 안에 삽입할 수 없습니다.



SQL 실행


INSERT INTO EMP (ENAME) VALUES ('James Cameron') ;




원인


Primary Key 가 존재하는 테이블인데 PK 에 null 이 입력되어 발생하는 오류입니다.




해결


테이블의 PK 가 EMPNO 로 구성되어 있으므로, 해당컬럼에 값을 입력하여 정상적인 ROW 로 생성합니다.









오류코드 ( ORA-01438 )


ORA-01438: 이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다.



SQL 실행


INSERT INTO EMP (EMPNO) VALUES (12345) ;



원인


입력하려는 컬럼의 자릿수가 NUMBER(4,0) 인데 4 자리를 초과하여 입력하여 오류가 발생하였습니다.




해결


예상치 못한 값이 입력되었을 수 있으니 입력하려는 값의 확인이 필요합니다.









오류코드 ( ORA-01555 )


ORA-01555: 너무 이전 스냅샷:롤백 세그먼트 11수에 "_SYSSMU11_1602219420$" 이름으로 된 것이 너무 작습니다



SQL 실행


INSERT INTO EMP
SELECT EMPNO FROM CUSTOMER



원인


대용량 테이블에서 발생할 가능성이 매우 높음.


위의 SQL 실행을 예로 들면

CUSTOMER 테이블을 조회 하여 EMP 테이블에 데이터를 INSERT 하는 SQL 입니다.


SQL 실행시간이 약 10분 걸리는데

그 사이 CUSTOMER 테이블의 데이터가 변경된 경우

오류가 발생할 수 있습니다.




해결


1. INSERT 도중 SELECT 하는 데이터에 변화를 일으키지 않도록 합니다.

2. SQL 튜닝을 통해 실행시간을 줄여 데이터를 입력하도록 합니다.










오류코드 ( ORA-14016 )

ORA-14016: LOCAL 분할영역 인덱스로 강조된 테이블은 분할영역이 되어 있어야 합니다.

( underlying table of a LOCAL partitioned idnex must be partitioned )



SQL 실행

CREATE UNIQUE INDEX PK_TB_USER_INFO ON TB_USER_INFO ( USER_NO )
TABLESPACE USERS LOCAL ;



원인

파티션 테이블이 아닌 일반 테이블에서 INDEX 생성 시 LOCAL 영역으로 지정하려고 하니 오류가 발생하였습니다.




해결

CREATE UNIQUE INDEX PK_TB_USER_INFO ON TB_USER_INFO ( USER_NO )
TABLESPACE USERS ;









오류코드 ( ORA-12899 )


ORA-12899: "SCOTT"."EMP"."ENAME" 열에 대한 값이 너무 큼(실제: 13, 최대값: 10)



SQL 실행


INSERT INTO EMP (EMPNO, ENAME ) VALUES (1111, 'James Cameron') ;



원인


오류메세지를 보면 알 수 있듯 ENAME 의 지정된 컬럼 길이는 VARCHAR2(10 BYTE) 로 설정되어 있으나,

실제입력한 컬럼의 값은 13 BYTE 로 입력되어 오류가 발생하였습니다.



해결


1. 컬럼사이즈를 증가시켜줍니다.

2. 입력되는 값을 줄여서 입력합니다.









오류코드 ( ORA-30926 )



ORA-30926: 원본 테이블의 고정 행 집합을 가져올 수 없습니다

unable to get a stable set of rows in the source tables



SQL 실행



MERGE INTO SCOTT.EMP T1
USING
(
    SELECT DEPTNO
      FROM SCOTT.DEPT
     WHERE DNAME LIKE '%SALES%'
) T2
ON
(T1.DEPTNO = T2.DEPTNO)
WHEN MATCHED THEN
UPDATE
SET T1.SAL = '3000'



원인


일단 말도 안되는 문장이지만 예를 들면 부서가 SALES 라는 명칭이 들어간 부서는 급여를 3000 으로 변경하는 쿼리입니다.


USING 안의 구분에서 실행한 결과가 




DEPTNO

DNAME

30

SALES

30

SALES



위처럼 출력되었다면 데이터가 2건이상 발생하였고

ON 절에서 JOIN 으로 사용하는 DEPTNO 가 2건이상이 발생한 경우 오류가 발생할 수 있습니다.




해결



1. USING 절에서 사용되는 문장이 KEY 당 1건만 조회되도록 SQL 을 작성합니다. ( EX : GROUP or DISTINCT 이용 )

2. ON 절에서 KEY 값으로 JOIN 이 잘 되었는지 확인합니다.

반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,