Если у вас есть тестовая база данных, в которой вы можете воспроизвести ошибку, вы можете создать триггер 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!!!') |
+---------------------------------+--------------------------------------------------------------------------------------+--------------------------------------------------------+
Итак,
- Создайте
AFTER SERVERERRORS
триггер - Воспроизведите ошибку
- Проверьте таблицу, в которую ваш триггер записывает