제11장 DBMS_ERRLOG

내용 목차

11.1. 개요
11.2. 프러시저
11.2.1. CREATE_ERROR_LOG

본 장에서는 DBMS_ERRLOG 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.

DBMS_ERRLOG는 에러 로깅 테이블(error logging table)을 생성하는 하나의 프러시저를 제공한다.

일반적인 DML에서는 에러가 발생하면 실패하고 롤백이 이루어진다. 하지만 DML문에 error_logging_clause를 명시하면 에러를 발생시키지 않고 에러의 내용과 데이터를 에러 로깅 테이블에 기록하고 수행을 계속하게 된다.

DML의 에러 로깅에 사용할 테이블을 만드는 함수이다.

CREATE_ERROR_LOG 함수의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_ERRLOG.CREATE_ERROR_LOG
    (
        dml_table_name             IN          VARCHAR2,
        err_log_table_name         IN          VARCHAR2  DEFAULT NULL,
        err_log_table_owner        IN          VARCHAR2  DEFAULT NULL,
        err_log_table_space        IN          VARCHAR2  DEFAULT NULL,
        skip_unsupported           IN          BOOLEAN   DEFAULT FALSE
    ) 
    RETURN RAW
  • 파라미터

    파라미터설명
    dml_table_nameDML의 대상 테이블명이다.
    err_log_table_name에러 로깅 테이블명이다. 명시하지 않으면 ERR$_를 dml_table_name 앞에 붙여서 사용한다.
    err_log_table_owner에러 로깅 테이블을 생성할 스키마명이다.
    err_log_table_space에러 로깅 테이블을 생성할 테이블 스페이스명이다.
    skip_unsupported현재 TRUE 값을 지원하지 않는다. FALSE 값으로 고정되어 있다.
  • 예제

    SQL> create table p (a number primary key);
    
    Table 'P' created.
    
    SQL> insert into p values (1);
    
    1 row inserted.
    
    SQL> insert into p values (2);
    
    1 row inserted.
    
    SQL> insert into p values (3);
    
    1 row inserted.
    
    SQL> insert into p values (4);
    
    1 row inserted.
    
    SQL> create table f (a number references p(a));
    
    Table 'F' created.
    
    SQL> insert into f values (1);
    
    1 row inserted.
    
    SQL> insert into f values (3);
    
    1 row inserted.
    
    SQL> exec dbms_errlog.create_error_log('f');
    
    PSM completed.
    
    SQL> commit;
    
    Commit completed.
    
    SQL> insert into f (select 1 from dual union all select 5 from dual) 
         log errors reject limit 1;
    
    1 row inserted.
    
    SQL> select * from f;
    
             A
    ----------
             1
             3
             1
    
    3 rows selected.
    
    SQL> select * from err$_f;
    
    TIB_ERR_NUMBER$
    ---------------
    TIB_ERR_MESG$
    --------------------------------------------------------------------------------
    TIB_ERR_ROWID$     TIB_ERR_OPTYP$
    ------------------ --------------------
    TIB_ERR_TAG$
    --------------------------------------------------------------------------------
    A
    --------------------------------------------------------------------------------
             -10008
     INTEGRITY constraint ('SYS'.'SYS_CON25700497') violated: primary key not found.
    
                       I
    
    5
    
    1 row selected.