
개발이나 운영을 하다 보면, 누구나 한 번쯤은 **Oracle DB 오류(ORA-xxxxx)**와 마주치게 됩니다. 에러 메시지를 보면 무슨 말인지 감도 안 오고, 구글 검색창에 복붙해서 답을 찾는 게 일상처럼 되어 있죠. 저 역시 실무에서 프로젝트를 진행하며 수많은 오류와 씨름했던 경험이 있습니다. 오늘은 그런 경험을 토대로 자주 발생하는 Oracle 오류 코드와 해결 방법을 총정리해 보겠습니다.
1. ORA-00001: Unique Constraint Violated
에러 내용
원인
기본 키(Primary Key)나 Unique 제약 조건이 걸린 컬럼에 중복된 값이 입력될 때 발생합니다. 예를 들어 회원 테이블에서 동일한 아이디를 두 번 삽입하려 하면 발생하죠.
해결 방법
- 중복 데이터가 있는지 확인
-
SELECT 컬럼명, COUNT(*) FROM 테이블명 GROUP BY 컬럼명 HAVING COUNT(*) > 1;
- 시퀀스를 사용하는 컬럼이라면 시퀀스 값이 꼬이지 않았는지 확인
- 데이터 입력 로직에서 중복 체크 로직 추가
2. ORA-00904: Invalid Identifier
에러 내용
원인
SQL 문장에서 존재하지 않는 컬럼명이나 잘못된 별칭을 사용했을 때 발생합니다. 오타나 대소문자 구분 문제도 흔한 원인입니다.
해결 방법
- 컬럼명이 실제 테이블에 존재하는지 확인
-
DESC 테이블명;
- 대소문자가 구분되는 경우 쿼리에서 큰따옴표("") 사용 여부 점검
- 컬럼명 오타 또는 별칭(alias) 확인
3. ORA-00942: Table or View Does Not Exist
에러 내용
원인
존재하지 않는 테이블을 조회하거나, 권한이 없는 경우 발생합니다.
해결 방법
- DBA 권한으로 테이블 존재 여부 확인
-
SELECT * FROM all_tables WHERE table_name = '테이블명';
- 권한 문제라면
-
GRANT SELECT ON 스키마.테이블명 TO 사용자명;
- 다른 스키마의 객체를 접근할 경우 스키마명.테이블명 형식으로 호출
4. ORA-01017: Invalid Username/Password
에러 내용
원인
아이디 또는 비밀번호가 잘못되었거나, 계정이 잠겨 있는 경우 발생합니다.
해결 방법
- 계정명/비밀번호 정확히 입력했는지 재확인
- 계정이 잠겼다면 DBA에게 풀어 달라고 요청
-
ALTER USER 사용자명 ACCOUNT UNLOCK;
- 비밀번호 변경
-
ALTER USER 사용자명 IDENTIFIED BY 새비밀번호;
5. ORA-12154: TNS Could Not Resolve Service Name
에러 내용
원인
Oracle 클라이언트에서 DB 접속 시 TNS 설정 파일(tnsnames.ora)에 명시된 서비스명을 찾지 못할 때 발생합니다.
해결 방법
- $ORACLE_HOME/network/admin/tnsnames.ora 파일 확인
- 서비스명이 실제로 맞는지 점검
- 환경 변수 ORACLE_SID 확인
- Easy Connect 방식으로 접속 시도
-
sqlplus 사용자/비밀번호@호스트:포트/서비스명
6. ORA-12541: TNS No Listener
에러 내용
원인
DB Listener 프로세스가 실행 중이지 않을 때 발생합니다.
해결 방법
- 서버에서 Listener 상태 확인
-
lsnrctl status
- Listener가 꺼져 있다면 실행
-
lsnrctl start
- 네트워크 방화벽에서 포트(기본 1521) 열려 있는지 확인
7. ORA-03113: End-of-file on Communication Channel
에러 내용
원인
DB 서버와 클라이언트 간의 네트워크 연결이 끊기거나, DB 인스턴스가 비정상 종료된 경우 발생합니다.
해결 방법
- DB 서버 로그(alert.log) 확인
- 네트워크 상태 점검 (VPN, 방화벽 등)
- DB 인스턴스가 죽어있다면 재기동 필요
8. ORA-04098: Trigger is Invalid and Failed Re-validation
에러 내용
원인
트리거가 컴파일되지 않았거나, 참조하는 객체가 삭제/변경되어 유효하지 않음
해결 방법
- 트리거 컴파일
-
ALTER TRIGGER 트리거명 COMPILE;
- 참조하는 테이블/컬럼/프로시저가 존재하는지 확인
- 필요하다면 트리거 삭제 후 재작성
9. ORA-01555: Snapshot Too Old
에러 내용
원인
대량 데이터를 처리하는 도중 Undo Tablespace가 부족할 때 발생합니다.
해결 방법
- Undo Tablespace 크기 늘리기
-
ALTER DATABASE DATAFILE '경로/undotbs01.dbf' RESIZE 500M;
- 대량 처리 시 배치 작업을 나누어 실행
- 커밋(commit) 주기를 조절하여 Undo 사용량 분산
10. ORA-06512: PL/SQL Error
에러 내용
원인
PL/SQL 블록 내에서 발생한 오류를 나타내며, 정확한 원인은 위에 함께 표시되는 다른 오류 코드와 연계되어 있습니다.
해결 방법
- ORA-06512와 함께 발생한 원인 에러 코드 먼저 확인
- 프로시저나 함수의 특정 라인 번호 확인 후 디버깅
- 예외 처리(Exception Handling) 구문 추가
Oracle 오류 대처 시 유용한 팁
- Alert Log 파일 확인: DB 내부 에러는 alert.log 파일에서 원인을 쉽게 찾을 수 있음
- DBA 권한자와 협업: 권한 문제, Listener 문제는 DBA 지원이 필요
- 재현 가능한 쿼리 남기기: 에러 발생 시 상황을 재현할 수 있는 SQL을 준비해야 해결이 빠름
- 공식 문서 활용: Oracle 공식 문서(https://docs.oracle.com)에는 에러 코드별 상세 설명이 정리되어 있음
마무리: Oracle 에러, 겁내지 말고 차근차근 해결하자
Oracle 오류 메시지는 처음 보면 낯설고 당황스럽지만, 차근차근 원인을 추적하면 대부분 해결할 수 있습니다. 제가 경험했던 프로젝트에서도 한 줄의 에러 메시지가 원인을 알려주고, 해결 방법을 찾아가는 나침반 역할을 했습니다. 중요한 건 에러 코드를 두려워하지 않고, 근본 원인을 찾는 습관입니다. 이 글이 Oracle DB를 다루는 분들에게 작은 길잡이가 되길 바랍니다.
https://sl9028.tistory.com/1032
Oracle 오류 코드별 해결 방법 총 정리!
개발이나 운영을 하다 보면, 누구나 한 번쯤은 **Oracle DB 오류(ORA-xxxxx)**와 마주치게 됩니다. 에러 메시지를 보면 무슨 말인지 감도 안 오고, 구글 검색창에 복붙해서 답을 찾는 게 일상처럼 되어
sl9028.tistory.com
'유용한 정보' 카테고리의 다른 글
| 내 목소리를 녹음해서 들으면 왜 다르게 들릴까? (0) | 2025.10.21 |
|---|---|
| 2025년 기준 페이코 포인트 사용 가능처 (0) | 2025.10.01 |
| 🍏 사과가 갈색으로 변하는 이유 (0) | 2025.09.23 |
| 🍎 저녁에 먹는 사과가 독이라고 불린 이유 (1) | 2025.09.22 |
| 밥 먹고 졸리는 이유는? (0) | 2025.09.22 |
댓글