Los eventos de diagnóstico de Oracle es una herramienta muy poderosa, pero desafortunadamente está mal documentada, así que decidí enumerar y resumir varios usos desconocidos o poco conocidos de la misma.
Su única documentación es documentación en línea muy concisa disponible por comando oradebug doc
en SQL * Plus y no se encuentra en la documentación oficial. Solo puedes encontrar extractos de él en diferentes blogs, lo cual no es muy conveniente, así que lo compilé completo: http://orasql.org/files/events/
Para ver la sintaxis moderna y algunos ejemplos sencillos, consulte el evento doc oradebug . No los daré aquí y comenzaré de inmediato con ejemplos.
alter system set events
'kg_event[1476]
{occurence: start_after 1, end_after 3}
trace("stack is: %\n", shortstack())
errorstack(2)
';
kg_event [errno] es un evento Kernel Generic de la biblioteca Generic, que indica que se active en el número de error
errno;
{ocurrencia: start_after X, end_after Y} : este es uno de los filtros que indica omitir X eventos de este evento y ejecutar Y veces;
trace (format, str1, str2, ..., str15) es una función de ACTIONS para enviar sus mensajes al archivo de rastreo;
shortstack () es una función de ACTIONS que devuelve la pila de llamadas en forma abreviada;
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
Acerca de las funciones internas de Frits Hoogland: http://orafun.info/
Documentación interna completa sobre eventos de diagnóstico / oradebug: http://orasql.org/files/events