65 lines
1.3 KiB
MySQL
65 lines
1.3 KiB
MySQL
|
|
drop sequence log_errors_seq;
|
||
|
|
|
||
|
|
create sequence log_errors_seq
|
||
|
|
start with 1
|
||
|
|
increment by 1
|
||
|
|
minvalue 1
|
||
|
|
nomaxvalue
|
||
|
|
nocache
|
||
|
|
nocycle;
|
||
|
|
|
||
|
|
drop table log_errors_tab;
|
||
|
|
|
||
|
|
create table log_errors_tab
|
||
|
|
( id number,
|
||
|
|
log_date date,
|
||
|
|
err_msg clob,
|
||
|
|
stm clob,
|
||
|
|
username varchar2(30),
|
||
|
|
err_depth number
|
||
|
|
)
|
||
|
|
tablespace sysaux;
|
||
|
|
|
||
|
|
|
||
|
|
create or replace trigger log_errors_trig after servererror on database
|
||
|
|
|
||
|
|
DECLARE
|
||
|
|
|
||
|
|
id number;
|
||
|
|
-- v_user varchar2(30);
|
||
|
|
-- v_os varchar2(30);
|
||
|
|
-- v_prog varchar2(30);
|
||
|
|
-- v_cur varchar2(100);
|
||
|
|
-- v_sql varchar2(2000);
|
||
|
|
stmt varchar2 (2000);
|
||
|
|
sql_text ora_name_list_t;
|
||
|
|
l binary_integer ;
|
||
|
|
|
||
|
|
BEGIN
|
||
|
|
|
||
|
|
select log_errors_seq.nextval
|
||
|
|
into id
|
||
|
|
from dual;
|
||
|
|
|
||
|
|
l := ora_sql_txt(sql_text);
|
||
|
|
|
||
|
|
for i in 1..l loop
|
||
|
|
stmt :=stmt||sql_text(i);
|
||
|
|
end loop;
|
||
|
|
|
||
|
|
for n in 1..ora_server_error_depth loop
|
||
|
|
insert into log_errors_tab (id, log_date, err_msg, stm, username, err_depth)
|
||
|
|
values (id, sysdate, ora_server_error_msg(n),stmt, ora_login_user, n);
|
||
|
|
end loop;
|
||
|
|
|
||
|
|
EXCEPTION
|
||
|
|
|
||
|
|
-- not pretty, but....
|
||
|
|
-- avoid blocking programs because of malfunctioning error logging
|
||
|
|
when others then
|
||
|
|
null;
|
||
|
|
|
||
|
|
|
||
|
|
END LOG_ERRORS_TRIG;
|
||
|
|
/
|