zoukankan      html  css  js  c++  java
  • oracle 锁表的处理。

    最近系统每天经常锁表,进程杀死后,很快再次锁住这个表。

    (一)先贴出现场处理死锁的步骤。

    另外:有时候通过PL/SQL执行kill session可能仍然无法解锁,此时需要登陆到Oracle服务器将进程kill掉才行。

    1、生成Kill Session语句

    select 'alter system kill session ''' || SID ||',' || SERIAL# || ''';' from

    (

    select distinct a.sid, a.Serial#, status, machine, LOCKWAIT, logon_time

      from v$session a, v$locked_object b

     where (a.status = 'ACTIVE' or a.status = 'INACTIVE')

       and a.sid = b.session_id

       and b.ORACLE_USERNAME='XYHISTEST'--加上用户名是避免把其他系统的会话也关闭,以免伤及无辜

    );

    或者

    /*
    select sess.sid,
    sess.serial#,
    lo.oracle_username,
    lo.os_user_name,
    ao.object_name,
    lo.locked_mode,
    sql.sql_text,
    'alter system kill session ''' || SID ||',' || SERIAL# || ''';'

    from v$locked_object lo,
    dba_objects ao,
    v$session sess,
    v$sql sql
    where ao.object_id = lo.object_id and lo.session_id = sess.sid and sql.ADDRESS(+)= sess.SQL_ADDRESS;

    -- 这个sql查询结果包含了sid, serial#,可以用来kill 被锁死的session。

    -- sql_text 字段可以知道导致死锁的sql。

    --最后一个字段是直接可以执行的杀死进程的sql语句。

    */

    2、批量执行第一步生成的语句

    alter system kill session 'sid,serial#';

    --alter system kill session '3656,755';

    3、查询oracle用户名,机器名,锁表对象

    SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,

    l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time

    FROM v$locked_object l, all_objects o, v$session s

    WHERE l.object_id = o.object_id

    AND l.session_id = s.sid

    ORDER BY sid, s.serial# ;

    /*或者

    select s.SID, s.OSUSER, p.spid as OSPID, s.MACHINE, s.TERMINAL, s.PROGRAM

      from v$session s, v$process p

     where s.sid = 5864--session_id

       and s.paddr = p.addr;

    */

    4、查询是执行何sql语句导致锁表的

    select b.sql_text

      from v$session a, v$sql b

     where a.sid =589 --session_id

       and a.SQL_ADDRESS = b.ADDRESS(+);

     /*--或者

    SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,

    l.os_user_name,s.machine, s.terminal,a.sql_text, a.action

    FROM v$sqlarea a,v$session s, v$locked_object l

    WHERE l.session_id = s.sid

    AND s.prev_sql_addr = a.address

    ORDER BY sid, s.serial#;

    */

  • 相关阅读:
    一个FLAG #03# 蛇形填数
    一个FLAG #02# 逆序输出
    一个FLAG #01# 重学C/C++以及算法
    MAVLink笔记 #01# 维基百科翻(译)
    编译原理 #04# 中缀表达式转化为四元式(JavaScript实现)
    Java开发:手机电话号码校验
    解决java poi循环遍历行getLastRowNum出现不准确的问题
    Redis的安装和简单测试
    JS解析xml字符串,并把xml展示在HTML页面上
    解决cxf+springmvc发布的webservice,缺少types,portType和message标签的问题
  • 原文地址:https://www.cnblogs.com/gaochsh/p/5435306.html
Copyright © 2011-2022 走看看