欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

處理Oracle中殺不掉的鎖

系統 2539 0

一些ORACLE中的進程被殺掉后,狀態被置為"killed",但是鎖定的資源很長時間不釋放,有時實在沒辦法,只好重啟數據庫。 現在提供一種方法解決這種問題,那1.就是在ORACLE中殺不掉的,2.在OS一級再殺。

1.下面的語句用來查詢哪些對象被鎖:
select a.object_name,a.object_type,s.osuser,s.username,s.status,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s ,all_objects a
where l.object_id = o.object_id and l.session_id=s.sid and a.object_id=l.OBJECT_ID



?
?
?

object_name: 被鎖的對象名;object_type: 對象類型; osuser:主機名稱; username:oracle鏈接用戶名;

machine:完整主機名;

?

1.2 查詢可能出現鎖表的語句(orale10g支持正則)

?
?


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:表示要殺死的進程屬于的實例名 就是你安裝的oracle的sid名字如我的是 orcl
thread:是要殺掉的線程號,即第3步查詢出的spid。
例:c:>orakill orcl 12345

====================================

Oracle中Kill session的研究

我們知道,在Oracle數據庫中,可以通過kill?session的方式來終止一個進程,其基本語法結構為:
alter?system?kill?session?’sid,serial#’?;?
?
被kill掉的session,狀態會被標記為killed,Oracle會在該用戶下一次touch時清除該進程.

我們發現當一個session被kill掉以后,該session的paddr被修改,如果有多個session被kill,那么多個session的paddr都被更改為相同的進程地址:
SQL>?select?saddr,sid,serial#,paddr,username,status?from?v$session?where?username?is?not?null;

SADDR???????????SID????SERIAL#?PADDR????USERNAME???????????????????????STATUS
--------?----------?----------?--------?------------------------------?--------
542E0E6C?????????11????????314?542B70E8?EYGLE??????????????????????????INACTIVE
542E5044?????????18????????662?542B6D38?SYS????????????????????????????ACTIVE


SQL>?alter?system?kill?session?’11,314’;

System?altered.

SQL>?select?saddr,sid,serial#,paddr,username,status?from?v$session?where?username?is?not?null;

SADDR???????????SID????SERIAL#?PADDR????USERNAME???????????????????????STATUS
--------?----------?----------?--------?------------------------------?--------
542E0E6C?????????11????????314?542D6BD4?EYGLE??????????????????????????KILLED
542E5044?????????18????????662?542B6D38?SYS????????????????????????????ACTIVE


SQL>?select?saddr,sid,serial#,paddr,username,status?from?v$session?where?username?is?not?null;

SADDR???????????SID????SERIAL#?PADDR????USERNAME???????????????????????STATUS
--------?----------?----------?--------?------------------------------?--------
542E0E6C?????????11????????314?542D6BD4?EYGLE??????????????????????????KILLED
542E2AA4?????????14????????397?542B7498?EQSP???????????????????????????INACTIVE
542E5044?????????18????????662?542B6D38?SYS????????????????????????????ACTIVE

SQL>?alter?system?kill?session?’14,397’;

System?altered.

SQL>?select?saddr,sid,serial#,paddr,username,status?from?v$session?where?username?is?not?null;

SADDR???????????SID????SERIAL#?PADDR????USERNAME???????????????????????STATUS
--------?----------?----------?--------?------------------------------?--------
542E0E6C?????????11????????314?542D6BD4?EYGLE??????????????????????????KILLED
542E2AA4?????????14????????397?542D6BD4?EQSP???????????????????????????KILLED
542E5044?????????18????????662?542B6D38?SYS????????????????????????????ACTIVE


在這種情況下,很多時候,資源是無法釋放的,我們需要查詢spid,在操作系統級來kill這些進程.但是由于此時v$session.paddr已經改變,我們無法通過v$session和v$process關聯來獲得spid那還可以怎么辦呢?
我們來看一下下面的查詢:
??SQL>?SELECT?s.username,s.status,
??2??x.ADDR,x.KSLLAPSC,x.KSLLAPSN,x.KSLLASPO,x.KSLLID1R,x.KSLLRTYP,
??3??decode(bitand?(x.ksuprflg,2),0,null,1)
??4??FROM?x$ksupr?x,v$session?s
??5??WHERE?s.paddr(+)=x.addr
??6??and?bitand(ksspaflg,1)!=0;


