Я пытаюсь записать все ошибки в моей базе данных в таблицу. Так как пользователь sys я написал следующий код:
CREATE TABLE servererror_log (
error_datetime TIMESTAMP,
error_user VARCHAR2(30),
db_name VARCHAR2(9),
error_stack VARCHAR2(2000),
captured_sql VARCHAR2(1000));
/
CREATE OR REPLACE TRIGGER log_server_errors
AFTER SERVERERROR
ON DATABASE
DECLARE
captured_sql VARCHAR2(1000);
BEGIN
SELECT q.sql_text
INTO captured_sql
FROM gv$sql q, gv$sql_cursor c, gv$session s
WHERE s.audsid = audsid
AND s.prev_sql_addr = q.address
AND q.address = c.parent_handle;
INSERT INTO servererror_log
(error_datetime, error_user, db_name,
error_stack, captured_sql)
VALUES
(systimestamp, sys.login_user, sys.database_name,
dbms_utility.format_error_stack, captured_sql);
END log_server_errors;
Но когда я вызываю ошибку, например, пытаюсь выбрать из несуществующей таблицы, она не регистрирует ошибку в таблице.
Есть ли способ проверить, срабатывает ли вообще курок? Кроме того, я попытался создать тестовую таблицу для вставки туда, но она тоже не работает, даже если определить триггер как автономную транзакцию и зафиксировать внутри триггера.
Спасибо,
Joaquin