亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

怎樣快速查出 Oracle 數據庫中的鎖等待

2019-09-08 23:30:39
字體:
來源:轉載
供稿:網友

  在大型數據庫系統中,為了保證數據的一致性,在對數據庫中的數據進行操作時,系統會進行對數據相應的鎖定。

  這些鎖定中有"只讀鎖"、"排它鎖","共享排它鎖"等多種類型,而且每種類型又有"行級鎖"(一次鎖住一條記錄),"頁級鎖"(一次鎖住一頁,即數據庫中存儲記錄的最小可分配單元),"表級鎖"(鎖住整個表)。

  若為"行級排它鎖",則除被鎖住的該行外,該表中其它行均可被其它的用戶進行修改(Update)或刪除(delete)操作,若為"表級排它鎖",則所有其它用戶只能對該表進行查詢(select)操作,而無法對其中的任何記錄進行修改或刪除。當程序對所做的修改進行提交(commit)或回滾后(rollback)后,鎖住的資源便會得到釋放,從而允許其它用戶進行操作。

  但是,有時,由于程序中的原因,鎖住資源后長時間未對其工作進行提交;或是由于用戶的原因,如調出需要修改的數據后,未及時修改并提交,而是放置于一旁;或是由于客戶服務器方式中客戶端出現"死機",而服務器端卻并未檢測到,從而造成鎖定的資源未被及時釋放,影響到其它用戶的操作。

  因而,如何迅速地診斷出鎖住資源的用戶以及解決其鎖定便是數據庫管理員的一個挑戰。

  由于數據庫應用系統越來越復雜, 一旦出現由于鎖資源未及時釋放的情況,便會引起對一相同表進行操作的大量用戶無法進行操作,從而影響到系統的使用。此時,DBA應盡量快地解決問題。但是,由于在Oracle 8.0.x 中執行"獲取正在等待鎖資源的用戶名"的查詢語句

select a.username, a.sid, a.serial#, b.id1
from v$session a, v$lock b
where a.lockwait = b.kaddr

  十分緩慢,(在 Oracle 7.3.4中執行很快),而且,執行"查找阻塞其它用戶的用戶進程"的查詢語句

select a.username, a.sid, a.serial#, b.id1
from v$session a, v$lock b
where b.id1 in
(select distinct e.id1
from v$session d, v$lock e
where d.lockwait = e.kaddr)
and a.sid = b.sid
and b.request = 0

  執行得也十分緩慢。因而,往往只好通過將 v$session 中狀態為"inactive"(不活動)并且最后一次進行操作時間至當前已超過 20 分鐘以上(last_call_et>20*60 秒)的用戶進程清除,然后才使得問題得到解決。

  但是,這種方法實際上是"把嬰兒與臟水一起潑掉"。因為,有些用戶的進程盡管也為"inactive",并且也已有較長時間未活動,但是,那是由于他們處于鎖等待狀態。

  因而,我想出了一個解決辦法。即通過將問題發生時的 v$lock,v$session視圖中的相關記錄保存于自己建立的表中,再對該表進行查詢,則速度大大提高,可以迅速發現問題。經實際使用,效果非常好。在接到用戶反映后,幾秒鐘即可查出由于鎖住資源而影響其它用戶的進程,并進行相應的處理。

  首先,以 dba 身份(不一定為system)登錄入數據庫中,創建三個基本表:my_session,my_lock, my_sqltext,并在將會進行查詢的列上建立相應的索引。語句如下: rem 從 v$session 視圖中取出關心的字段,創建 my_session 表,并在查詢要用到的字段上創建索引,以加快查詢速度

drop table my_session;
create table my_session
as
select a.username, a.sid, a.serial#,
a.lockwait, a.machine,a.status,
a.last_call_et,a.sql_hash_value,a.program
from v$session a
where 1=2 ;

create unique index my_session_u1 on my_session(sid);
create index my_session_n2 on my_session(lockwait);
create index my_session_n3 on my_session(sql_hash_value);

  rem 從 v$lock 視圖中取出字段,創建 my_lock 表,并在查詢要用到的字段上創建索引,以加快查詢速度

drop table my_lock;
create table my_lock
as
select id1, kaddr, sid, request,type
from v$lock
where 1=2;

create index my_lock_n1 on my_lock(sid);
create index my_lock_n2 on my_lock(kaddr);

  rem 從 v$sqltext 視圖中取出字段,創建 my_sqltext 表,并在查詢要用到的字段上創建索引,以加快查詢速度

