1 场景
想更新一条语句时,弹出了报错:
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效,此时,就可以看看,是哪位小伙伴把你要更新的表锁住了。
2 示例
2.1 锁表场景
-- 锁表的场景,如:
select * from scott.dept for update;
select * from scott.emp for update;
select * from scott.salgrade s where s.grade = 1 for update;
2.2 查询锁表情况
SELECT sess.sid,
sess.serial#,
ao.owner AS 属主,
ao.object_id AS 对象id,
ao.object_name AS 对象名,
ao.object_type AS 对象类型,
ao.last_ddl_time AS 最后一次ddl变更日期,
ao.status AS 状态,
lo.os_user_name AS 电脑域账户,
lo.oracle_username AS 登录用户,
lo.locked_mode AS 锁模式, -- 3:Row Exclusive Table Lock
sess.status AS 状态,
sess.logon_time AS 最后一次登录日期,
sess.machine AS 机器名,
sess.terminal AS 终端名,
sess.program AS 程序名,
sess.port AS 端口号
FROM v$locked_object lo, -- object_id
dba_objects ao, -- owner, object_name
v$session sess -- sid
WHERE ao.object_id = lo.object_id
AND sess.sid = lo.session_id
ORDER BY sess.logon_time DESC;
2.3 kill 会话
-- 其中 sid 和 serial# 来源上述查询
ALTER system kill session 'sid, serial#';
-- 如:sid = 159,serial# = 22643
ALTER system kill session '159, 22643';
本文介绍在Oracle数据库中遇到的锁表场景及如何处理。当更新语句因资源繁忙而失败时,可使用特定查询找出锁住表的会话,并通过kill命令终止该会话。文中提供详细SQL脚本及Oracle官方文档链接。
&spm=1001.2101.3001.5002&articleId=97642276&d=1&t=3&u=8684284e53dd4cd5b6181303dd2defa9)
4万+

被折叠的 条评论
为什么被折叠?



