用oradebug掛起程式

space6212發表於2019-01-07

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: (TNS V1-V3)
2)用pid設定
SQL> oradebug setorapid 10
Unix process pid: 4107, image: (TNS V1-V3)

3、暫停程式執行
SQL> oradebug suspend
Statement processed.

此時,程式號為4107的程式將會處於掛起狀態。我們稍後可以重啟它。

4、重啟程式
重啟程式也要先設定程式號:
SQL> oradebug setospid 4107
Oracle pid: 10, Unix process pid: 4107, image: (TNS V1-V3)
SQL> oradebug resume
Statement processed.

 

注意:不能在會話中suspend當前會話。如果那樣做的話,當前會話會被hang,並且不能被其他session resume,只能kill方式關閉。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-366361/,如需轉載,請註明出處,否則將追究法律責任。

相關文章