1、查询那些表被锁住了
10:16:41 sys@PORTALDB> select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id=a.object_id;
no rows selected
2、查处引起死锁的会话
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time;
这里会列出SID
或者用dba用户执行以下语句
select username,lockwait,status,machine,program from v$session where sid in (select session_id from v$locked_object);
3、 查出SID和SERIAL#:
查V$SESSION视图:
10:17:53 sys@PORTALDB> select sid,serial#,paddr from v$session where sid='1214';
SID SERIAL# PADDR
----- ---------- ----------------
1214 62237 070000177152E338
4、用dba用户执行以下语句,可以查看到被死锁的语句。
select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object));
5、查V$PROCESS视图:
SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';
这一步得到SPID
10:19:51 sys@PORTALDB> select spid from v$process where addr='070000177152E338';
SPID
------------------------
10420360
6、杀死进程
(1)在数据库中,杀掉ORACLE进程:
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2)如果在ORACLE中不能杀死进程,我们只能到操作系统中,使用操作系统命令杀死进程
KILL -9 “刚才查出的SPID”
在WINDOWS平台,可以是偶那个orakill。
Elapsed: 00:00:00.01