Oralce pl/sql因程序异常退出等原因导致事务未提交造成的锁表后如何解锁

在使用pl/sql操作ORACLE数据库时,或者运行第三方程序操作ORACLE数据异常退出时,常常因为一些不可控的退出等原因,导致数据库表被锁而无法操作。此时如果还可以提交事务,则可以使用commit命令将事务提交,而绝大部分情况下,事务都无法手动提交,这就需要对锁进行解锁。

可以使用下列SQL语句进行操作:

1、查询被锁的表

select b.owner,b.object_name,a.session_id,a.locked_mode 
from v$locked_object a,dba_objects b
where b.object_id = a.object_id;

2、查询被锁的session和serial#

select b.username,b.sid,b.serial#,logon_time
from v$locked_object a,v$session b
where a.session_id = b.sid order by b.logon_time;

3、杀掉SESSION进行解锁(使用第二步得到的session和serial#)

alter system kill session '9851,6854';

当然,如果因为权限问题,导致上述语句报错,可执行如下语句赋权

grant alter system to [你的数据库名];

 

【版权说明:仅允许非商业转载且请注明出处:Mac私塾 网址:http://macsishu.com】

发表评论

电子邮件地址不会被公开。