DBMS 1
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
4.1. 개요 4.2. 프로시저 4.2.1. CREATE_ERROR_LOGDBMS_ERRLOG
DBMS_ERRLOG는 에러 로깅 테이블(error logging table)을 생성하는 하나의 프로시저를 제공한다.일반적인 DML에서는 에러가 발생하면 실패하고 롤백이 이루어진다. 하지만, DML문에 error_logging_clause를 명시하면 에러를 발생시키지 않고 에러의 내용과 데이터를 에러 로깅 테이블에 기록하고 수행을 계속하게 된다.
DML의 에러 로깅에 사용할 테이블을 만드는 함수이다.
CREATE_ERROR_LOG 함수의 세부 내용은 다음과 같다.
DBMS_ERRLOG.DECRYPT(
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.