코딩헤딩

오라클 데이터베이스 [ORA-00979, ORA-12801, ORA-01555] 오류 본문

데이터베이스/ORACLE

오라클 데이터베이스 [ORA-00979, ORA-12801, ORA-01555] 오류

멈머이 2025. 6. 9. 20:10
728x90

성능 문제 / 실행 계획 / 튜닝 관련 오류

 

1.  ORA-00979: not a GROUP BY expression

  • 의미 : GROUP BY 절에 포함되지 않은 컬럼을 SELECT에서 사용했음
  • 원인 : GROUP BY 없이 집계함수와 일반 컬럼을 혼용
SELECT department_id, COUNT(*), manager_id FROM employees GROUP BY department_id;
-- manager_id는 GROUP BY 대상이 아님

	-- 해결 방법
SELECT department_id, COUNT(*), MAX(manager_id) FROM employees GROUP BY department_id;
-- 또는 manager_id도 GROUP BY에 추가

 

 

 

2. ORA-12801: error signaled in parallel query server

  • 의미 : 병렬 쿼리 중 하나의 서버 프로세스에서 오류 발생
  • 원인 : 병렬 쿼리 내부에서 다른 오류 발생 (ORA-01652, ORA-01555 등), 리소스 부족, TEMP 공간 부족 등
SELECT /*+ parallel(e 8) */ * FROM employees e;
-- 병렬 실행 중 서버 프로세스 하나가 실패

	-- 해결 방법
-- 병렬 힌트 제거 또는 병렬도 낮추기
-- TEMP 테이블스페이스 확인 및 확장
-- alert log에서 진짜 원인(하위 오류코드) 확인
ALTER SESSION SET parallel_degree_policy = manual;

 

 

 

3. ORA-01555: snapshot too old

  • 의미 :  쿼리 실행 중 이전 데이터를 참조하려 했지만 Undo에 존재하지 않음
  • 원인 : 긴 실행 시간의 쿼리, Undo 공간 부족, 반복 스캔 시점 불일치
SELECT * FROM large_table WHERE ...
-- 쿼리가 너무 오래 걸려 Undo 데이터를 잃음

	-- 해결 방법
-- 쿼리 튜닝 (인덱스 활용, 불필요한 조인 제거 등)
-- Undo retention 시간 늘리기 (DBA 권한)
ALTER SYSTEM SET undo_retention = 1800; -- 예: 30분
-- LOB 처리 시 PCTVERSION, RETENTION 옵션 조정

 

 

 

  • 병렬 쿼리, 대용량 스캔, 정렬 작업 → TEMP & UNDO 사용량 많아짐
    → 항상 쿼리 실행계획 확인 (EXPLAIN PLAN or AUTOTRACE)
728x90