ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 数据库 >> Oracle >> oracle事务锁导致事务无法提交的问题

oracle事务锁导致事务无法提交的问题

来源:网络整理     时间:2016-04-08     关键词:ORACLE

本篇文章主要介绍了"oracle事务锁导致事务无法提交的问题",主要涉及到ORACLE方面的内容,对于Oracle感兴趣的同学可以参考一下: 今天在修改bug的过程中,一条更新数据的sql执行怎么也执行不了,进入貌似“排队”的情况,一直处于等待的状态,第一直觉是事务锁起到坏作用,后在项目组高手的协助下...

今天在修改bug的过程中,一条更新数据的sql执行怎么也执行不了,进入貌似“排队”的情况,一直处于等待的状态,第一直觉是事务锁起到坏作用,后在项目组高手的协助下找到了原因,是数据被锁住了。一般查询是否被锁住可以做如下操作:

以系统数据库管理员的身份登录

--无连接启动sqlplus
sqlplus /nolog;

--以sysdba的身份连接数据库
conn /as sysdba;

查看被锁的数据对象

--查询被锁的数据对象select t2.username, t2.sid, t2.serial#, t2.logon_time
  from v$locked_object t1, v$session t2
 where t1.session_id = t2.sid
 orderby t2.logon_time;

执行上述语句后,得到如下的结果:

oracle官网,oracle数据库,oracle 11g,oracle下载,oracle从入门到精通,oraclejrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播,oracle安装,拉里·埃里森,oracle to date

表明的确是有用户的数据对象(因为当前数据库实例中只有图中的用户处于活动状态)处于锁定状态,然后需要把该用户的进程kill掉即可。

停止被锁事务数据对象的进程

--同一个sid可能会被不同的session使用,所以通过sid和serial number可以唯一定位;--下面的sid,和serial#替换成上图中对应的值即可alter system kill session'sid,serial#';

其实,上面的截图只是一部分,总共有27个被锁的数据对象,如果一行一行进行kill,岂不累死宝宝啊,因此我使用存储过程来实现了:

declare
    cursor kill_lockedobj_crs is(
        select t2.sid,t2.serial# serial from v$locked_object
        t1,v$session t2 where t1.sessi
    );
    v_sql varchar2(500);
    v_session varchar2(30);
beginfor cont in kill_lockedobj_crs loop
        exit when kill_lockedobj_crs%notfound;
        v_obj := cont.sid ||','||cont.serial;
        v_sql := 'alter system kill session' || v_obj;
        execute immediate v_sql;
    end loop;
end;
/
commit;

望我的解决方法对大家有所帮助。如有错误,欢迎指正!

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering.fadeIn(1700); }); });

    以上就介绍了oracle事务锁导致事务无法提交的问题,包括了ORACLE方面的内容,希望对Oracle有兴趣的朋友有所帮助。

    本文网址链接:http://www.codes51.com/article/detail_602785.html

    相关图片

    相关文章