抓取鎖的sql語句 第六次修改

2022-08-03 07:57:10 字數 3614 閱讀 2807

增加異常處理

create or replace procedure solve_lock

asv_sql varchar2(3000); --定義 v_sql 接受抓取鎖的sql語句

v_sql02 varchar2(3000);

kill_sid number;

kill_serial number;

cur_lock sys_refcursor; --定義游標變數,迴圈執行抓取鎖的sql語句

cur_lock02 sys_refcursor;

type tp_lock is record( --定義 record型別的 變數

v_sid number,

v_type varchar2(10),

v_id1 number,

v_id2 number,

v_lmode varchar2(200),

v_request varchar2(200),

v_lock_time number,

v_block number );

records_lock tp_lock;

type tp_lock02 is record(

waiting_sid number,

waiting_sql varchar2(1000),

blocker_event varchar2(1000),

blocking_sid number,

blocking_sql varchar2(1000));

records_lock02 tp_lock02;

v_blocking_sid number;

v_waiting_sid number;

begin

dbms_output.put_line('------------------查詢資料庫中是否有鎖阻塞、鎖等待的情況------------------');

v_sql:='select sid,type,id1,id2,

decode(lmode,0, ''none'',1,''null'', 2, ''row share'' ,3, ''row exclusive'' ,4, ''share'' ,5, ''share row exclusive'' ,6 ,''exclusive'' ,''haha'') lock_type,

decode(request,0, ''none'',1,''null'', 2, ''row share'' ,3, ''row exclusive'' ,4, ''share'' ,5, ''share row exclusive'' ,6 ,''exclusive'' ,''haha'') lock_request,

ctime,block from v$lock where type in (''tm'',''tx'')' ;

open cur_lock for v_sql;

loop

fetch cur_lock into records_lock;

exit when cur_lock%notfound;

if records_lock.v_request <> 'none' then --抓取發出請求鎖的會話

dbms_output.put_line('waiting sid: '||records_lock.v_sid||' is request a lock ,lock_mode is '||records_lock.v_request||' and being locked '|| records_lock.v_lock_time||'s');

v_waiting_sid:=records_lock.v_sid;

end if;

if records_lock.v_block <> 0 then --抓取發生鎖阻塞的會話

dbms_output.put_line('blocking sid: '||records_lock.v_sid||' is make a lock , lock_mode is '||records_lock.v_lmode);

v_blocking_sid:=records_lock.v_sid;

end if;

end loop;

close cur_lock;  

dbms_output.put_line('------------------查詢產生鎖的會話、鎖等待的會話------------------------');

v_sql02:='select distinct waiter.sid "waiting_sid",w_sql.sql_text "sql from waiting session",blocker.event "blocker event",blocker.sid "blocking sid",

b_sql.sql_text "sql from blocking session"  from v$session waiter, v$session blocker,v$sql w_sql,v$sql b_sql

where waiter.event=''enq: tx - row lock contention'' and waiter.blocking_session=blocker.sid

and w_sql.sql_id=waiter.sql_id

and b_sql.sql_id =nvl(blocker.sql_id,blocker.prev_sql_id)';  

open cur_lock02 for v_sql02;

loop  

fetch cur_lock02 into records_lock02;

exit when cur_lock02%notfound;

if records_lock02.waiting_sid is not null then

dbms_output.put_line('waiting sid: '||records_lock02.waiting_sid||' wait_sql is : '||records_lock02.waiting_sql);

end if;

if records_lock02.blocking_sid is not null then

dbms_output.put_line('blocking sid: '||records_lock02.blocking_sid||' block_sql is : '||records_lock02.blocking_sql);

end if;

end loop;

close cur_lock02;

dbms_output.put_line('------------------解決 鎖阻塞、鎖等待------------------');

select   sid,serial# into kill_sid,kill_serial from v$session where sid=v_blocking_sid ;

dbms_output.put_line('action: alter system kill session ( '||kill_sid||','||kill_serial||')');

exception when no_data_found then

dbms_output.put_line(sqlcode||sqlerrm);

end solve_lock;

第六次作業

姓名 陳裕坤 學號 120705213 班級 12電信2班 作業1 總結,到目前為止,c語言基礎知識已介紹完,下一階段重點是指標。請從以下幾個方面小結 1.程式設計重在實踐,多程式設計才會對其理解更深,我是如何學習c語言的?2.程式設計涉及到方方面面知識,就像英語單詞一樣,一開始不可能了解每個c元素...

第六次作業

一 問題及 檔名稱 2.cpp 作 者 劉澤 完成日期 2017年5月18日 版 本 號 v1.0 對任務的求解方法及描述部分 輸入描述 問題描述 定義乙個不重複的有初值的10個元素的整數陣列a,利用冒泡法對陣列a排序 1 刪除x 2 插入x 程式輸出 問題分析 用迴圈結構進行編寫 演算法設計 in...

第六次實驗

一.問題給 檔名稱 第6次上機實驗 作 者 梁一意 完成日期 2017 年 5 月 5 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 輸入的s為 we are the world 輸入的字元c為 w 問題描述 從字串s 從鍵盤輸入 中刪除所有的字元c 從鍵盤輸入 刪除 要求使用字元...