查找被锁定的表,并杀死进程

本文提供了一个实用的Oracle SQL脚本,用于查找被锁定的表及其锁定信息,并提供了杀死相关会话的命令。通过此脚本可以有效解决因表锁定导致的数据库操作阻塞问题。
 

 查找被锁定的表,并杀死进程:

set serverout on size 100000;
declare
cursor crs_sql is 
select distinct 
         
'alter system kill session ' || chr(39|| s.SID || ',' || s.SERIAL# ||chr(39) kill_session,
         decode(t.type,
                
'MR''Media Recovery',
                
'RT','Redo Thread',
                
'UN','User Name',
                
'TX''Transaction',
                
'TM''DML',
                
'UL''PL/SQL User Lock',
                
'DX''Distributed Xaction',
                
'CF''Control File',
                
'IS''Instance State',
                
'FS''File Set',
                
'IR''Instance Recovery',
                
'ST''Disk Space Transaction',
                
'TS''Temp Segment',
                
'IV''Library Cache Invalida-tion',
                
'LS''Log Start or Switch',
                
'RW''Row Wait',
                
'SQ''Sequence Number',
                
'TE''Extend Table',
                
'TT''Temp Table',
                      
'Unknown') LockType,
         decode(t.lmode,   
0'None',
                        
1'Null',
                        
2'Row-S',
                        
3'Row-X',
                        
4'Share',
                        
5'S/Row-X',
                        
6'Exclusive',        
                           
'Unknown') LockMode,
         
rtrim(a.object_type) || ' ' || rtrim(a.owner) || '.' || a.object_name object_name,
         decode(t.request, 
0'None',
                          
1'Null',
                          
2'Row-S',
                          
3'Row-X',
                          
4'Share',
                          
5'S/Row-X',
                          
6'Exclusive'
                             
'Unknown') RequestMode,
          s.MACHINE, s.MODULE
  
from   v$lock t, all_objects a, v$session s
  
where  t.sid > 6
  
and    t.id1 = a.object_id
  
and    t.SID = s.sid;
  
  tmp_tab crs_sql
%rowtype;
  
begin  
  
open crs_sql;  

  
begin  
    loop      
      dbms_output.put_line(
'*********************************************************');  
      dbms_output.new_line();
      
fetch crs_sql into tmp_tab;
      
exit when crs_sql%notfound;  
        dbms_output.put_line(
'   LOCK_TYPE : ' || tmp_tab.LockType);
        dbms_output.put_line(
'   LOCK_MODE : ' || tmp_tab.LockMode);
        dbms_output.put_line(
'  TABLE_NAME : ' || tmp_tab.object_name);
        dbms_output.put_line(
'REQUEST_MODE : ' || tmp_tab.RequestMode);
        dbms_output.put_line(
'MACHINE_NAME : ' || tmp_tab.MACHINE);
        dbms_output.put_line(
' MODULE_NAME : ' || tmp_tab.MODULE);
        dbms_output.put_line(
'KILL_SESSION : ' || tmp_tab.kill_session);
        
execute immediate tmp_tab.kill_session;    
        dbms_output.new_line();
        dbms_output.put_line(
'KILL SESSION SUCCESSFULLY !');  
     
end loop;
     
     
if crs_sql%notfound then       
       dbms_output.put_line(
'NO SESSION LOCKED !'); 
     
end if;
     
close crs_sql;    
     
     dbms_output.new_line();
     dbms_output.put_line(
'*********************************************************');
     dbms_output.new_line();        
  exception 
     
when others then
          dbms_output.put_line(
'EXCEPTION !');
          dbms_output.put_line(
'EXCEPTION INFO :' || sqlerrm);
  
end;
end;
/

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值