您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關oracle 11g自動殺鎖腳本怎么編寫,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
最近臨近春節,客戶的一套11gRAC下午經常會出現鎖,開發人員都回家了無法修改邏輯。為了避免過年期間因為這個每天都播vpn處理,所以趕忙寫了一個自動殺鎖的腳本。
這個腳本有幾點需要注意的:
1.針對于linux系統
2.oracle 11g單實例和RAC都可以
3.考慮到了active的鎖不能殺
4.有的鎖的鎖源會是一些系統進程,擔心殺掉以后庫會直接宕掉,腳本也考慮到了這一點。
5.客戶這臺服務器上有兩套RAC,為了安全起見,sqlplus前我都export了一下環境變量。
可以把這這個腳本發給值班室的兄弟們,出現了鎖跑一下,也可以寫到crontab里面。
#!/bin/bash
#get lock infomation
export ORACLE_SID=ogg1
sqlplus -s "/as sysdba" <<eof
spool /home/oracle/killholder_tmp.sql
select 'alter system kill session ''' || s.SID || ',' || s.SERIAL# || ',@' ||
s.INST_ID || ''' immediate;' killsql
from gv\$lock l, gv\$session s
where (id1, id2, l.type) in
(select id1, id2, type from gv\$lock where request > 0)
and l.sid = s.sid
and l.inst_id = s.inst_id
and s.status='INACTIVE'
and s.type='USER'
and decode(request, 0, 'Holder:', ' Waiter:') = 'Holder:'
order by id1, ctime desc, request;
spool off
exit
eof
#kill the lock holder
more /home/oracle/killholder_tmp.sql |grep '^a' > /home/oracle/killholder.sql
export ORACLE_SID=ogg1
sqlplus -s "/as sysdba" <<eof
@/home/oracle/killholder.sql
exit
eof
#check lock again
export ORACLE_SID=ogg1
sqlplus -s "/as sysdba" <<eof
spool /home/oracle/event.txt
select inst_id, event#, event,count(*) from gv\$session
where wait_class# <> 6
group by inst_id, event#,event
order by 1,4 desc;
spool off
exit
eof
TXLOCKNUM=$(more /home/oracle/event.txt|grep 'TX'|wc -l)
TMLOCKNUM=$(more /home/oracle/event.txt|grep 'TM'|wc -l)
if [ $TXLOCKNUM -eq 0 ] && [ $TMLOCKNUM -eq 0 ]
then
echo "there is no lock!"
else
echo "there is still having lock! "
fi
看完上述內容,你們對oracle 11g自動殺鎖腳本怎么編寫有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。