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

2022-08-03 07:36:08 字數 3947 閱讀 9199

最近閒來沒事,把之前寫的那個抓取鎖的儲存過程重新修改、優化了一下,呵呵

create or replace procedure solve_lock_061203_wanjie(v_msg out varchar2)

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

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

v_msg := '';

v_sql := '';

v_msg := v_msg ||

lpad(rpad('查詢資料庫中是否有鎖阻塞、鎖等待的情況', 60, '-'),

81,'-') || chr(10);

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'' ,''null'') lock_type,

decode(request,0, ''none'',1,''null'', 2, ''row share'' ,3, ''row exclusive'' ,4, ''share'' ,5, ''share row exclusive'' ,6 ,''exclusive'' ,''hull'') 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

--抓取發出請求鎖的會話

v_msg := v_msg || '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' || chr(10);

v_waiting_sid := records_lock.v_sid;

end if;

if records_lock.v_block <> 0 then

--抓取發生鎖阻塞的會話

v_msg := v_msg || 'blocking sid: ' || records_lock.v_sid ||

' is make a lock , lock_mode is ' || records_lock.v_lmode ||

chr(10);

v_blocking_sid := records_lock.v_sid;

end if;

end loop;

close cur_lock;

v_sql := '';

v_msg := v_msg ||

lpad(rpad('查詢產生鎖的會話、鎖等待的會話', 60, '-'), 81, '-') || chr(10);

v_sql := '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_sql;

loop

fetch cur_lock02

into records_lock02;

exit when cur_lock02%notfound;

if records_lock02.waiting_sid is not null then

v_msg := v_msg || 'waiting sid: ' || records_lock02.waiting_sid ||

' wait_sql is : ' || records_lock02.waiting_sql || chr(10);

end if;

if records_lock02.blocking_sid is not null then

v_msg := v_msg || 'blocking sid: ' || records_lock02.blocking_sid ||

' block_sql is : ' || records_lock02.blocking_sql || chr(10);

end if;

end loop;

close cur_lock02;

v_msg := v_msg || lpad(rpad('解決鎖阻塞、鎖等待', 60, '-'), 81, '-') || chr(10);

select sid, serial#

into kill_sid, kill_serial

from v$session

where sid = v_blocking_sid;

v_msg := v_msg || 'action: alter system kill session ''' || kill_sid || ',' ||

kill_serial || ''';' || chr(10);

exception

when others  then

v_msg := v_msg || sqlerrm;

end solve_lock_061203_wanjie;

第七次作業

磁碟管理和維護 磁碟檔名 dev sd a p 1 128 dev hd a p 1 128 dev vd a p 1 128 heads 磁面 sectors track 扇區 cylinders磁柱 分割槽命令 fdisk dev sd 格式化 mkfs.ext4 dev sda mkfs.xf...

第七次試驗

include include include include include include using namespace std define maxsize 100 typedef char elemtype typedef struct sqqueue void initqueue sqq...

第七次作業

共有一下六步 1.客戶機提出網域名稱解析請求,並將該請求傳送給本地的網域名稱伺服器。2.當本地的網域名稱伺服器收到請求後,就先查詢本地的快取,如果有該紀錄項,則本地的網域名稱伺服器就直接把查詢的結果返回。3.如果本地的快取中沒有該紀錄,則本地網域名稱伺服器就直接把請求發給根網域名稱伺服器,然後根網域...