欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 国产精品久久久久久久久久久久冷 | 奇米激情 | 国产日韩一区二区三区 | 91精品久久久久久久久网影视 | 色综合综合在线 | 国产成人无码AA片免费看 | 色噜噜色噜噜天天拍一拍 | 天天激情| 国产成人精品一区二区三区四区 | 亚洲一区二区国产 | 午夜宫电影 | 婷婷色综合久久 | 日韩高清不卡 | 欧美成人影院在线观看三级 | 色妇色综合久久夜夜 | 成人福利短视频 | 欧美国产日本高清不卡 | 亚洲精品视频在线 | 国产乱人乱精一区二区视频密 | 日韩第3页| 欧美精品第二页 | www亚洲精品 | 亚洲精品久久久久久蜜臀 | 国内精品玖玖玖玖电影院 | 一道本视频 | 波多野吉衣一区 | 欧美一区二 | 欧美日韩一区二区视频在线观看 | 天天操天天干天天操 | a级毛片观看 | 欧美激情视频一区二区三区在线播放 | 国产欧美日韩精品一区 | 日韩在线视频观看 | 99热在线免费观看 | 国产日韩一区二区三区在线观看 | 国产综合亚洲精品一区二 | 99re6在线视频精品免费 | 高清性做爰免费无遮挡网站 | 精品一卡2卡三卡四卡二卡 欧美不卡一区二区三区在线观看 | 亚洲精品人成网在线播放蜜芽 | 三级在线国产 |