如何查看死锁时在执行的SQL语句

来源:互联网 发布:在线网络信托公司 编辑:程序博客网 时间:2024/05/21 22:58

脚本一,查出锁的关系,谁把谁锁主了

set serveroutput on
declare
mes varchar2(2000);
tmp_id1 number(22);
tmp_id2 number(22);
lk_sid    number(22);
tmp_mac varchar2(64);
fl boolean;
begin
fl:=false;
for c1 in (select sid,serial#,machine,lockwait
                  from v$session
                  where lockwait is not null) loop
  fl:=true;
  mes:='sid:'||to_char(c1.sid)||','||c1.machine||'is be locked by sid ';
  select id1,id2 into tmp_id1,tmp_id2
    from v$lock where sid=c1.sid and kaddr=c1.lockwait;
  for c2 in (select sid    lk_sid   from  v$lock where sid!=c1.sid and id1=tmp_id1 and  id2=tmp_id2 and block='1') loop
   select machine into tmp_mac from v$session where sid=c2.lk_sid;
   dbms_output.put_line(mes||to_char(c2.lk_sid)||' '||tmp_mac);
  end loop;
end loop;
if not fl then
    dbms_output.put_line('目前系统中没有互锁现象');
end if;
end;
/

第二,相应的sid最近执行的sql

set verify off
column a.username format a10
column c.sql_text format a64
accept sid prompt 'Please enter the sid '
select a.username, c.sql_text
from v$session a, v$sqltext c
where a.sid=&sid and
      c.hash_value = a.sql_hash_value and
      c.address = a.sql_address
order by c.PIECE
/

首先查看alert.log文件,查询ora-60错误,其中指明了详细日志文件的路径。
alert.log在background_dump_dest参数指定的目录下
deadlock日志文件在user_dump_dest参数指定的目录下


select username,default_tablespace from user_users;
select * from user_role_privs;
select * from user_sys_privs;
select * from user_tab_privs;
select * from user_tables;
select object_name,object_id from user_objects
                where instr(object_name,'LOG')>0;
select object_name,created from user_objects where object_name=upper

('&table_name');
select * from user_sequences;
select view_name from user_views;
select member from v$logfile;
Select version FROM Product_component_version
    Where SUBSTR(PRODUCT,1,6)='Oracle';
用系统管理员,查看当前数据库有几个用户连接:

SQL> select username,sid,serial# from v$session;

如果要停某个连接用

SQL> alter system kill session 'sid,serial#';

如果这命令不行,找它UNIX的进程数

SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21

and ses.paddr=pro.addr;

说明:21是某个连接的sid数

然后用 kill 命令杀此进程号。


select column_name,comments from dict_columns where

table_name='USER_INDEXES';

select column_name,comments from dict_columns where upper(table_name)

='v$session';
如何查看最大会话数?
SELECT * FROM V$PARAMETER WHERE NAME LIKE 'proc%';
Select * from v$license;
SELECT *  FROM  USER_ERRORS;
SELECT * FROM V$INSTANCE;
select a.sid,spid,status,substr(a.program,1,40)

prog,a.terminal,osuser,value/60/100 value
     from v$session a,v$process b,v$sesstat c
     where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr order by

value desc;

select * from v$sqltext where address = 'C0000001E0B4A160';
select sql_text, piece, hash_value
from v$sqltext
where  address = 'C0000001E0B4A160'
order by hash_value, piece;

select * from v$sqlarea where address = (select sql_address from

v$session where sid = :1);

原创粉丝点击