在Oracle中查看死锁通常涉及查询数据字典视图和动态性能视图。以下是一个基本的查询示例,用于检测和显示最近的死锁:
- SELECT
- dd.inst_id,
- dd.name,
- o.object_id,
- o.object_type,
- s.sid,
- s.serial#,
- s.username,
- p.spid,
- s.program,
- d.xidusn,
- d.xidslot,
- d.xidsqn,
- d.blocking_session
- FROM
- gv$lock d
- JOIN
- gv$session s ON d.sid = s.sid
- LEFT JOIN
- gv$process p ON p.addr = s.paddr
- JOIN
- gv$instance dd ON s.inst_id = dd.inst_id
- WHERE
- d.blocking_session = 'YES'
- ORDER BY
- dd.inst_id,
- o.object_type,
- o.object_name;
这个查询会返回当前实例中所有当前锁定的对象的信息,包括锁定对象的数据库对象名、对象ID、对象类型,以及锁定该对象的会话信息,如会话ID、会话序列号、用户名和进程ID。
如果你需要查看死锁的详细信息,可以使用以下查询:
- SELECT
- dd.inst_id,
- dd.name,
- o.object_id,
- o.object_type,
- s.sid,
- s.serial#,
- s.username,
- p.spid,
- s.program,
- d.xidusn,
- d.xidslot,
- d.xidsqn,
- d.blocking_session
- FROM
- gv$lock d
- JOIN
- gv$session s ON d.sid = s.sid
- LEFT JOIN
- gv$process p ON p.addr = s.paddr
- JOIN
- gv$instance dd ON s.inst_id = dd.inst_id
- WHERE
- d.blocking_session = 'YES'
- ORDER BY
- dd.inst_id,
- o.object_type,
- o.object_name;
这个查询会返回所有当前正在阻塞其他会话的会话的信息,包括事务ID和阻塞另外哪个会话。
请注意,这些查询可能需要DBA权限才能执行。如果你没有相应的权限,你可能需要联系你的数据库管理员来获取这些信息。