zoukankan      html  css  js  c++  java
  • 关于oracle的锁表解决session marked for kill

    oracle 使用的过程中,有时候会遇到锁表的情况,数据库增、删、改、查都是会锁表的,但是锁的类型会不同,

    大多是行锁,部分会是表锁。

    在oracle运行中,一直是有表在锁的,只不过很快一个操作结束,锁就释放了。

    但是,总是有操作很慢的时候。

    如:一张纪录用户实时数据的大表(1000W数据),为了查询快,加了好几个索引,导致,更新表很慢,一直锁表。

    死锁的时候,数据库会一直打trace文件,文件的会比较大(100+M),

    如果硬盘空间不足,会导致数据库进程沾满,无法正常使用。并且,死锁是很占用系统资源的。 

    这种时候,我们就需要将锁表的操作杀掉,以防影响数据库正常运行。

    首先,需要查询出什么操作在锁表:

    select object_name,machine,s.sid,s.serial#
        from v$locked_object l,dba_objects o ,v$session s
        where l.object_id = o.object_id and l.session_id=s.sid;

    然后我们就可以得到锁表的session id 和 serialid

    使用如下命令可以杀掉session:

      

    alter system kill session '222,333'; (其中222,333分别是上面查询出的sid,serial#)

    这样是可以解决死锁的问题的,但是见效比较慢,因为这种做法,其实不会马上杀掉session,是把session标记为"kill"状态,一定时间后再清楚(2小时?)

    还有一种见效特别快的操作:

      查询session 的process id:

    select s.sid,p.spid, osuser, s.program
         from v$session s,v$process p
         where s.paddr=p.addr and s.sid = 222

    spid 即为session的系统线程。

    在unix、linux上,使用root用户,kill线程:  

    kill -9 5555  # 5555即为上面查询出的spid

    在windos 上使用:  

    orakill orcl
    5555  # 5555即为上面查询出的spid

    搞定。

  • 相关阅读:
    H5定位终极解决方案
    软帝学院教你使用cookie法,查看最近看过的书
    你真的会用Gson吗?Gson使用指南(一)
    Java程序员应当知道的10个面向对象设计原则
    java获取当前月第一天和最后一天,上个月第一天和最后一天
    正则基础教程一些冷门的知识
    爆笑的程序员梗,笑死人不偿命!
    java字符串操作扩充:灵活截取字符串
    如何分析及处理 Flink 反压?
    与君初相识,犹如故人归
  • 原文地址:https://www.cnblogs.com/Springmoon-venn/p/8400491.html
Copyright © 2011-2022 走看看