Pular para o conteúdo

Fóruns Banco de dados Oracle Registrar apenas erros no SPOOL Registrar apenas erros no SPOOL

#90867
burga
Participante

    Oi Gil,

    Segue o código que utilizo, fiz algumas modificações pra que possa atender melhor o seu caso.

    Tabela:
    CREATE TABLE "ERROR_LOG"
    ( "TIMESTAMP" DATE,
    "ERROR_STACK" VARCHAR2(2000 BYTE),
    "OWNER" VARCHAR2(30 BYTE),
    "SQL" VARCHAR2(4000 BYTE)
    );

    Trigger:
    create or replace TRIGGER TG_CAPTURA_EXCECAO_01
    AFTER SERVERERROR
    ON DATABASE
    DECLARE
    v_stmt CLOB;
    n NUMBER;
    sql_text ora_name_list_t;

    BEGIN

    n := ora_sql_txt(sql_text);
    FOR i IN 1..n LOOP
        v_stmt := v_stmt || sql_text(i);
    END LOOP;
    

    INSERT INTO error_log
    VALUES (SYSDATE, DBMS_UTILITY.FORMAT_ERROR_STACK, ora_dict_obj_owner, v_stmt);
    END TG_CAPTURA_EXCECAO_01;

    Essa trigger vai ser acionada sempre que ocorrer algum erro ORA no banco de dados (com exceção de alguns). Você ainda pode diminuir o escopo da trigger alterando a cláusula ON DATABASE pra ON nome_do_esquema.SCHEMA, e executar os comandos com o mesmo usuário do esquema informado.

    Segue um link pra entender melhor.

    http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm