我有一个构建在框架之上的应用程序;该框架处理与DB的所有通信和请求。我有甲骨文12c。
应用程序是一个电子文档管理系统;我有一个文档在尝试提交时会产生一个错误,这个错误并不像begin那样自明,而是由框架控制的,与DB提交过程相关的错误。我试图检查与eDoc相关的特定表的约束/索引,但没有结果。
在插入数据时,我如何从oracle本身获得更多日志,希望我能够更好地了解错误发生的原因。
问候
发布于 2019-11-06 20:11:20
如果您有一个可以重现错误的测试数据库,则可以创建一个AFTER SERVERERROR触发器来记录发生的任何错误。
如果您在生产中尝试此操作,则所有访问数据库的用户和应用程序都将面临大规模问题,特别是如果您犯了错误。强烈建议在dev/QA实例中使用!
下面是如何做到这一点的一个简短的例子:
-- Create a table to hold the error log
CREATE TABLE matt1_errors (
error_ts TIMESTAMP,
stacktrace VARCHAR2(4000),
sql_stmt VARCHAR2(4000));
/
-- Create a trigger to log any server errors that occur
CREATE TRIGGER matt_log_errors AFTER SERVERERROR ON DATABASE
DECLARE
l_sql_pieces_list DBMS_STANDARD.ora_name_list_t;
piece_count PLS_INTEGER;
l_sql_text VARCHAR2(4000);
BEGIN
piece_count := ora_sql_txt(l_sql_pieces_list);
FOR i IN 1..piece_count LOOP
l_sql_text := substr(l_sql_text || l_sql_pieces_list(i), 1, 4000);
END LOOP;
INSERT INTO matt1_errors ( error_ts, stacktrace, sql_stmt)
VALUES (SYSTIMESTAMP, dbms_utility.format_error_stack, l_sql_text);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (dbms_utility.format_error_stack);
END;测试一下..。
-- Create a table to insert into.
CREATE TABLE matt1 ( id NUMBER, text VARCHAR2(4) );
-- Cause an error.
insert into matt1 (id, text) VALUES (1, 'Too long!!!');
-- See what we got...
select * from matt1_errors;
+---------------------------------+--------------------------------------------------------------------------------------+--------------------------------------------------------+
| ERROR_TS | STACKTRACE | SQL_STMT |
+---------------------------------+--------------------------------------------------------------------------------------+--------------------------------------------------------+
| 06-NOV-19 03.02.18.083116000 PM | ORA-12899: value too large for column "APPS"."MATT1"."TEXT" (actual: 11, maximum: 4) | insert into matt1 (id, text) VALUES (1, 'Too long!!!') |
+---------------------------------+--------------------------------------------------------------------------------------+--------------------------------------------------------+所以,
trigger
AFTER SERVERERRORS 的表
https://stackoverflow.com/questions/58737431
复制相似问题