♣sql
題目部分數據庫
在Oracle中,如何收集systemdump?如何收集hanganalyze?session
♣oracle
答案部分
app
若sysdba可登錄,則使用命令「sqlplus "/as sysdba"」登陸系統。若不能登陸,則使用「sqlplus -prelim "/as sysdba"」登陸系統,而後使用oradebug收集systemdump,以下所示:ide
1SQL>oradebug setmypid 2SQL>--其中266表示dump的級別,不用調整,即把系統當前各個進程正在執行什麼、正在等待什麼所有抓下來 3SQL>oradebug dump systemstate 266 4SQL>--等上30秒到1分鐘 5SQL>oradebug dump systemstate 266 6SQL>oradebug tracefile_name 7/u02/app/oracle/diag/rdbms/lhrdb/lhrdb/trace/lhrdb_ora_46679.trc
若要得到某個進程的狀態,則:性能
1SYS@lhrdb> oradebug TRACEFILE_NAME 2/u02/app/oracle/diag/rdbms/lhrdb/lhrdb/trace/lhrdb_ora_54008.trc 3SYS@lhrdb> oradebug setospid 54008 4Oracle pid: 37, Unix process pid: 54008, image: oracle@orclalhr (TNS V1-V3) 5SYS@lhrdb> oradebug dump processstate 10 6Statement processed.
若是系統HANG住的時候,則systemstate基本等同於hanganalyze,能夠用於診斷SYSTEM HANG住的問題。Oracle數據庫可能由於HANG住而產生嚴重的性能問題,經過hanganalyze功能產生的日誌能夠幫助DBA快速地診斷出數據庫的問題,以下所示:debug
1SQL> alter session set events 'immediate trace name HANGANALYZE level 3';
對於單實例而言,以下設置:日誌
1SQL>ORADEBUG hanganalyze 3
對於RAC環境,以下設置:blog
1SQL>ORADEBUG setmypid 2SQL>ORADEBUG setinst all 3SQL>ORADEBUG -g def hanganalyze 3