Os eventos de diagnóstico do Oracle são uma ferramenta muito poderosa, mas infelizmente mal documentada, então decidi listar e resumir vários usos desconhecidos ou pouco conhecidos dele.
Sua única documentação é uma documentação embutida muito concisa disponível por comando oradebug doc
no SQL * Plus e não é encontrada na documentação oficial. Você só pode encontrar trechos dela em diferentes blogs, o que não é muito conveniente, então compilei na íntegra: http://orasql.org/files/events/
Para sintaxe moderna e alguns exemplos simples, consulte o evento de documento oradebug . Não os darei aqui e começarei imediatamente com exemplos.
alter system set events
'kg_event[1476]
{occurence: start_after 1, end_after 3}
trace("stack is: %\n", shortstack())
errorstack(2)
';
kg_event [errno] é um evento Kernel Genérico da biblioteca Genérica, instruindo a disparar no número do erro
errno;
{ocorrência: start_after X, end_after Y} - este é um dos filtros que instruem para pular X eventos deste evento e executar Y vezes;
trace (format, str1, str2, ..., str15) é uma função de ACTIONS para enviar suas mensagens para o arquivo de rastreamento;
shortstack () é uma função de ACTIONS que retorna a pilha de chamadas em formato abreviado;
errorstack(level) - ACTIONS, - (level: 0 - errorstack, 1 - errorstack + call stack, 2 - level=1 + processtate, 3 - level=2 + context area). PROCESSSTATE SYSTEMSTATE. call stack CALLSTACK(level) - level>1 .
alter system set events
'trace[SQL_Compiler.* | SQL_Execution.*]
[SQL: ...]
{process: ospid = ...}
{occurence:end_after 3}
controlc_signal()';
trace[component] - event, , . , SQL_Compiler SQL_Execution. ,
RDBMS.SQL_Compiler.SQL_Optimizer.SQL_Transform.*
.
SQL[SQL: sqlid ] - SCOPE RDBMS, , , (, sql_id PL/SQL , , - , PL/SQL .);
{process: ...} - , event .
controlc_signal - ACTION, "ORA-01013: user requested cancel of current operation", .. , .
, , - hibernate, .
alter system set events
'sql_trace {process: ospid = ...}
trace("sqlid(%): %\n", sqlid(), evfunc())
';
sql_trace - event 10046, event 10046, , (evfunc) sqlid (ACTION sqlid).
:
, "_rowsource_statistics_sampfreq" =1 : 26 12! .
alter system set events
'wait_event["enq: TM - contention"]
{wait: minwait=1000}
errorstack(1)
trace("event=[%] sqlid=%, ela=% p1=% p2=% p3=%\n",
evargs(5), sqlid(), evargn(1), evargn(2), evargn(3), evargn(4))
';
wait_event[name] - event, (wait events), v$event_name:
select wait_class,name,parameter1,parameter2,parameter3 ,display_name from v$event_name
{wait: ... } - ( ), P1, P2, P3. , "TM-contention", P2 - object #, {wait: minwait=1000; p2=12345}, .. object_id=12345 1 .
evargX() - ACTION, event-check , 1- elapsed time(ms), 2-4 - p1-p3, 5- - . kg_event: errargX.
, . , - nls- to_number, on conversion error
, - ORA-01722: invalid number:
-- , :
SQL> alter session set nls_numeric_characters='.,';
Session altered.
--
SQL> select to_number('1,200.3','999g999d999') + 10 from dual;
TO_NUMBER('1,200.3','999G999D999')+10
-------------------------------------
1210.3
-- , - :
SQL> alter session set nls_numeric_characters=q'[.']';
'Session altered.
-- :
SQL> select to_number('1,200.3','999g999d999') + 10 from dual;
select to_number('1,200.3','999g999d999') + 10 from dual
*
ERROR at line 1:
ORA-01722: invalid number
, v$ses_optimizer_env, MODIFIED_PARAMETERS():
alter system set events
'kg_event[1722]
{process: ospid=27556}
{occurence:end_after 1}
MODIFIED_PARAMETERS()';
, v$diag_alert_ext - alert.log, v$diag_trace_file_contents - -, :
select c.payload
from v$diag_trace_file_contents c
where 1=1
and c.session_id = ... -- sid
and c.serial# = ... -- serial#
and c.section_name = 'Error Stack' -- Error Stack
-- and c.payload like '%nls_numeric%' --
and c.timestamp>systimestamp-interval'15'minute;
-- :
DYNAMICALLY MODIFIED PARAMETERS:
nls_language = "AMERICAN"
nls_territory = "AMERICA"
nls_sort = "BINARY"
nls_date_language = "AMERICAN"
nls_date_format = "yyyy-mm-dd hh24:mi:ss"
nls_currency = "$"
nls_numeric_characters = ".'"
nls_iso_currency = "AMERICA"
nls_calendar = "GREGORIAN"
nls_time_format = "hh24:mi:ssxff"
nls_timestamp_format = "yyyy-mm-dd hh24:mi:ssxff"
nls_time_tz_format = "hh24:mi:ssxff TZR"
nls_timestamp_tz_format = "yyyy-mm-dd hh24:mi:ssxff TZR"
nls_dual_currency = "$"
nls_comp = "BINARY"
local_listener = ""
PS. Tanel Poder:
1. The full power of Oracle’s diagnostic events, part 1: Syntax for KSD debug event handling
2. The full power of Oracle’s diagnostic events, part 2: ORADEBUG DOC and 11g improvements
3. What Caused This Wait Event: Using Oracle's wait_event[] tracing
4. http://tech.e2sn.com/oracle/troubleshooting/oradebug-doc
Sobre as funções internas da Frits Hoogland: http://orafun.info/
Documentação interna completa sobre eventos oradebug / diagnostic: http://orasql.org/files/events