oracle死鎖時殺進程的方法:

我們提供的服務有:成都網(wǎng)站建設、網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、惠民ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的惠民網(wǎng)站制作公司
第一步:嘗試在sqlplus中通過sql命令進行刪除,如果能夠刪除成功,則萬事大吉。但通常情況下,出現(xiàn)死鎖時,想通過命令行或者通過oracle的管理工具刪除有死鎖的session,oracle只會將該session標記為killed,但無法清除掉,往往需要通過第二步在操作系統(tǒng)層級進行刪除。
第二步:
1、select xidusn, object_id, session_id, locked_mode from v$locked_object; --查死鎖的對象,獲取其SESSION_ID。
2、select username,sid,serial# from v$session where sid=29; --根據(jù)上步獲取到的sid查看其serial#號。
3、alter system kill session '29,57107'; --刪除進程,如已經(jīng)刪除過,則會報ora-00031的錯誤;否則oracle會將該session標記為killed狀態(tài),等待一段時間看能否會自動消失,如長時間消失不掉,則需要做后續(xù)步驟。
一些ORACLE中的進程被殺掉后,狀態(tài)被置為"killed",但是鎖定的資源很長時間不釋放,有時實在沒辦法,只好重啟數(shù)據(jù)庫。現(xiàn)在提供一種方法解決這種問題,那就是在ORACLE中殺不掉的,在OS一級再殺。
1.關閉oracle所有的服務。可以在windows的服務管理器中關閉;\x0d\x0a\x0d\x0a 2.打開注冊表:regedit 打開路徑:\x0d\x0a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ \x0d\x0a 刪除該路徑下的所有以oracle開始的服務名稱,這個鍵是標識Oracle在windows下注冊的各種服務!\x0d\x0a \x0d\x0a 3.打開注冊表,找到路徑:\x0d\x0a HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\x0d\x0a 刪除該oracle目錄,該目錄下注冊著Oracle數(shù)據(jù)庫的軟件安裝信息。\x0d\x0a \x0d\x0a 4.刪除注冊的oracle事件日志,打開注冊表\x0d\x0a HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\x0d\x0a 刪除注冊表的以oracle開頭的所有項目。\x0d\x0a \x0d\x0a 5.刪除環(huán)境變量path中關于oracle的內(nèi)容。\x0d\x0a 鼠標右鍵右單擊“我的電腦--屬性--高級--環(huán)境變量--PATH 變量。\x0d\x0a 刪除Oracle在該值中的內(nèi)容。注意:path中記錄著一堆操作系統(tǒng)的目錄,在windows中各個目錄之間使用分號(;)隔開的,刪除時注意。\x0d\x0a 建議:刪除PATH環(huán)境變量中關于Oracle的值時,將該值全部拷貝到文本編輯器中,找到對應的Oracle的值,刪除后,再拷貝修改的串,粘貼到PATH環(huán)境變量中,這樣相對而言比較安全。\x0d\x0a \x0d\x0a 6.重新啟動操作系統(tǒng)。\x0d\x0a 以上1~5個步驟操作完畢后,重新啟動操作系統(tǒng)。\x0d\x0a \x0d\x0a 7.重啟操作系統(tǒng)后各種Oracle相關的進程都不會加載了。這時刪除Oracle_Home下的所有數(shù)據(jù)。(Oracle_Home指Oracle程序的安裝目錄)\x0d\x0a \x0d\x0a 8.刪除C:\Program Files下oracle目錄。\x0d\x0a (該目錄視Oracle安裝所在路徑而定)\x0d\x0a \x0d\x0a 9.刪除開始菜單下oracle項,如:\x0d\x0a C:\Documents and Settings\All Users\「開始」菜單\程序\Oracle - Ora10g\x0d\x0a 不同的安裝這個目錄稍有不同。\x0d\x0a 如果不刪除開始菜單下的Oracle相關菜單目錄,沒關系,這個不影響再次安裝Oracle.當再次安裝Oracle時,該菜單會被替換。\x0d\x0a \x0d\x0a 至此,Windows平臺下Oracle就徹底卸載了。
方法/步驟\x0d\x0a1.查詢哪些對象被鎖:\x0d\x0aselect object_name,machine,s.sid,s.serial# \x0d\x0afrom v$locked_object l,dba_objects o ,v$session s\x0d\x0awhere l.object_id = o.object_id and l.session_id=s.sid;\x0d\x0a\x0d\x0a2.殺死進程:\x0d\x0aalter system kill session '137,233'; (其中137,223分別是上面查詢出的sid,serial#)\x0d\x0a\x0d\x0aPS.以上兩步,可通過Oracle的管理控制臺來執(zhí)行。\x0d\x0a\x0d\x0a如果利用上面的方法殺死進程后,進程狀態(tài)雖被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么可以在OS一級再殺死相應的進程(線程)\x0d\x0a\x0d\x0a1.首先獲得進程(線程)號:\x0d\x0aselect spid, osuser, s.program \x0d\x0afrom v$session s,v$process p\x0d\x0awhere s.paddr=p.addr and s.sid=137 (137是上面的sid)\x0d\x0a\x0d\x0a2.在OS上殺死這個進程(線程):\x0d\x0a\x0d\x0a1)在unix上,用root身份執(zhí)行命令: \x0d\x0a#kill -9 12345(即上面查詢出的spid)\x0d\x0a\x0d\x0a2)在windows(unix也適用)用orakill殺死線程,例:c:orakill orcl 12345\x0d\x0aorakill是oracle提供的一個可執(zhí)行命令,語法為:orakill sid thread\x0d\x0a其中:\x0d\x0asid:表示要殺死的進程屬于的實例名\x0d\x0athread:是要殺掉的線程號,即上面查詢出的spid。
卸載Oracle總體分為三步 1.主程序的卸載 2.殘留文件的刪除 3.注冊表清理
1.主程序卸載只要運行 Oracle OraDB11g_home1--Oracle安裝產(chǎn)品--Universal Installerd
程序運行起來后 ,選擇卸載產(chǎn)品進去下面的頁子
如上圖選擇,如果你安裝了Client 也將client文件夾選中。
然后就是等待 當進度走完后我們的第一步就完成了。
2.硬板上殘留文件的卸載。
Oracle在安裝時會安裝到你的系統(tǒng)盤和你安裝時所選的主程序安裝盤,以我的系統(tǒng)為例Oracle分別安裝在我的C盤和G盤。
C:\Program Files (x86)\Oracle 與 G:\app 這兩個文件夾及其子文件全部刪除。中間會提示,有的文件程序正在使用無法刪除,我們稍后再來管它。
到此刪除殘留文件就大部分完成了。
3.刪除注冊表
在 開始--搜索中輸入regedit 打開注冊表編輯器
如上所示 所有 services 文件夾下 所有帶“Oracle”的文件全部刪除。重新啟動計算機,在去刪除 第二步中沒有刪除的殘留文件。
到此Oracle已經(jīng)徹底的從你的計算機上刪除了
方法/步驟
1.查詢哪些對象被鎖:
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
2.殺死進程:
alter system kill session '137,233'; (其中137,223分別是上面查詢出的sid,serial#)
PS.以上兩步,可通過Oracle的管理控制臺來執(zhí)行。
如果利用上面的方法殺死進程后,進程狀態(tài)雖被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么可以在OS一級再殺死相應的進程(線程)
1.首先獲得進程(線程)號:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=137 (137是上面的sid)
2.在OS上殺死這個進程(線程):
1)在unix上,用root身份執(zhí)行命令:
#kill -9 12345(即上面查詢出的spid)
2)在windows(unix也適用)用orakill殺死線程,例:c:orakill orcl 12345
orakill是oracle提供的一個可執(zhí)行命令,語法為:orakill sid thread
其中:
sid:表示要殺死的進程屬于的實例名
thread:是要殺掉的線程號,即上面查詢出的spid。
一、工具
pl/sql數(shù)據(jù)庫
二、操作步驟
首先通過pl/sql查詢到目前長時間活動的進程:
2.選擇sessions,得到界面:
3.得到某個SID和serialId.
然后切換到超級用戶下面,執(zhí)行下面下面:select?c.spid?from?v$process?c?where?c.addr=(select?b.paddr?from?v$session?b
where?b.sid=?'15'?and?b.serial#=?'16985')?得到spid.?然后登錄到數(shù)據(jù)庫的機器,執(zhí)行如下命令即完成殺掉oracle進程:
三、注意事項:如果是生產(chǎn)環(huán)境,要盡量減少停機時間,讓數(shù)據(jù)庫盡快恢復使用。
當前標題:怎么殺死oracle程序 oracle殺進程sql
標題URL:http://www.chinadenli.net/article20/hipsjo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、品牌網(wǎng)站制作、商城網(wǎng)站、域名注冊、動態(tài)網(wǎng)站、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)