oradebug可以幫助我們做很多事情,如dump記憶體資訊、設定事件、掛起程序等。本文主要介紹如何使用oradebug掛起程序。
為什麼要掛起程序呢?比如因為開發人員對資料庫執行乙個很大的操作,嚴重影響了資料庫的正常執行,此時你有兩個選擇:
1、刪掉程序
2、暫停程序
實際上,我們往往不能十分確定把程序直接kill掉會造成什麼後果,所以暫停程序的執行就是乙個比較折中的選擇。
要暫停程序步驟很簡單:首先找到程序,然後暫停就可以了。
使用oradebug暫停程序時,可以使用pid,也可以使用spid。要找出這些資訊有很多方式了,比如可以在作業系統中 ps -ef、可以通過v$session、v$process、v$bgprocess等檢視通過關聯得到。
下面通過乙個例子來說明如何oradebug干預程序的執行狀態:
1、找出程序號
本例我們要掛起以使用者suk登入的會話:
以sys使用者登入查詢:
sql> select pid,spid from v$process where addr in (select paddr from v$session where username='suk');
pid spid
---------- ------------
10 4107
2、設定要操作的程序號
有兩種方法:
1)用spid設定
sql> oradebug setospid 4107
oracle pid: 10, unix process pid: 4107, image:
oracle@suk
(tns v1-v3)
2)用pid設定
sql> oradebug setorapid 10
unix process pid: 4107, image:
oracle@suk
(tns v1-v3)
3、暫停程序執行
sql> oradebug suspend
statement processed.
此時,程序號為4107的程序將會處於掛起狀態。我們稍後可以重啟它。
4、重啟程序
重啟程序也要先設定程序號:
sql> oradebug setospid 4107
oracle pid: 10, unix process pid: 4107, image:
oracle@suk
(tns v1-v3)
sql> oradebug resume
statement processed.
注意:不能在會話中suspend當前會話。如果那樣做的話,當前會話會被hang,並且不能被其他session resume,只能kill方式關閉。
Windows掛起程序
window系統並沒有公開提供掛起程序的api,但提供了suspendthread,對乙個程式的掛起,即對該程式所有的執行緒的掛起。首先引用標頭檔案 include windows標頭檔案 include windows程序與執行緒快照需要通過建立系統程序與執行緒的快照來停止對應程序的執行緒。1.根...
python 掛起 python 請求程序掛起
我正在使用請求獲取url,例如 while true try rv requests.get url,timeout 1 dosth rv except socket.timeout as e print e except exception as e print e 執行一段時間後,它會退出工作狀...
程序 執行緒 阻塞 掛起
阻塞與掛起 非同步訊息對列讀取 object 類中 wait,notify 與 notifyall 方法可以用來實現執行緒之間的排程,比如在阻塞佇列 blockingqueue 的實現中,如果隊列為空,則所有消費者執行緒進行阻塞 wait 如果某乙個時刻佇列中新新增了乙個元素,則需要喚醒某個或所有阻...