Oradebug使用淺談--生成Hang或Locking問題分析檔案
一、 簡介
oradebug是一個未被文件記錄的Oracle命令,可以用來檢測例項和會話中出現的故障,
擁有管理員的許可權才可以執行此命令。使用oradebug你可以完成如下工作(並不侷限於此):
l 啟用/禁用其他使用者會話的SQL tracing
l 掛起問題程式
l 在共享記憶體和訊號量中查詢資訊
l 關閉trace檔案以便生成新的trace檔案
l 操作、轉儲內部結構
l 喚醒程式
二、 Oradebug使用例項
下面透過兩個實用的例子展示oradebug命令的使用。
1、 使用Oradebug獲得trace檔案的名稱和位置
[oracle@sunny ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Oct 16 17:35:12 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> alter session set events '10046 trace name context forever, level 12';
Session altered.
SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/u01/app/oracle/admin/STUDY/udump/study_ora_5179.trc
2、 使用Oradebug呼叫另一個會話的跟蹤(10046)
[oracle@sunny ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Oct 16 17:40:40 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select spid
2 from v$process
3 where addr = (select paddr from v$session where username = 'SUNNY');
SPID
------------
5366
SQL> oradebug setospid 5366
Oracle pid: 18, Unix process pid: 5366, image: oracle@sunny.syp.com (TNS V1-V3)
SQL> oradebug event 10046 trace name context forever,level 12
Statement processed.
SQL> oradebug tracefile_name
/u01/app/oracle/admin/STUDY/udump/study_ora_5366.trc
SQL> oradebug event 10046 trace name context off
Statement processed.
三、 生成Hang/Locking問題的分析檔案
Hang/Locking問題相比於系統緩慢來說是更為棘手的問題,所以及時、合理的處理是非
常必要的。當類似問題發生時應首先判斷是否確實遇到了Hang/Locking問題,資料庫Hang住可以表現為:
l 資料庫不再允許使用者連線
l 資料庫不再工作
l Select 1 from dual沒有輸出
l Create table不能完成
相應的,Locking問題可以表現為:
l 一個或者多個會話完全停止工作
如果確認遇到了Hang/Locking問題,那麼下一步就是收集相應的資訊,已確定問題產生的原因並尋找對應的解決方法。hanganalyze和systenstate對於分析此類問題有很大的幫助,建議的生成方式如下:
1、 export ORACLE_SID=生產環境ORACLE_SID
2、 使用SQL*Plus以sysdba身份登入:
sqlplus -prelim / as sysdba
重複三次,建立三個會話(SQL1, SQL2, and SQL3)
3、 在SQL1執行如下命令 :
SQL1> oradebug setmypid
SQL1> oradebug unlimit
SQL1> oradebug hanganalyze 3
4、 在SQL2 執行如下命令:
SQL2> oradebug setmypid
SQL2> oradebug unlimit
SQL2> oradebug dump systemstate 266
5、 等待至少兩分鐘.
6、 在SQL1 執行如下命令:
SQL1> oradebug hanganalyze 3
7、 在SQL3 執行如下命令:
SQL3> oradebug setmypid
SQL3> oradebug unlimit
SQL3> oradebug dump systemstate 266
三份新的trace檔案會在user_dump_destination下生成,其中一份包含兩次hanganalyze的dump,另外兩份各包含一次systemstate dump。
對於叢集環境,可以採用如下步驟:
1、 export ORACLE_SID=生產環境ORACLE_SID
2、 透過SQL*Plus以sysdba身份連線資料庫:
sqlplus -prelim / as sysdba
3、 執行如下命令:
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug -g all hanganalyze 3
SQL> oradebug -g all dump systemstate 266
4、 等待至少兩分鐘
5、 執行如下命令:
SQL> oradebug -g all hanganalyze 3
SQL> oradebug -g all dump systemstate 266
trace檔案會被寫入到diag後臺程式的trace檔案中,在每個節點的background_dump_destination目錄中。
參考文件:
How to Use Oradebug to Get Trace File Name and Location [ID 310830.1]
How to Enable SQL_TRACE for Another Session or in MTS Using Oradebug
[ID 1058210.6]
ORADEBUG - UNDOCUMENTED ORACLE UTILITY By Miladin Modrakovic
Oracle Performance Diagnostic Guide Hang/Locking
10046 Trace啟動方法
開啟當前會話的10046 Trace
使用sql_trace引數
sql_trace應該是簡單快捷的開啟Trace的方法了,不過透過sql_trace只能開啟級別為1的Trace,而無法開啟其他更高階的Trace。
1 2 3 4 5 |
-- 開啟Trace ALTER SESSION SET sql_trace=true;
-- 關閉Trace ALTER SESSION SET sql_trace=false; |
使用set event開啟Trace
使用set event開啟10046事件Trace是最常用的了。
1 2 3 4 5 |
-- 開啟級別為12的Trace,level後面的數字設定了Trace的級別 ALTER SESSION SET EVENTS '10046 trace name context forever, level 12'
-- 關閉Trace,任何級別 ALTER SESSION SET EVENTS '10046 trace name context off' |
開啟其他會話的10046 Trace
使用登陸觸發器開啟Trace
我們可以透過編寫登陸觸發器來開啟10046 Trace,使用這種方法開啟Trace的程式碼和開啟當前會話的是一樣的,不同的就是這些開啟程式碼是包含在一個after logon觸發器裡面的。
1 2 3 4 5 6 7 8 9 10 |
-- 程式碼來自《Optimazing Oracle Performance》 P116 CREATE OR REPLACE TRIGGER trace_test_user AFTER LOGON ON DATABASE BEGIN IF USER LIKE '%\_test' ESCAPE '\' THEN EXECUTE IMMEDIATE 'ALTER SESSION SET timed_statistics=true'; EXECUTE IMMEDIATE 'ALTER SESSION SET max_dump_file_size=unlimited'; EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''10046 trace name context forever, level 8'' '; END IF; END; / |
使用oradebug工具
使用oradebug工具必須要知道所要處理的程式的OS程式PID,OS PID可以使用下面的語句得到:
1 2 3 4 5 6 |
SELECT S.USERNAME, P.SPID OS_PROCESS_ID, P.PID ORACLE_PROCESS_ID FROM V$SESSION S, V$PROCESS P WHERE S.PADDR = P.ADDR AND S.USERNAME = UPPER('&USER_NAME'); |
得到PID之後就可以使用oradebug工具了,注意需要使用sysdba登陸:
1 2 3 4 5 6 7 8 |
-- 假設9999為會話的OS PID oradebug setospid 9999; -- 設定Trace檔案大小 oradebug unlimit; -- 開啟級別為12的Trace oradebug event 10046 trace name context forever ,level 12; --關閉trace Oradebug event 10046 trace name context off; |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29209863/viewspace-2138299/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oradebug分析oracle hangOracle
- oradebug分析oracle hang或慢_sqlplus_prelimOracleSQL
- 淺談mysql innodb lockingMySql
- 使用oradebug dump hanganalyze分析oracle hang系列一Oracle
- 使用oradebug dump hanganalyze 分析oracle hang系列二Oracle
- 使用oradebug dump hanganalyze 分析oracle hang系列三Oracle
- 使用HANGANALYZE跟蹤檔案診例項hang問題
- 淺談hosts檔案
- NDK問題 : Javah 生成.h檔案Java
- 基於oracle 10.2.0.1 rac使用oradebug dump hanganalyze 分析oracle hang系列四Oracle
- 基於oracle 10.2.0.1 rac使用oradebug dump hanganalyze 分析oracle hang系列五Oracle
- 基於oracle 10.2.0.1 rac使用oradebug dump hanganalyze 分析oracle hang系列六Oracle
- hibernate的hbm檔案生成問題
- myeclipse生成影射檔案的問題Eclipse
- 淺談 Android Dex 檔案Android
- oradebug處理DB hang情況
- Trace檔案過量生成問題解決
- 如何使用 Python 或 Bash動態生成 Jekyll 配置檔案Python
- 淺談生成函式函式
- Oracle Trace檔案過量生成問題解決Oracle
- 淺談 js 中的 this 指向問題JS
- 淺談深度學習落地問題深度學習
- 淺談天涯收費問題薦
- 使用主題檔案(包含CSS檔案)時遇到的問題CSS
- 停止MySQL服務hang的問題簡單分析(一)MySql
- 在oracle10g及oracle11g使用oradebug生成systemstate dump檔案系列二Oracle
- 從Connection Reset問題淺談DBCP的使用技巧薦
- 記一次:歸檔檔案系統問題導致資料庫hang處理資料庫
- WAS startnode hang問題解決
- 淺談 PHP 生成器PHP
- 如何查詢 library locking 問題
- 淺談Android的檔案儲存Android
- 使用oradebug來獲取跟蹤檔案的位置
- 淺談MySql整型索引和字串索引失效或隱式轉換問題汊叄MySql索引字串
- AIX檔案系統滿的問題分析AI
- 淺談SQL Server中的快照問題SQLServer
- 淺談深度學習的落地問題深度學習
- 閉包 | 淺談JavaScript閉包問題JavaScript