본 장에서는 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_name | DML의 대상 테이블명이다. |
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.