在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权限才能执行。如果你没有相应的权限,你可能需要联系你的数据库管理员来获取这些信息。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部