본문 바로가기
Database/Oracle

[ORACLE] DBA_ERRORS 완벽 가이드 : PL/SQL 컴파일 오류 진단과 디버깅의 핵심 뷰

by Papa Martino V 2025. 10. 13.
728x90

DBA_ERRORS
[ORACLE] DBA_ERRORS

 

Oracle Database의 DBA_ERRORS 뷰는 데이터베이스 객체(예: 프로시저, 함수, 트리거, 패키지 등)의 컴파일 오류(Compile-Time Error)를 관리하는 핵심 시스템 뷰입니다. 개발자와 DBA 모두에게 필수적인 진단 도구로, 오류 원인을 즉시 파악하고 코드 품질을 유지하는 데 사용됩니다. 특히 대규모 PL/SQL 시스템이나 복잡한 패키지 구조를 관리할 때 DBA_ERRORS는 오류 추적 및 디버깅의 중심 역할을 수행합니다.


1. DBA_ERRORS 개요

Oracle에서 PL/SQL 객체(Procedure, Function, Trigger, Package 등)는 생성(또는 컴파일) 시점에 문법, 참조 객체, 의존성 등을 검증합니다. 이 과정에서 문제가 발생하면 오류 정보는 즉시 USER_ERRORS 또는 DBA_ERRORS 뷰에 기록됩니다.

DBA_ERRORS 뷰는 시스템 전체의 오류 정보를 제공하며, 모든 사용자 스키마의 컴파일 오류를 한눈에 확인할 수 있습니다. 개발자 단위 뷰인 USER_ERRORS와 달리, DBA_ERRORS는 DBA 권한으로 접근이 가능하며 전사적인 오류 관리가 가능합니다.


2. 주요 특징

  • 데이터베이스 내 모든 스키마의 오류를 확인 가능
  • PL/SQL 및 SQL DDL 컴파일 오류 추적
  • 오류 위치(Line, Position)와 메시지 상세 제공
  • 대규모 배포 환경에서 객체별 오류 진단 및 통계화 가능

3. 주요 컬럼 설명

아래 표는 DBA_ERRORS 뷰의 주요 컬럼 구조와 의미를 정리한 것입니다.

컬럼명 데이터 타입 설명
OWNER VARCHAR2 오류가 발생한 객체의 소유자 (스키마 이름)
NAME VARCHAR2 오류가 발생한 객체 이름 (예: FUNCTION_NAME, TRIGGER_NAME)
TYPE VARCHAR2 객체 유형 (PROCEDURE, PACKAGE, TRIGGER 등)
SEQUENCE NUMBER 오류 순서 (1부터 시작)
LINE NUMBER 오류가 발생한 소스 코드의 줄 번호
POSITION NUMBER 라인 내 오류의 위치(컬럼 인덱스)
TEXT VARCHAR2 오류 메시지 내용
ATTRIBUTE VARCHAR2 오류 유형 (ERROR, WARNING, INFO 등)

4. DBA_ERRORS 조회 예제

컴파일 오류가 발생했을 때, DBA는 다음 SQL을 통해 전체 오류 목록을 확인할 수 있습니다.


SELECT 
    OWNER,
    NAME,
    TYPE,
    LINE,
    POSITION,
    TEXT
FROM 
    DBA_ERRORS
ORDER BY 
    OWNER, NAME, SEQUENCE;

이 쿼리는 모든 스키마에서 발생한 오류를 순서대로 보여주며, 개별 객체의 오류를 빠르게 식별할 수 있습니다.


5. 특정 객체의 오류 조회

특정 프로시저나 트리거의 오류만 확인하려면 다음과 같이 조회할 수 있습니다.


SELECT 
    LINE, 
    POSITION, 
    TEXT
FROM 
    DBA_ERRORS
WHERE 
    OWNER = 'HR'
    AND NAME = 'EMP_TRIGGER'
ORDER BY SEQUENCE;

이 명령은 HR 스키마의 EMP_TRIGGER 객체 내에서 발생한 오류를 순서대로 표시합니다.


6. DBA_ERRORS 관련 주요 뷰 비교

Oracle은 객체 오류 정보를 스키마별로 구분하여 제공합니다. DBA_ERRORS는 그 중 가장 포괄적인 시스템 뷰입니다.

뷰 이름 설명 조회 범위
USER_ERRORS 현재 사용자의 객체 오류 정보 자신의 스키마만
ALL_ERRORS 접근 권한이 있는 모든 객체의 오류 정보 권한 범위 내
DBA_ERRORS 데이터베이스 전체 객체 오류 정보 모든 스키마 (DBA 전용)

7. 실제 오류 예시 및 분석

다음은 PL/SQL 함수에서 발생한 컴파일 오류 예시입니다.


