Oracle警告、跟蹤文件(10046、死鎖等跟蹤)


跟蹤文件由各個后台進程生成,警報日志中記錄關鍵操作包括:
    ·所有啟動和關閉命令,包括中間命令,如alter database mount
    ·實例的所有內部錯誤(ORA-600錯誤,只能報告給Oracle Support解決)
    ·任何檢測到的數據文件塊損壞情況
    ·任何已經發生的死鎖
    ·影響數據庫物理結構的所有操作,如創建或重命名數據文件和聯機重做日志
    ·調整內部參數值的alter system命令
    ·所有日志開關和日志歸檔文件

 

以Oracle死鎖為例:

確定警告日志文件的存放目錄

SQL>show parameter dump_dest

 

image

 

詳細的trc日志如下:

*** 2015-12-15 08:47:31.756
DEADLOCK DETECTED ( ORA-00060 )
 
[Transaction Deadlock]
 
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
 
Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TX-000a000d-0009fdf2        31     745     X             34     817           X
TX-000b0012-00064744        34     817     X             31     745           X
 
session 745: DID 0001-001F-001BA3CC    session 817: DID 0001-0022-000E48FD 
session 817: DID 0001-0022-000E48FD    session 745: DID 0001-001F-001BA3CC 
 
Rows waited on:
  Session 745: obj - rowid = 0001B049 - AAAbBJAAHAAEN4SAAF
  (dictionary objn - 110665, file - 7, block - 1105426, slot - 5)
  Session 817: obj - rowid = 0001B049 - AAAbBJAAHAAEN4SAAE
  (dictionary objn - 110665, file - 7, block - 1105426, slot - 4)
 
----- Information for the OTHER waiting sessions -----
Session 817:
  sid: 817 ser: 32301 audsid: 7129480 user: 93/LC019999
    flags: (0x100045) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
    flags2: (0x40009) -/-/INC
  pid: 34 O/S info: user: SYSTEM, term: PERFTESTDB66, ospid: 21068
    image: ORACLE.EXE (SHAD)
  client details:
    O/S info: user: Administrator, term: WANGZG-INSPUR, ospid: 2736:11836
    machine: WORKGROUP\WANGZG-INSPUR program: plsqldev.exe
    application name: PL/SQL Developer, hash value=1190136663
    action name: SQL 窗口 - 新建, hash value=2127054360
 current SQL: update tableName set name = 'tkk1215' where xxxxxxxxxxxxxxx
 
----- End of information for the OTHER waiting sessions -----
 
Information for THIS session:
 
----- Current SQL Statement for this session (sql_id=01yxw4cmbqgg3) -----
update tableName set name = 'xyy1215' where xxxxxxx
===================================================

 

 

SQL語句跟蹤
1.用戶級自我跟蹤
    alter session set sql_trace=true;
    在同一個session中執行SQL語句,將會產生跟蹤文件sid_ora_spid.trc(spid為系統進程id):
    /u01/app/oracle/diag/rdbms/sid/sid/trace/sid_ora_spid.trc
    

2.系統級跟蹤
    alter system set sql_trace=true scope=memory;
    在任何session中執行SQL語句,產生跟蹤文件sid_ora_spid.trc(spid為系統進程id):
    /u01/app/oracle/diag/rdbms/sid/sid/trace/sid_ora_spid.trc


    alter system set sql_trace=false scope=memory;


3.用戶級的DBA跟蹤
    使用Oracle的PL/SQL包DBMS_SYSTEM
    (1)從session性能視圖中查出用戶的sid和serial#.

    select s.username,s.sid,s.serial#,p.spid,s.program 
      from v$session s,v$process p 
     where s.paddr = p.addr  
       and s.username is not null  
       and p.background is null; 


    USERNAME                              SID    SERIAL# SPID                     PROGRAM
    ------------------------------ ---------- ---------- ------------------------ -----------------------------
    SYSTEM                                 13      35114  9172                     plsqldev.exe
    SYSTEM                                248      32295  9225                     plsqldev.exe
    SYS                                       14      36202  9111                     sqlplus@gymvm (TNS V1-V3)


    (2)跟蹤用戶會話
    exec sys.dbms_system.set_sql_trace_in_session(248, 32295, true);
    在任何id為248的session中執行SQL語句,產生跟蹤文件sid_ora_spid.trc(spid為系統進程id):
    /u01/app/oracle/diag/rdbms/sid/sid/trace/sid_ora_9225.trc


    (3)停止跟蹤
    exec sys.dbms_system.set_sql_trace_in_session(248, 32295, false);

 

    (4) 10046/10053是Oracle提供的內部事件,是對SQL_TRACE的增強

    10046事件可以設置以下四個級別:
    1 - 啟用標准的SQL_TRACE功能,等價於sql_trace
    4 - Level 1 加上綁定值(bind values)
    8 - Level 1 + 等待事件跟蹤
    12 - Level 1 + Level 4 + Level 8

    alter session set tracefile_identifier = 'tkk0114';
   alter session set events '10046 trace name context forever, level 12';
   alter session set events '10046 trace name context off';

       exec sys.dbms_system.set_ev(9, 437, 10046, 12, 'tkk0114');

     exec sys.dbms_system.set_ev(9, 437, 10046, 0, 'tkk0114');

  

    ALTER SESSION SET EVENTS '10053 trace name context forever, level 1';
    ALTER SESSION SET EVENTS '10053 trace name context off';

       如果你用的是其他用戶來執行dbms_system,則可以這樣:
         sqlplus 'sys/pass as sysdba'
         SQL>grant execute on dbms_system to <your_username>;

 

4.SQL_TRACE跟蹤SQL語句執行情況的內容
    ·解析、執行、取數據的計數
    ·CPU時間和占用時間
    ·物理讀和邏輯讀
    ·處理行數目
    ·所解析的用戶名
    ·每次提交和回滾的情況.

5.格式化10046跟蹤文件(tkprof)
    使用tkprof程序可以將跟蹤文件轉化成可以閱讀的文本文件,tkprof語法:
    tkprof tracefile outputfile [explain=user/password] [table=schema.tablename] 
                                [print=integer] [insert= ] [sys= ] [sort= ] ...
    $ tkprof tracefile outputfile


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM