Peristiwa diagnostik Oracle - Lembar cheat

Peristiwa diagnostik Oracle adalah alat yang sangat kuat, tetapi sayangnya tidak terdokumentasi dengan baik, jadi saya memutuskan untuk membuat daftar dan meringkas beberapa kegunaannya yang tidak diketahui atau kurang diketahui.





Dokumentasi satu-satunya adalah dokumentasi inline yang sangat ringkas yang tersedia dengan perintah oradebug doc



di SQL * Plus dan tidak ditemukan di dokumentasi resmi. Anda hanya dapat menemukan kutipannya di blog yang berbeda, yang sangat tidak nyaman, jadi saya menyusunnya secara lengkap: http://orasql.org/files/events/





Untuk sintaks modern dan beberapa contoh sederhana, lihat acara doc oradebug . Saya tidak akan memberikannya di sini dan akan segera mulai dengan contoh.





alter system set events 
   'kg_event[1476]
        {occurence: start_after 1, end_after 3}
            trace("stack is: %\n", shortstack())
            errorstack(2)
    ';
      
      



  1. kg_event [errno] adalah acara Kernel Generik dari pustaka Generik, menginstruksikan untuk memicu nomor kesalahanerrno;







  2. {kejadian: start_after X, end_after Y} - ini adalah salah satu filter yang menginstruksikan untuk melewati peristiwa X dari acara ini dan mengeksekusi Y kali;





  3. trace (format, str1, str2, ..., str15) adalah fungsi dari ACTIONS untuk mengeluarkan pesannya ke file trace;





  4. shortstack () adalah fungsi dari ACTIONS yang mengembalikan stack panggilan dalam bentuk singkat;





  5. 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()';
      
      



  1. trace[component] - event, , . , SQL_Compiler SQL_Execution. , RDBMS.SQL_Compiler.SQL_Optimizer.SQL_Transform.*



    .





  2. SQL[SQL: sqlid ] - SCOPE RDBMS, , , (, sql_id PL/SQL , , - , PL/SQL .);





  3. {process: ...} - , event .





  4. 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).





:





aktifkan acara
event
pertama kita menjalankan kueri dengan pengaturan default dan kemudian dengan _rowsource_statistics_sampfreq = 1
, _rowsource_statistics_sampfreq=1
Perbedaan jejaknya terlihat

, "_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))
    ';
      
      



  1. wait_event[name] - event, (wait events), v$event_name:

    select wait_class,name,parameter1,parameter2,parameter3 ,display_name from v$event_name







  2. {wait: ... } - ( ), P1, P2, P3. , "TM-contention", P2 - object #, {wait: minwait=1000; p2=12345}, .. object_id=12345 1 .





  3. 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





Tentang fungsi internal Frits Hoogland: http://orafun.info/





Dokumentasi internal lengkap tentang oradebug / peristiwa diagnostik: http://orasql.org/files/events








All Articles