CREATE OR REPLACE FUNCTION calc_bonus(p_salary NUMBER)
RETURN NUMBER IS
BEGIN
  RETURN p_salary * rate;  -- rate 변수 선언 누락
END;
/

위 코드를 실행하면 “identifier 'RATE' must be declared” 오류가 발생합니다. DBA_ERRORS에서 이 오류를 조회하면 다음과 같은 결과를 얻습니다.

LINE POSITION TEXT
4 20 PLS-00201: identifier 'RATE' must be declared

이 정보를 통해 오류의 위치(4번째 줄, 20번째 문자)와 원인(미선언 변수)을 정확히 파악할 수 있습니다.


8. DBA_ERRORS를 활용한 디버깅 전략

DBA_ERRORS는 단순한 오류 로그 뷰를 넘어, 대규모 PL/SQL 코드베이스의 품질 관리와 성능 최적화를 위한 진단 도구로 활용될 수 있습니다.

① 오류 자동 추적 스크립트


SELECT OWNER, NAME, TYPE, COUNT(*) AS ERROR_COUNT
FROM DBA_ERRORS
GROUP BY OWNER, NAME, TYPE
ORDER BY ERROR_COUNT DESC;

가장 오류가 많이 발생한 객체를 식별하여 우선적으로 수정할 수 있습니다.

② 컴파일 상태 점검


SELECT OWNER, OBJECT_NAME, STATUS 
FROM DBA_OBJECTS 
WHERE STATUS = 'INVALID';

INVALID 객체를 확인한 후, DBA_ERRORS에서 오류 원인을 분석하면 재컴파일 실패 원인을 정확히 찾을 수 있습니다.

③ 대규모 코드 배포 후 품질 검증

애플리케이션 업데이트나 배포 직후, DBA_ERRORS를 조회하면 배포된 코드 중 컴파일 오류가 발생한 객체를 빠르게 식별할 수 있습니다.


9. DBA_ERRORS와 DBA_OBJECTS의 연계 활용

Oracle은 객체 상태 정보를 DBA_OBJECTS 뷰에 저장합니다. 이 뷰의 STATUS 컬럼과 DBA_ERRORS를 조합하면, 오류가 있는 객체를 정확히 찾아낼 수 있습니다.


SELECT 
    o.OWNER,
    o.OBJECT_NAME,
    o.OBJECT_TYPE,
    e.TEXT AS ERROR_MESSAGE
FROM 
    DBA_OBJECTS o
    JOIN DBA_ERRORS e 
      ON o.OWNER = e.OWNER
     AND o.OBJECT_NAME = e.NAME
WHERE 
    o.STATUS = 'INVALID';

이 결과는 현재 INVALID 상태인 객체의 실제 오류 메시지를 함께 보여줍니다.


10. DBA_ERRORS 관리 팁

  • 정기 모니터링: 컴파일 오류를 주기적으로 점검하여, 시스템 안정성을 확보합니다.
  • CI/CD 연계: 자동 배포 프로세스에서 DBA_ERRORS를 점검 항목으로 추가하여 배포 품질을 강화합니다.
  • 오류 통계화: 오류 유형별 발생 빈도를 기록해 반복적인 개발 실수를 예방합니다.
  • RECOMP 스크립트 활용: INVALID 객체를 재컴파일할 때, DBA_ERRORS를 기반으로 원인 분석을 병행합니다.

11. 요약 비교표

항목 DBA_ERRORS DBA_OBJECTS
주요 목적 PL/SQL 객체의 오류 메시지 관리 객체의 컴파일 상태 관리
핵심 컬럼 TEXT, LINE, POSITION STATUS, OBJECT_TYPE
활용 시점 컴파일 실패 시 배포 후 상태 점검 시
주요 사용자 개발자, DBA DBA

12. 결론

DBA_ERRORS는 Oracle의 PL/SQL 환경에서 오류를 추적하고 객체 품질을 유지하는 데 가장 중요한 시스템 뷰입니다. 대규모 데이터베이스에서 수백 개의 프로시저와 트리거를 관리할 때, 이 뷰를 정기적으로 점검하면 장애를 사전에 예방하고 유지보수 효율을 극대화할 수 있습니다. 또한 DBA_ERRORS는 DBA_OBJECTS와 함께 사용될 때 더욱 강력한 진단 도구로 발전하며, 데이터베이스 품질 관리(QA)와 DevOps 자동화 환경에서도 유용하게 통합될 수 있습니다.


출처

  • Oracle Database Reference 19c – DBA_ERRORS View
  • Oracle PL/SQL Language Reference – Compile-time Errors
  • Oracle Database Concepts – Dependency Management
728x90