drop table my_sqltext;
create table my_sqltext
as
select hash_value , sql_text
from v$sqltext
where 1=2;

create index my_sqltext_n1 on my_sqltext ( hash_value);

  然后,創建一個 SQL 腳本文件,以便需要時可從 SQL*Plus 中直接調用。其中,首先用 truncate table 表名命令將表中的記錄刪除。之所以用 truncate 命令,而不是用delete 命令,是因為delete 命令執行時,將會產生重演記錄,速度較慢,而且索引所占的空間并未真正釋放,若反復做 insert及delete,則索引所占的空間會不斷增長,查詢速度也會變慢。而 truncate命令不產生重演記錄,速度執行較delete快,而且索引空間被相應地釋放出來。刪除記錄后,再將三個視圖中的相關記錄插入自己創建的三個表中。最后,對其進行查詢,由于有索引,同時由于在插入時條件過濾后,記錄數相對來說較少,因而查詢速度很快,馬上可以看到其結果。 

  此時,若發現該阻塞其它用戶進程的進程是正常操作中,則可通知該用戶對其進行提交,從而達到釋放鎖資源的目的;若為未正常操作,即,其狀態為"inactive",且其last_call_et已為較多長時間,則可執行以下語句將該進程進行清除,系統會自動對其進行回滾,從而釋放鎖住的資源。

alter system kill session 'sid, serial#';

  SQL 腳本如下:

set echo off
set feedback off
prompt '刪除舊記錄.....'
truncate table my_session;
truncate table my_lock;
truncate table my_sqltext;

prompt '獲取數據.....'
insert into my_session
select a.username, a.sid, a.serial#,
a.lockwait, a.machine,a.status,
a.last_call_et,a.sql_hash_value,a.program
from v$session a
where nvl(a.username,'NULL')< >'NULL;

insert into my_lock
select id1, kaddr, sid, request,type
from v$lock;

insert into my_sqltext
select hash_value , sql_text
from v$sqltext s, my_session m
where s.hash_value=m.sql_hash_value;

column username format a10
column machine format a15
column last_call_et format 99999 heading "Seconds"
column sid format 9999

prompt "正在等待別人的用戶"
select a.sid, a.serial#,
a.machine,a.last_call_et, a.username, b.id1
from my_session a, my_lock b
where a.lockwait = b.kaddr;

prompt "被等待的用戶"
select a.sid, a.serial#,
a. machine, a.last_call_et,a.username,
b. b.type,a.status,b.id1
from my_session a, my_lock b
where b.id1 in
(select distinct e.id1
from my_session d, my_lock e
where d.lockwait = e.kaddr)
and a.sid = b.sid
and b.request=0;

prompt "查出其 sql "
select a.username, a.sid, a.serial#,
b.id1, b.type, c.sql_text
from my_session a, my_lock b, my_sqltext c
where b.id1 in
(select distinct e.id1
from my_session d, my_lock e
where d.lockwait = e.kaddr)
and a.sid = b.sid
and b.request=0
and c.hash_value =a.sql_hash_value;

  以上思路也可用于其它大型數據庫系統如 Informix, Sybase,DB2中。通過使用該腳本,可以極大地提高獲取系統中當前鎖等待的情況,從而及時解決數據庫應用系統中的鎖等待問題。而且,由于實際上已取出其 program 名及相應的 sql 語句,故可以在事后將其記錄下來,交給其開發人員進行分析并從根本上得到解決。

