본문 바로가기
꿀팁 정보

ORA 오류별 SQL 예제 & 실무 해결 스크립트 모음집

by sk9028 2025. 10. 6.
728x90
반응형

 

오라클(Oracle) 데이터베이스를 다루다 보면 개발자라면 누구나 한 번쯤은 ORA-로 시작하는 오류를 마주하게 됩니다. 이 오류들은 단순한 문법 실수부터 인덱스, 권한, 트랜잭션, 네트워크 이슈까지 다양한 원인에서 비롯됩니다. 이번 글에서는 실무에서 자주 발생하는 ORA 오류를 SQL 예제와 함께 정리하고, 즉시 활용할 수 있는 해결 스크립트를 모아보았습니다.


1. ORA-00001: unique constraint violated

원인: PK(Primary Key) 또는 Unique 제약 조건이 걸려 있는 컬럼에 중복 데이터를 삽입했을 때 발생.

예제:

 
INSERT INTO users (user_id, name) VALUES (1, '홍길동'); INSERT INTO users (user_id, name) VALUES (1, '김철수'); -- ORA-00001 발생

해결 스크립트:

 
-- 1) 기존 데이터 확인 SELECT * FROM users WHERE user_id = 1; -- 2) 중복 방지 insert MERGE INTO users u USING (SELECT 1 AS user_id, '김철수' AS name FROM dual) s ON (u.user_id = s.user_id) WHEN NOT MATCHED THEN INSERT (user_id, name) VALUES (s.user_id, s.name);

2. ORA-00904: invalid identifier

원인: 존재하지 않는 컬럼명, 오타, 대소문자 구분 문제.

예제:

 
SELECT userNmae FROM users; -- ORA-00904 발생 (userName 오타)

해결 방법:
컬럼명을 정확히 확인하거나, 대소문자 구분이 필요한 경우 "" 사용.

 
DESC users; SELECT "userName" FROM users;

3. ORA-00933: SQL command not properly ended

원인: SQL 구문의 문법 오류, 특히 ;나 불필요한 키워드.

예제:

 
SELECT * FROM users WHERE name = '홍길동' ORDER BY; -- ORA-00933 발생

해결 스크립트:

 
SELECT * FROM users WHERE name = '홍길동' ORDER BY name;

4. ORA-00942: table or view does not exist

원인: 권한 부족, 테이블 존재하지 않음, 스키마 지정 오류.

예제:

 
SELECT * FROM hr.employees; -- ORA-00942 (권한 없음)

해결 방법:

 
-- DBA 권한 사용자 GRANT SELECT ON hr.employees TO dev_user; -- 또는 스키마 명시 SELECT * FROM hr.employees@dev_db;

5. ORA-01017: invalid username/password; logon denied

원인: DB 접속 시 계정명 또는 비밀번호 오류.

해결 방법:

  1. 계정 상태 확인
 
SELECT username, account_status FROM dba_users WHERE username = 'DEV_USER';
  1. 계정 잠김 해제
 
ALTER USER dev_user ACCOUNT UNLOCK; ALTER USER dev_user IDENTIFIED BY new_password;

6. ORA-01555: snapshot too old

원인: Undo tablespace 부족으로 인해 롤백 세그먼트에서 이전 데이터를 읽지 못함.

해결 방법:

 
-- Undo Tablespace 크기 확인 SELECT tablespace_name, file_name, bytes/1024/1024 MB FROM dba_data_files WHERE tablespace_name LIKE 'UNDO%'; -- Undo 크기 확장 ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/undotbs01.dbf' RESIZE 500M;

7. ORA-01722: invalid number

원인: 문자 데이터를 숫자로 변환하려고 할 때 발생.

예제:

 
SELECT * FROM users WHERE age = '스물다섯'; -- ORA-01722 발생

해결 스크립트:

 
-- 변환 오류 방지 SELECT * FROM users WHERE REGEXP_LIKE(age, '^[0-9]+$') AND age = 25;

8. ORA-01843: not a valid month

원인: 날짜 형식이 DB의 NLS_DATE_FORMAT과 맞지 않을 때.

예제:

 
INSERT INTO orders (order_date) VALUES ('2025-13-01'); -- ORA-01843 발생

해결 방법:

 
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'; INSERT INTO orders (order_date) VALUES (TO_DATE('2025-12-01', 'YYYY-MM-DD'));

9. ORA-06512: at line …

원인: PL/SQL 실행 중 예외 발생 → ORA-06512는 오류 발생 라인 표시.

예제:

 
DECLARE v_num NUMBER := 10/0; -- Division by zero BEGIN DBMS_OUTPUT.PUT_LINE(v_num); END; /

해결 스크립트:

 
BEGIN v_num := 10/0; EXCEPTION WHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE('0으로 나눌 수 없습니다.'); END;

10. ORA-28000: the account is locked

원인: 로그인 실패 누적으로 계정 잠김.

해결 방법:

 
ALTER USER dev_user ACCOUNT UNLOCK;

그 외 자주 만나는 ORA 오류 간단 요약

  • ORA-01400: cannot insert NULL into …
    → NOT NULL 컬럼에 NULL 입력. DEFAULT 값 지정 필요.
  • ORA-01652: unable to extend temp segment
    → Temp tablespace 부족. ALTER DATABASE TEMPFILE RESIZE 필요.
  • ORA-03113: end-of-file on communication channel
    → DB 서버 프로세스 비정상 종료. Listener/DB 상태 확인.
  • ORA-12154: TNS: could not resolve service name
    → tnsnames.ora 또는 EZ Connect 문자열 오류.

글 마무리

실무에서 Oracle을 다루다 보면 ORA 오류 메시지를 매일 마주한다고 해도 과언이 아닙니다. 중요한 건 오류 메시지를 피하려는 것보다, 빨리 이해하고 해결하는 능력을 갖추는 것입니다. 이번 글에서 정리한 SQL 예제와 스크립트는 실제 현장에서 제가 직접 적용해본 방법들이라 바로 활용할 수 있을 것입니다.

혹시 여러분이 자주 마주치는 ORA 오류는 어떤 것인가요? 댓글로 공유해주시면 또 다른 해결 팁도 함께 정리해보겠습니다.

728x90
반응형

댓글