怎樣用除錯工具Dump Oracle系統狀態
如果Oracle資料庫hang住了,對Oracle做system dump,或做hang analyze,是研究和解決問題的有效辦法,至少在提交SR時能夠有更多的有用資訊。如果能夠連線資料庫,並能夠進行操作,那麼用oradebug是簡單快捷的辦法。
但有的時候,資料庫由於hang住,sqlplus不能連線時(在10g可以嘗試用sqlplus -prelim連線資料庫),可以使用作業系統上的除錯工具來dump oracle系統狀態。在一文中,就曾使用dbx做systemstate dump,並發現問題所在,並最終解決了問題。下面是當時用dbx做dump的過程:
# dbx -a 446910
Waiting to attach to process 446910 …
Successfully attached to oracle.
Type ‘help’ for help.
reading symbolic information …
stopped in iosl.select at 0×9000000000c94d8 ($t2)
0×9000000000c94d8 (select+0xfffffffffff06318) e8410028 ld r2,0×28(r1)
(dbx) print ksudss(10)Segmentation fault in slrac at 0×100083aa0 ($t2)
0×100083aa0 (slrac+0xe4) 88030000 lbz r0,0×0(r3)
(dbx) detach
從上面可以看到,使用dbx做dump的過程為:
- 找到有異常的程式號,比如CPU非常高,HANG住的程式等。如果做系統範圍的systemstate dump,可以是其他的程式。
- dbx -a < 程式號>
- print ksudss(10) --這裡是直接呼叫ORACLE程式中的ksudss函式,dump level為10,就等同於在sqlplus 中用oradebug dump systemstate 10
- detach
- quit
在LINUX下可以使用gdb,下面是一個例子:
[oracle@xty ~]$ ps -ef | grep LOCAL
oracle 3765 3764 1 05:55 ? 00:00:00 oraclexty (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 3767 3668 0 05:55 pts/2 00:00:00 grep LOCAL
[oracle@xty ~]$ gdb $ORACLE_HOME/bin/oracle 3765
GNU gdb Red Hat Linux (6.1post-1.20040607.62rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...(no debugging symbols found)...Using host libthread_db library "/lib/tls/libthread_db.so.1".Attaching to program: /u01/app/oracle/product/10.1.0/db_1/bin/oracle, process 3765
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libskgxp10.so...(no debugging symbols found)...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libskgxp10.so
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libhasgen10.so...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libhasgen10.so
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libskgxn2.so...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libskgxn2.so
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libocr10.so...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libocr10.so
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libocrb10.so...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libocrb10.so
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libocrutl10.so...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libocrutl10.so
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libjox10.so...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libjox10.so
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libclsra10.so...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libclsra10.so
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libdbcfg10.so...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libdbcfg10.so
Reading symbols from /u01/app/oracle/product/10.1.0/db_1/lib/libnnz10.so...done.
Loaded symbols for /u01/app/oracle/product/10.1.0/db_1/lib/libnnz10.so
Reading symbols from /usr/lib/libaio.so.1...done.
Loaded symbols for /usr/lib/libaio.so.1
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/tls/libm.so.6...done.
Loaded symbols for /lib/tls/libm.so.6
Reading symbols from /lib/tls/libpthread.so.0...done.
[Thread debugging using libthread_db enabled]
[New Thread -1219938624 (LWP 3765)]
Loaded symbols for /lib/tls/libpthread.so.0
Reading symbols from /lib/libnsl.so.1...done.
Loaded symbols for /lib/libnsl.so.1
Reading symbols from /lib/tls/libc.so.6...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /lib/libnss_files.so.2...done.
Loaded symbols for /lib/libnss_files.so.2
0x006967a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
(gdb) print ksudss(10)
[Switching to Thread -1219938624 (LWP 3765)]
$1 = 213658428
(gdb) detach
Detaching from program: /u01/app/oracle/product/10.1.0/db_1/bin/oracle, process 3765
(gdb) quit
然後我們可以找到有dump結果的trace檔案:
[oracle@xty ~]$ cd $ORACLE_BASE/admin/xty/udump
[oracle@xty udump]$ ls -lrt | grep 3765
-rw-r----- 1 oracle oinstall 599705 Nov 21 05:56 xty_ora_3765.trc
根據debugger工具attach程式的不同,trace檔案一般在user_dump_dest或background_dump_dest目錄下。
在LINUX下用gdb,在AIX下用dbx,那麼在HP-UX下呢,可以用HP的wdb(可以到檢視HP WDB的詳細資訊和下載最新的版本。在solaris上,也會有dbx或gdb(各個平臺有多種不同的debugger,其他還有adb,mdb等等)。有興趣的朋友可以用用。
除了上面提到的systemstate dump,還能不能夠做其他的dump?答案是肯定的,以下是一些dump相關的函式:
print ksdhng(3,1,0) 相當於oradebug hanganalyze 3
print ksudps(10) 相當於oradebug dump processstate 10
print curdmp() 相當於oradebug call curdmp(也就是oradebug dump cursordump)
print ksdtrc(4) 相當於oradebug dump events 4(這裡參數列示level,1--session,2--process,4--system)
以上列出的,不一定對處理HANG有意義,只是這裡覺得有些意思。^_^.其他還有意思的包括:
print ksdsel(10046,12) --相當於為attach的程式設定10046事件level 12
print skdxipc() --相當於oradebug ipc
print skdxprst() --相當於oradebug procstat
注意:不要在正常執行的生產系統上執行和測試。
當然,如果能用oradebug,那麼就用oradebug,畢竟方便很多,也更安全。這裡只是對使用debugger做dump一些擴充,供有興趣研究的朋友參考。
補充:在HP-UX上使用gdb進行system dump,可能會更復雜,可以參考Oracle Metalink Doc 273324.1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29209863/viewspace-2138301/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【除錯】SystemTap除錯網路卡狀態一例除錯
- 除錯利器 Laravel Dump Server除錯LaravelServer
- IE console.log 除錯狀態除錯
- oracle關閉狀態刪除活動日誌報錯恢復(一)Oracle
- react-query手把手教程④-快取狀態與除錯工具React快取除錯
- Linux發展現狀怎麼樣?系統運維工作怎麼樣?Linux運維
- win10系統下火狐瀏覽器怎麼安裝除錯工具Win10瀏覽器除錯
- gdb除錯core dump檔案之二除錯
- 谷歌開發者工具除錯CSS樣式谷歌除錯CSS
- Oracle redo解析之-2、BBED & DUMP工具使用Oracle Redo
- 數字樣機:飛行器狀態控制系統模擬
- win10怎麼恢復系統初始狀態 win10系統還原成原始狀態的方法Win10
- 怎樣運用TPM讓裝置管理煥發最優狀態?
- 企微scrm系統怎麼用?怎麼樣使用圈量工具搭建私域流量體系
- 主用ATC系統執行狀態筆記(一)筆記
- 系統設計架構:有狀態與無狀態架構
- 系統狀態統計和檢視
- win10中word怎麼切換改寫狀態_win10怎樣切換插入狀態和改寫狀態Win10
- win10系統怎麼刪除Google Software Reporter工具Win10Go
- mac系統狀態監控工具 iStat Menus for Mac 中文破 解版Mac
- 嵌入式系統除錯Uboot串列埠互動除錯除錯boot串列埠
- flink狀態容錯
- Oracle buffer狀態深入剖析Oracle
- Kylin系統檢視firewalld狀態
- Android 隱藏系統狀態列Android
- Laravel Telescope:優雅的應用除錯工具Laravel除錯
- Web 除錯工具 Proxyman 啟用最新版Web除錯
- OpenHarmony系統使用gdb除錯init除錯
- PDM系統在技術狀態管理中的應用研究
- 印表機狀態錯誤是怎麼回事 win7win10電腦顯示列印狀態錯誤怎麼解決Win7Win10
- SAP PP COR2下達工單系統報錯說-系統狀態APNG是啟用的- 分析第二篇
- win10系統修復工具怎樣使用_win10系統修復工具使用步驟Win10
- 系統狀態下的洞察力
- Linux中系統狀態檢測命令Linux
- Oracle SCN健康狀態檢查Oracle
- oracle之 如何 dump logfileOracle
- vscode配置遠端linux系統除錯VSCodeLinux除錯
- CM3除錯系統簡析除錯
- windows系統vscode遠端除錯MySQLWindowsVSCode除錯MySql