问题:
给oracle数据库插入海量数据时,发现归档日志剩余空间不足,所以停止执行,但是等待了很长时间,锁仍然没有被释放;
解决:
(1)查看被锁的信息:
select * from v$locked_object;
通过字段查看到锁表者的操作信息
SESSION_ID :需要在v$session表中查看的 sid 值,我查到的值为478
ORACLE_USERNAME :锁表者使用的oracle账号
OS_USER_NAME:锁表这操作系统的用户名称
(2)通过上述信息锁定到部分锁表者,若仍然无法确定可以再查看:
select * from v$session t where sid = '478'
查看需要处理事务的几个字段:
sid ,SERIAL# :这两个字段是用来杀进程的字段。
PROGRAM :查看到使用者使用的工具
PREV_HASH_VALUE:通过这个字段在查看出哪个sql语句执行的锁表
扫描二维码关注公众号,回复:
12723368 查看本文章
3、查看到相关锁表语句:
select * from v$sql where hash_value =‘PREV_HASH_VALUE’
4、确定可以去掉的,不影响其他业务可以执行:
alter system kill session '478,13';
这里的这两个数字分别是sid ,SERIAL# 。
5、正常情况下到这一步就可以完成相关解锁的操作,如果提示无法操作可以查看:
select pro.spid from v$session ses,v$process pro where ses.sid=478 and ses.paddr=pro.addr;
这里sid就是上面1的 SESSION_ID 。
查出 spid 后再在linux中查看 相关进程的信息
ps -ef|grep spid
sid是上面的sid然后可以杀掉这个进程
KILL -9 'SPID'