• lock检查


    ---desc:oracle检查某个表对象上的lock

    SELECT username,
    schemaname,
    se.MACHINE,
    se.MODULE,
    'ALTER SYSTEM KILL SESSION ' || '''' || se.sid || ',' || se.serial# || ',' || '@' ||
    se.inst_id || '''' || ' immediate;' kill_stat
    FROM GV$SESSION se, GV$LOCK lk, DBA_OBJECTS obj
    where se.INST_ID = lk.INST_ID
    and se.SID = lk.SID
    and lk.ID1 = obj.OBJECT_ID
    and OBJECT_NAME = trim(upper('&object_name'));

    ---desc:出现tx锁时,在gv$sessoin_blocker能查不到数据的时候。可以用下列语句检查阻塞session

    SELECT se.username,
    schemaname,se.MACHINE,se.MODULE,
    'ALTER SYSTEM KILL SESSION ' || '''' || se.sid || ',' || se.serial# || ',' || '@' ||
    se.inst_id || '''' || ' immediate;' kill_stat,'kill -9 '||p.SPID,p.pid,p.PROGRAM
    FROM GV$SESSION se,gv$lock lk,gv$process p
    where se.INST_ID=lk.INST_ID
    and se.PADDR=p.ADDR
    and se.SID=lk.sid
    and lk.BLOCK=1;

    =======================>如何解决 library cache pin 等待《=========================
    1.查找哪个对象希望被pin
    SELECT kglnaown "Owner", kglnaobj "Object"
    FROM x$kglob
    WHERE kglhdadr='&P1RAW'
    2.查找造成阻塞的会话和被阻塞的会话
    SELECT s.sid, kglpnmod "Mode", kglpnreq "Req"
    FROM x$kglpn p, v$session s
    WHERE p.kglpnuse=s.saddr
    AND kglpnhdl='&P1RAW'
    AND kglpnreq=0
    kglpnreq=0:表示正在持有该对象的会话,造成阻塞的会话
    kglpnreq>0:表示求而不得,就是被阻塞的会话
    mode 3:排他 mode 2:共享
    找出阻塞的会话
    An X request (3) will be blocked by any pins held S mode (2) on the object.
    An S request (2) will be blocked by any X mode (3) pin held, or may queue behind some other X request.
    --找出阻塞会话并生产kill语句
    SELECT 'ALTER SYSTEM KILL SESSION ' || '''' || se.sid || ',' || se.serial# || ',' || '@' ||
    se.inst_id || '''' || ' immediate;' kill_stat, kglpnmod "Mode", kglpnreq "Req"
    FROM x$kglpn p, gv$session se
    WHERE p.kglpnuse=se.saddr
    and p.INST_ID=se.inst_id
    and p.KGLPNSID=se.sid
    AND kglpnhdl='&P1RAW'
    AND kglpnreq=0; --kglpnreq=0:表示正在持有该对象的会话,造成阻塞的会话
    =======================>如何解决 library cache pin 等待《=========================


    =======================>如何解决 library cache lock 等待《=========================
    KGLLKREQ=0:表示正在持有该对象的会话,造成阻塞的会话
    KGLLKREQ>0:表示求而不得,就是被阻塞的会话
    mode 3:排他 mode 2:共享 1:null易碎解析锁
    1.找出造成阻塞的会话
    PROMPT Blocker Sesssion and Object info

    SELECT 'ALTER SYSTEM KILL SESSION ' || '''' || se.sid || ',' || se.serial# || ',' || '@' ||
    se.inst_id || '''' || ' immediate;' kill_stat, KGLLKMOD "Mode", KGLLKREQ "Req",KGLLKCNT,KGLNAOBJ,se.sql_id,lk.username
    FROM x$kgllk lk, gv$session se
    WHERE lk.kgllkses=se.saddr
    and lk.INST_ID=se.inst_id
    and lk.KGLLKSNM=se.sid
    AND KGLLKHDL='&P1RAW'
    AND KGLLKREQ=0 -- kglpnreq=0:表示正在持有该对象的会话,造成阻塞的会话


    2.找出被阻塞的会话
    PROMPT Waiter Sesssion and Object info

    SELECT 'ALTER SYSTEM KILL SESSION ' || '''' || se.sid || ',' || se.serial# || ',' || '@' ||
    se.inst_id || '''' || ' immediate;' kill_stat, KGLLKMOD "Mode", KGLLKREQ "Req",KGLLKCNT,KGLNAOBJ,se.sql_id
    FROM x$kgllk lk, gv$session se
    WHERE lk.kgllkses=se.saddr
    and lk.INST_ID=se.inst_id
    and lk.KGLLKSNM=se.sid
    AND KGLLKHDL='&P1RAW'
    AND KGLLKREQ>0 ;-- kglpnreq>0:表示求而不得,就是被阻塞的会话
    =======================>如何解决 library cache lock 等待《=========================

  • 相关阅读:
    java环境变量的配置
    usb转串口驱动时会出现“文件的哈希值不在指定的目录”这样的提示
    虚拟机安装tools for Ubuntu
    ubuntu 修改root密码
    旺旺自动回复
    android 启动流程
    ASCII 码表
    电脑中快速查找东西
    appengine 云计算。 部署web网络。
    openssl-0.9.8k_WIN32(RSA密钥生成工具
  • 原文地址:https://www.cnblogs.com/erwadba/p/8041144.html
Copyright © 2020-2023  润新知