黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

處理Oracle中殺不掉的鎖

系統(tǒng) 2971 0

一些ORACLE中的進(jìn)程被殺掉后,狀態(tài)被置為"killed",但是鎖定的資源很長時間不釋放,有時實在沒辦法,只好重啟數(shù)據(jù)庫。 現(xiàn)在提供一種方法解決這種問題,那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:主機(jī)名稱; username:oracle鏈接用戶名;

machine:完整主機(jī)名;

?

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

?
?


2.下面的語句用來殺死一個進(jìn)程:
alter system kill session '24,111'; (其中24,111分別是上面查詢出的sid,serial#)

【注】以上兩步,可以通過Oracle的管理控制臺來執(zhí)行。

3.如果利用上面的命令殺死一個進(jìn)程后,進(jìn)程狀態(tài)被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么可以在os一級再殺死相應(yīng)的進(jìn)程( 線程 ),首先執(zhí)行下面的語句獲得進(jìn)程(線程)號:
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上殺死這個進(jìn)程(線程):
1)在unix上,用root身份執(zhí)行命令:
#kill -9 12345(即第3步查詢出的spid)
2)在windows(unix也適用)用orakill殺死線程,orakill是oracle提供的一個可執(zhí)行命令,語法為:
orakill sid thread
其中:
sid:表示要殺死的進(jìn)程屬于的實例名 就是你安裝的oracle的sid名字如我的是 orcl
thread:是要殺掉的線程號,即第3步查詢出的spid。
例:c:>orakill orcl 12345

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

Oracle中Kill session的研究

我們知道,在Oracle數(shù)據(jù)庫中,可以通過kill?session的方式來終止一個進(jìn)程,其基本語法結(jié)構(gòu)為:
alter?system?kill?session?’sid,serial#’?;?
?
被kill掉的session,狀態(tài)會被標(biāo)記為killed,Oracle會在該用戶下一次touch時清除該進(jìn)程.

我們發(fā)現(xiàn)當(dāng)一個session被kill掉以后,該session的paddr被修改,如果有多個session被kill,那么多個session的paddr都被更改為相同的進(jìn)程地址:
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,在操作系統(tǒng)級來kill這些進(jìn)程.但是由于此時v$session.paddr已經(jīng)改變,我們無法通過v$session和v$process關(guān)聯(lián)來獲得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.

?
我們注意,紅字標(biāo)出的部分就是被Kill掉的進(jìn)程的進(jìn)程地址.

簡化一點,其實就是如下概念:
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,現(xiàn)在我們獲得了進(jìn)程地址,就可以在v$process中找到spid,然后可以使用Kill或者orakill在系統(tǒng)級來殺掉這些進(jìn)程.實際上,我猜測:當(dāng)在Oracle中kill?session以后,?Oracle只是簡單的把相關(guān)session的paddr?指向同一個虛擬地址.此時v$process和v$session失去關(guān)聯(lián),進(jìn)程就此中斷.然后Oracle就等待PMON去清除這些Session.所以通常等待一個被標(biāo)記為Killed的Session退出需要花費很長的時間.如果此時被Kill的process,重新嘗試執(zhí)行任務(wù),那么馬上會收到進(jìn)程中斷的提示,process退出,此時Oracle會立即啟動PMON來清除該session.這被作為一次異常中斷處理.

處理Oracle中殺不掉的鎖


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論