USERNAME???????????????????????STATUS???ADDR???????KSLLAPSC???KSLLAPSN?KSLLASPO???????KSLLID1R?KS?D
------------------------------?--------?--------?----------?----------?------------?----------?--?-
????????????????????????????????????????542B44A8??????????0??????????0???????????????????????0
???????????????????????????????ACTIVE???542B4858??????????1?????????14?24069?????????????????0????1
???????????????????????????????ACTIVE???542B4C08?????????26?????????16?15901?????????????????0????1
???????????????????????????????ACTIVE???542B4FB8??????????7?????????46?24083?????????????????0????1
???????????????????????????????ACTIVE???542B5368?????????12?????????15?24081?????????????????0????1
???????????????????????????????ACTIVE???542B5718?????????15?????????46?24083?????????????????0????1
???????????????????????????????ACTIVE???542B5AC8?????????79??????????4?15923?????????????????0????1
???????????????????????????????ACTIVE???542B5E78?????????50?????????16?24085?????????????????0????1
???????????????????????????????ACTIVE???542B6228????????754?????????15?24081?????????????????0????1
???????????????????????????????ACTIVE???542B65D8??????????1?????????14?24069?????????????????0????1
???????????????????????????????ACTIVE???542B6988??????????2?????????30?14571?????????????????0????1

USERNAME???????????????????????STATUS???ADDR???????KSLLAPSC???KSLLAPSN?KSLLASPO???????KSLLID1R?KS?D
------------------------------?--------?--------?----------?----------?------------?----------?--?-
SYS????????????????????????????ACTIVE???542B6D38??????????2??????????8?24071?????????????????0
????????????????????????????????????????542B70E8??????????1?????????15?24081???????????????195?EV
????????????????????????????????????????542B7498??????????1?????????15?24081???????????????195?EV
SYS????????????????????????????INACTIVE?542B7848??????????0??????????0???????????????????????0
SYS????????????????????????????INACTIVE?542B7BF8??????????1?????????15?24081???????????????195?EV

16?rows?selected.

?
我們注意,紅字標出的部分就是被Kill掉的進程的進程地址.

簡化一點,其實就是如下概念:
SQL>?select?p.addr?from?v$process?p?where?pid?<>?1?2?minus?3?select?s.paddr?from?v$session?s;
ADDR
--------
542B70E8
542B7498
?

Ok,現在我們獲得了進程地址,就可以在v$process中找到spid,然后可以使用Kill或者orakill在系統級來殺掉這些進程.實際上,我猜測:當在Oracle中kill?session以后,?Oracle只是簡單的把相關session的paddr?指向同一個虛擬地址.此時v$process和v$session失去關聯,進程就此中斷.然后Oracle就等待PMON去清除這些Session.所以通常等待一個被標記為Killed的Session退出需要花費很長的時間.如果此時被Kill的process,重新嘗試執行任務,那么馬上會收到進程中斷的提示,process退出,此時Oracle會立即啟動PMON來清除該session.這被作為一次異常中斷處理.

處理Oracle中殺不掉的鎖


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天堂中文资源在线8 | 草草视频在线观看 | 在线观看日本中文字幕 | 欧美日本免费 | 成人看片 | 久久99久久99精品免观看不卡 | 国产毛片久久久久久国产毛片 | jizz日本在线播放 | 色撸网| 国产全肉乱妇杂乱视频 | 日本免费小视频 | 亚洲国产精品一区二区第一页 | 五月天在线影院 | 三级国产视频 | 色秀视频免费网站在线观看 | 另类五月天 | 亚洲欧美日韩综合二区三区 | 欧美非洲黑人性xxxx | 欧美一区二| 超碰日韩 | 成人午夜亚洲影视在线观看 | 91久久精品国产 | 一区国产精品 | 久久久久久国产精品久久 | 成人深夜福利 | 日本黄色片一级片 | 天天看天天爽天天摸天天添 | 偷拍自拍网站 | 国产精品久久久久久中文字 | 亚洲国产精品久久网午夜 | 精品视频导航 | 国产精品人妻无码八区仙踪林 | 国产精品字幕 | 日韩av一二三区 | 免费播放欧美一级特黄 | 性一级录像片片视频免费看 | 高清国产一区二区三区四区五区 | 久草青青在线视频 | 日日操夜夜草 | 污版视频在线观看 | 亚洲色图第四页 |