您现在的位置是:首页 >其他 >oracle执行grant授权sql被阻塞问题处理网站首页其他

oracle执行grant授权sql被阻塞问题处理

雅冰石 2025-12-22 00:01:02
简介oracle执行grant授权sql被阻塞问题处理

一 问题描述

执行普通的grant授权sql(grant select,update on 表名 to 用户名)好几分钟都没反应,跟被阻塞了似的。

二 问题排查

#排查是否有阻塞

用OEM可以看到阻塞信息:

点‘性能’-‘阻塞会话’:

下面那个会话2958是我执行grant sql的会话。

/*

在执行grant前,先查询下当前会话的sid:

select userenv('sid') from dual;

2958

*/

所以猜测是上面那个实例的那个会话id为6730的会话阻塞了下面那个2958的会话。

三 解决办法-终止阻塞源端会话

点击阻塞源会话的sql_id,可以看到该sql的文本,跟开发同事确认下能否kill,可以kill的话,将其kill。

选中该会话,点击上面的‘终止会话’的按钮进行kill。

有时发现终止该会话不管用,还能看到这种阻塞。手动用alter system kill session也不管用。

这时可以用kill -9 进程号的方式在操作系统层面进行kill。

#生成kill sql

select a.inst_id,a.sid,a.serial#,b.spid, 'kill -9 '||b.spid

from gv$session a

inner join gv$process b on a.paddr = b.addr

where sid=6730 

and a.sql_id in('9wr2bqm4j3q37')

and a.inst_id=2

#执行上面的kill -9 命令即可

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。