본문 바로가기
DataBase

오라클 DB - 자주 접하는 에러 메시지

by khds 2022. 4. 25.

이 글에서는 간단하게 오라클에서 간단하게 발생하는 에러 메시지들을 살펴볼 것이다.

'개발자를 위한 인덱스 생성과 SQL(이병국)'을 참고하였다.

 

1. ORA-00001: 유일성 제약조건에 위배됩니다

오라클 에러메시지 중에서 개발자가 가장 자주 접하는 문제이다.

테이블에 PK가 있거나 UNIQUE UNDEX가 있을 때, 중복해서 INSERT를 사용하면 발생하는 에러이다.

 

 

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

오타로 인해 발생할 수 있는 에러이고 실제로 테이블이 생성됐는지도 확인이 필요하다. 개발계와 운영계를 따로 관리하는 환경이라면, 실제 해당 테이블에 대한 생성 유무를 착각할 수도 있기 때문이다. 

또한 권한이 없어서 발생하는 경우도 있다. 이런 경우 DBA에게 권한을  요청하거나 아래와 같이 직접 요청하면 된다. 

 

GRANT SELECT, INSERT, UPDATE, DELETE ON [테이블명] TO [유저명]

 

 

테이블의 이름을 대소문자 구분을 제대로 하지 않아서 생기는 문제일 수도 있다. 오라클은 테이블 생성 시 대소문자 구분은 없으며 자동으로 대문자로 생성된다. 하지만 따옴표로 감 써서 소문자로 생성 시 테이블명은 소문자로 생성된다. 

 

3. ORA-00904: 열명이 부적합합니다

존재하지 않는 컬럼명을 쿼리 구문에 사용할 경우 발생하는 에러 메시지다. 대부분 오타로 인해 발상하지만 SELECT절에 없는 컬럼을 ORDER BY절에 사용해 발생하는 경우도 있다. 예를 들면 아래와 같다.

 

SELECT 고객아이디, 고객명
FROM 
(
	SELECT CUST_ID AS 고객아이디, CUST_MM AS 고객명
    FROM 고객
)
ORDER BY CUST_MM

 

 

4. ORA-01017: 유효하지 않는 사용자/패스워드에 의한 접근을 제한합니다

 오라클 접속 시 사용자 ID나 패스워드가 일치하지 않아서 발생한다. 

 

5. ORA-01722: 수치가 부적합합니다

INSERT 나 UPDATE 시에 컬럼의 타입에 맞지 않는 값을 입력할 때 발생한다. 혹은 컬럼의 타입 전환 시에 문제가 발생한다. 예를 들면 문자열을 숫자와 비교한다든가 말이다. 

 

6. ORA-01555: 스냅샷이 너무 오래됐습니다(롤백 세그먼트가 너무 작습니다)

사용자가 필요로 하는 롤백 세그먼트의 정보가 다른 트랜잭션에 의해 오버라이트 돼 존재하지 않을 시 발생한다. 이 말은 롤백 세그먼트가 너무 작다는 의미인데 이는 롤백 세그먼트를 늘리면 해결이 가능하다.

혹은 대용량 처리시에 빈번한 COMMIT 사용을 자제하거나, 처리를 한가한 시간대로 돌리는 것으로 해결이 가능하다. 아니면 튜닝을 하는 방법도 있다. 

자세한 사항은 https://crasony.tistory.com/m/202 를 참고하길 바란다.

 

롤백세그먼트 관련 및 크기증가

http://blog.naver.com/k65fac?Redirect=Log&logNo=40105702092 ---------------------------------------------------- ORA-1555  “SNAPSHOT TOO OLD” 에러의 원인과 해결방법 -----------------------------..

crasony.tistory.com

 

7. ORA-00911: 문자가 부적합합니다

대부분 쿼리 구문의 끝에 세미클론을 사용해서 발생하는 경우이다. 

 

8. ORA-12541: 리스너가 존재하지 않습니다.

오라클의 리스너는 네트워크를 통해 클라이언트에서 오라클 서버로 접근하는 것을 관리하는 기능을 수행한다. 원격 데이터베이스 서버에 접근하기 위해서는 원격 서버에 리스너가 구동돼 있어야 한다. 주로 리스너가 구동돼 있지 않았을 때에 발생하는 에러 메시지다. 아래 명령으로 리스너를 구동하자. 

 

명령 프롬프트 > Lsnrctl
LSNRCTL > status
LSNRCTL > stop
LSNRCTL > start

 

 

혹은 리스너 로그 파일이 너무 커져서 문제가 발생하는 경우도 있다. 이런 경우 리스너 로그 파일을 옮기고 새로 생성하거나 아예 만들지 않게 설정하면 된다. 

 

9. ORA-03113: 통신 채널에 EOF가 있습니다

서버의 고장이나 네트워크가 불안정할 때 주로 발생한다. 이 에러의 원인은 명확하지 않고 너무 포괄적으로 발생하므로 적절하게 대처하기가 매우 곤란하다.

이러한 에러를 만나면 네트워크 상태를 점검하거나 방화벽 검사, DB 재가동 등을 시도할 수 있다. 그냥 시간이 지나면 자연스레 해결되는 경우도 있다.

 

10. ORA-01476: 제수가 0입니다

쿼리 구문의 나눗셈에서 분모가 0일 때 발생한다. 

 

 

참고

개발자를 위한 인덱스 생성과 SQL 작성 노하우 - 이병국

https://crasony.tistory.com/m/202

 

롤백세그먼트 관련 및 크기증가

http://blog.naver.com/k65fac?Redirect=Log&logNo=40105702092 ---------------------------------------------------- ORA-1555  “SNAPSHOT TOO OLD” 에러의 원인과 해결방법 -----------------------------..

crasony.tistory.com