我们正在生产甲骨文11g。应用系统仍在积极开发中。获得导致任何错误的SQL语句将非常方便。
Oracle是否提供了一个标准函数来跟踪和记录这些语句和其他(调试)信息?
发布于 2013-04-18 07:28:35
虽然我不确定这是否是最简单的方法,但您可以使用after servererror on database触发器将所有错误记录到表中。
来自将所有数据库错误记录到表中的费杜斯·纳维提:
删除触发器log_errors_trig;删除表log_errors_tab;创建表log_errors_tab ( error varchar2(30)、时间戳日期、用户名varchar2(30)、osuser varchar2(30)、机器varchar2(64)、进程varchar2(8)、程序varchar2(48));在数据库声明var_user varchar2(30)、var_osuser varchar2(30)、var_machine varchar2(64)、var_machine varchar2(64)服务器错误后创建或替换触发器log_errors_trig;var_process varchar2(8);var_program varchar2(48);从sys.v_$session开始选择用户名、osuser、机器、进程、程序到var_user、var_osuser、var_machine、var_process、var_program,其中audsid = userenv('sessionid');插入log_errors_tab值(dbms_standard.server_error(1)、sysdate、var_user、var_osuser、var_machine、var_process、var_program);
也见甲骨文系统事件触发器关于PSOUG和官方系统事件触发器的文档
发布于 2018-08-28 07:31:40
若要查找失败查询,请执行以下操作。使用下面的plsql触发器查找查询。
CREATE TABLE QUERY_LOG (ID NUMBER,ORA_ERR VARCHAR2(10),EXE_DATE DATE,QRY_LOG NCLOB);
CREATE SEQUENCE QUERY_LOG_ID NOCACHE;
CREATE OR REPLACE TRIGGER Failed_To_Extend_Temp
AFTER SERVERERROR ON DATABASE
DECLARE
l_sql_text ora_name_list_t;
l_n NUMBER;
t1 NCLOB;
BEGIN
--IF (is_servererror(942) ) THEN
l_n := ora_sql_txt(l_sql_text );
FOR I IN 1 .. l_n
LOOP
t1 := t1||l_sql_text(i);
END LOOP;
INSERT INTO QUERY_LOG (Id , Ora_Err , EXE_DATE , QRY_LOG)
VALUES (QUERY_LOG_ID.Nextval, ora_server_error(1), Sysdate,t1 );
--END IF;
END;
/看我的YouTube视频甲骨文,查找失败的查询
https://dba.stackexchange.com/questions/40318
复制相似问题