Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да разработя тригер след сървърна грешка в Oracle?

Не задавайте заявки за v$sql; вземете израза с помощта на ora_sql_txt.

CREATE OR REPLACE TRIGGER log_server_errors
AFTER SERVERERROR
ON DATABASE
DECLARE
sql_text ora_name_list_t;
stmt clob;
n number;
BEGIN
  n := ora_sql_txt(sql_text);
  if n > 1000 then n:= 1000; end if ;
  FOR i IN 1..n LOOP
     stmt := stmt || sql_text(i);
   END LOOP;

   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, stmt);
   commit;
 END log_server_errors;
 /

След това:

SQL> select * from c;

Това произвежда:

select * from c
              *
ERROR at line 1:
ORA-00942: table or view does not exist

Това вече може да бъде поискано:

select * from servererror_log;

За производство:

ERROR_DATETIME
---------------------------------------------------------------------------
ERROR_USER                     DB_NAME
------------------------------ ---------
ERROR_STACK
--------------------------------------------------------------------------------
CAPTURED_SQL
--------------------------------------------------------------------------------
11-FEB-09 02.55.35.591259 PM
SYS                            TS.WORLD
ORA-00942: table or view does not exist
select * from c


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да мигрираме база данни на Oracle от AWS EC2 към AWS RDS

  2. Има ли официална препоръка на Oracle за използването на явни ANSI JOIN срещу неявни присъединявания?

  3. Съхранена процедура и курсор на Oracle

  4. Как да разрешим ORA-04063:изгледът SYS.ALL_QUEUE_TABLES има грешки?

  5. Инсталиране на GCC на Oracle Solaris 11