ORACLE SQL死鎖及結束SQL執行緒

2021-07-22 05:49:39 字數 3164 閱讀 2853

---------------lock--------------------

select l.session_id sid,

s.serial#,

l.locked_mode 鎖模式,

l.oracle_username 登入使用者,

s.username,

l.os_user_name 登入機器使用者名稱,

s.machine 機器名,

s.terminal 終端使用者名稱,

o.object_name 被鎖物件名,

--l.process, --v$process的addr欄位,通過這個可以查詢到程序對應的session

s.logon_time 登入資料庫時間,

a.sql_text,

'alter system kill session '''||l.session_id||','||s.serial#||''';' killsql

from v$locked_object l, all_objects o, v$session s, v$sql a

where l.object_id = o.object_id

and l.session_id = s.sid

and s.sql_hash_value= a.hash_value(+)

order by sid, s.serial#;

-------------runing

sql-------

----按照查詢所得sid,serial#,由plsql session檢視sql text,也可直接結束session;

----nc:由nmc使用者名稱/工號 確定sql和應用伺服器節點或者ip(確定計算機名),由plsql session檢視sql

text確定sid,serial#。

--sid-->sql

select a.username, a.sid, b.sql_text, b.sql_fulltext

from v$session a, v$sqlarea b

where a.sql_address = b.address

and sid = '485'

--【注意】session的sql內容為空:存在並行事務

--------------kill-------------

/*sid 在同乙個instance的當前session中是乙個unique key, 而sid ,serial#則是在整個instance生命期內的所有session中是unique key

所以當我們執行了kill session操作之後,能夠準確無誤的kill的某個session,不會誤殺*/

---檢視使用者的所有session(kill後才能刪除使用者)

select sid,serial# from v$session where username='ncv502'; --注意使用者名稱字母都用大寫

--select 'alter system kill session '

''||sid||','||serial#||''';' from v$session where username='ncv502';--結束使用者程序

--sys 登陸(rac登陸兩台機子),kill

--alter system kill session '609,5447';

--sid ,spid 互查(通過os

pid=ora spid排查出效率問題sql)

select a.sid, a.username, a.status, a.process, b.spid from v$session a, v$process b where a.paddr = b.addr

and a.sid = '938'

--and b.spid='20755';

--os

kill -9

spid

--------------手工觸發pmon執行,清理killed程序,釋放資源-------------

此時的v$session和v$process失去聯絡,程序就此中斷,然後oracle就等待pmon程序去清除這些被標記為killed的session,

所以通常等待乙個被標記為killed的session資源被釋放,需要等待很長時間。

如果此時被kill的程序,嘗試重新執行操作,那麼會馬上收到程序中斷的提示,process會主動退出,

此時oracle會立即啟動pmon程序來清除該session所使用的資源,這個過程被稱作一次異常中斷處理。*/

--1.確認pmon程序pid

select pid,spid from v$process p,v$bgprocess b where b.paddr=p.addr and name='pmon';

--2.wakeup

pmon

sql> conn / as sysdba

sql> oradebug wakeup --------另:

/*檢視並修改_pkt_pmon_interval(pmon啟動週期引數)這個**引數,加快清除標記為killed的session

查詢**引數命令如下:

--conn / as sysdba

select a.ksppinm name,b.ksppstvl value,a.ksppdesc description

from x$ksppi a,x$ksppcv b

where a.inst_id = userenv ('instance') --不用修改為例項名

and b.inst_id = userenv ('instance')

and a.indx = b.indx

and a.ksppinm = '_pkt_pmon_interval';

--查詢結果:

_pkt_pmon_interval 50 pmon process clean-up interval (cs) --cs表示百分之一秒

--修改命令:

alter system set "_pkt_pmon_interval"=5; --即時生效

_pkt_pmon_interval 5 pmon process clean-up interval (cs)

*/

解決產生oracle sql死鎖

1 查詢資料庫死鎖 可以檢視產生死鎖的使用者,死鎖狀態,狀態,產生死鎖的機器和應用程式 2 查詢產生死鎖的語句 select sql text from v sql where hash value in select sql hash value from v session where sid ...

mysql 查詢表死鎖 和結束死鎖的表步驟

1 查詢是否鎖表 show open tables where in use 0 2 查詢程序 show processlist 查詢到相對應的程序 然後 kill id 補充 檢視正在鎖的事務 select from information schema.innodb locks 檢視等待鎖的事務...

死鎖及死鎖的解決

如果一組程序中的每乙個程序都在等待僅由該組程序中的其它程序才能引發的事件,那麼該組程序是死鎖的,1 競爭不可搶占性資源。當系統把某資源分配給該程序後,就不能將它強行收回,只能在程序用完後自行釋放。2 競爭可消耗資源。當系統中供多個程序共享的資源如印表機,公用佇列等,其數目不足以滿足諸程序的需要時,會...