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