首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oracle中是否有可能跟踪导致错误的SQL语句?

在Oracle中是否有可能跟踪导致错误的SQL语句?
EN

Database Administration用户
提问于 2013-04-18 07:14:34
回答 2查看 6.6K关注 0票数 1

我们正在生产甲骨文11g。应用系统仍在积极开发中。获得导致任何错误的SQL语句将非常方便。

Oracle是否提供了一个标准函数来跟踪和记录这些语句和其他(调试)信息?

EN

回答 2

Database Administration用户

发布于 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和官方系统事件触发器的文档

票数 7
EN

Database Administration用户

发布于 2018-08-28 07:31:40

若要查找失败查询,请执行以下操作。使用下面的plsql触发器查找查询。

代码语言:javascript
复制
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视频甲骨文,查找失败的查询

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/40318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档