數據庫 Oracle

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情奇米色| 亚洲日韩欧美视频一区| 丁香五六月婷婷久久激情| 欧美日韩一区二区三区在线免费观看| 欧美极品在线播放| 91在线播放国产| 5566日本婷婷色中文字幕97| 国产精品国产三级国产专播精品人| 欧美激情精品久久久久久免费印度| 日日狠狠久久偷偷四色综合免费| 俺去亚洲欧洲欧美日韩| 欧美老少做受xxxx高潮| 日本国产一区二区三区| 国产精品久久一区主播| 2019中文字幕全在线观看| 国产日韩中文字幕| 91免费在线视频| 亚洲午夜未删减在线观看| 欧美高清自拍一区| 欧美又大又硬又粗bbbbb| 亚洲人成亚洲人成在线观看| 亚洲午夜女主播在线直播| 久久久国产在线视频| 韩国美女主播一区| 亚洲综合色激情五月| 亚洲国产精久久久久久| 国色天香2019中文字幕在线观看| 亚洲国产美女久久久久| 国内精品在线一区| 欧美大胆a视频| 国产欧美日韩精品专区| 久久人人爽人人爽人人片亚洲| 久久久av网站| 超碰精品一区二区三区乱码| 久久久久久久香蕉网| 亚洲综合一区二区不卡| 国产亚洲综合久久| 国产精品一香蕉国产线看观看| 91中文精品字幕在线视频| 中文字幕视频一区二区在线有码| 欧美精品成人91久久久久久久| 国产香蕉一区二区三区在线视频| 成人网页在线免费观看| 在线日韩第一页| 国产精品jvid在线观看蜜臀| 日本一本a高清免费不卡| 欧美日本国产在线| 亚洲美女黄色片| 日韩黄色av网站| 精品国产一区二区三区久久| 日韩福利伦理影院免费| 国产精品夜间视频香蕉| 国产91精品久| 国产一区二区欧美日韩| 国产精品一区专区欧美日韩| 精品日本美女福利在线观看| 成人黄色中文字幕| 97免费视频在线播放| 欧美激情国产高清| 午夜欧美不卡精品aaaaa| 亚洲欧美中文日韩v在线观看| 国产一区二区三区欧美| 欧美俄罗斯性视频| 亚洲精品乱码久久久久久金桔影视| 日本精品久久中文字幕佐佐木| 欧美国产日韩中文字幕在线| 日韩国产欧美区| 美女撒尿一区二区三区| 在线成人激情黄色| 欧美精品情趣视频| 国产精品欧美激情在线播放| 亚洲一区中文字幕在线观看| 91久久久久久久久久久| 日韩av片免费在线观看| 欧美在线观看视频| 日韩电影免费观看在线观看| 18久久久久久| 福利一区视频在线观看| 国产精品永久免费在线| 国产成人一区二区三区小说| 青青草原一区二区| 久久精品国产99国产精品澳门| 日韩欧美有码在线| 中文字幕一精品亚洲无线一区| 久久久久久久久久久91| 欧美成人免费小视频| 久久香蕉频线观| 国产在线观看91精品一区| 成人国产在线激情| 亚洲国产精品一区二区三区| 中文字幕欧美精品在线| 在线电影欧美日韩一区二区私密| 国产欧美一区二区三区视频| 久久久爽爽爽美女图片| 96国产粉嫩美女| 成人欧美在线观看| 综合欧美国产视频二区| 91久久久久久久一区二区| 欧美xxxx18国产| 国产精品网站入口| 久久久最新网址| 精品久久久久久中文字幕| 亚洲综合中文字幕68页| 一个色综合导航| 久久91亚洲精品中文字幕| 国产在线拍揄自揄视频不卡99| 亚洲色图五月天| 欧美性xxxx极品hd满灌| 欧美性感美女h网站在线观看免费| 亚洲欧美国产精品专区久久| 亚洲最大福利视频| 北条麻妃一区二区在线观看| 欧美性猛交丰臀xxxxx网站| 国产亚洲精品91在线| 亚洲精品福利资源站| 欧美老女人bb| 亚洲www视频| 亚洲va码欧洲m码| 国产亚洲精品久久久久动| 成人欧美一区二区三区黑人孕妇| 日本精品一区二区三区在线| 色综合久久天天综线观看| 国产91精品久久久| 在线成人中文字幕| 欧美做受高潮1| 国产午夜精品全部视频在线播放| 57pao成人国产永久免费| 国产suv精品一区二区三区88区| 亚洲日韩中文字幕| 91视频88av| 久久久久久久爱| 色爱精品视频一区| 精品国产一区二区在线| 91在线观看免费高清完整版在线观看| 欧美影院成年免费版| 国产精品久久久久久久天堂| 精品中文字幕视频| 国产小视频国产精品| 操人视频在线观看欧美| 欧美高清一级大片| 亚洲大胆美女视频| 国产美女搞久久| 日本久久中文字幕| 亚洲欧美一区二区三区情侣bbw| 亚洲成成品网站| 国内精品久久久久久影视8| 亚洲精品美女在线观看| 中文字幕久热精品视频在线| 亚洲人高潮女人毛茸茸| 久久久精品电影| 91tv亚洲精品香蕉国产一区7ujn| 国产成人自拍视频在线观看| 中文字幕欧美日韩精品| 国产成人精品优优av| 国产99久久久欧美黑人| 欧美中文字幕视频| 国产精品视频色| 91在线视频精品| 国产日韩欧美一二三区| 国产ts一区二区| 国产精品海角社区在线观看| 欧美巨乳美女视频| 日韩国产欧美精品一区二区三区| 欧美精品videossex性护士|