一些ORACLE中的進程被殺掉后,狀態被置為"killed",但是鎖定的資源很長時間不釋放,有時實在沒辦法,只好重啟數據庫。現在提供一種方法解決這種問題,那就是在ORACLE中殺不掉的,在OS一級再殺。
創新互聯長期為上千家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為敦化企業提供專業的成都網站制作、成都做網站,敦化網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發。
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 '24,111'; (其中24,111分別是上面查詢出的sid,serial#)
【注】以上兩步,可以通過Oracle的管理控制臺來執行。
3.如果利用上面的命令殺死一個進程后,進程狀態被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么可以在os一級再殺死相應的進程(線程),首先執行下面的語句獲得進程(線程)號:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=24 (24是上面的sid)
4.在OS上殺死這個進程(線程):
1)在unix上,用root身份執行命令:
#kill -9 12345(即第3步查詢出的spid)
2)在windows(unix也適用)用orakill殺死線程,orakill是oracle提供的一個可執行命令,語法為:
orakill sid thread
其中:
sid:表示要殺死的進程屬于的實例名
thread:是要殺掉的線程號,即第3步查詢出的spid。
例:c:orakill orcl 12345
ques
1:oracl里是有很多鎖,但是很多它是自己用的。你無需操心。但要明白原理。
ques
2:
任何一條sql語句都會啟動一種鎖。比如select就會啟動共享鎖。如果用了select...for
update
就會在那一行加上排它鎖。不允許其他的會話改著條數據,但是很多在完畢了就釋放了。因為運行的很快。一般commit就會釋放鎖。
ques
3:事務T1對A加了一個排它鎖,在oracle中不可以加其它鎖了。
ques
4:事務T1對A加了一個共享鎖,還可以加共享鎖,和排他鎖。
在對指定表做append操作,其他再做truncate時候,會產生鎖表,如下驗證步驟,
1、創建測試表,
create table test_lock(id number, value varchar2(200));
2、執行append語句;并且不做提交,insert /*+append*/ into test_lock values(1,1);
3、再次執行清表語句,truncate table test_lock;報鎖表錯誤,
4、查看鎖表語句,發現被鎖表,
select b.object_name, t.*
from v$locked_object t, user_objects b
where t.object_id = b.object_id
網頁標題:oracle如何鎖住表,oracle鎖表怎么處理
URL地址:http://m.newbst.com/article32/hsohpc.html
成都網站建設公司_創新互聯,為您提供網站設計公司、營銷型網站建設、全網營銷推廣、移動網站建設、虛擬主機、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