增加異常處理
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 從鍵盤輸入 刪除 要求使用字元...