暂无图片
暂无图片
6
暂无图片
暂无图片
1
暂无图片

Library cache lock 案例分析

扫地僧的故事 2020-10-06
7212
距离上次分享已经一个月了,好多人来问我是不是要弃更了?(肯定不是啊!
Library cache lock的问题估计每个dba都遇到过好多吧?今天的这个案例很简单,主要是想总结下分析过程,温故而知新。(珍惜每一次Oracle故障处理的机会。。)
一个月前,研发急吼吼的跑过来,跟我说新部署的应用连不上测试环境的数据库,帮忙看下数据库现在是什么情况?
首先,我的第一个猜测是用户被锁了?用sysdba连上数据库,发现用户是open状态,一下就否定了我的猜测。监听状态也是正常,继续猜。难不成是我给的密码不对?用sqlplus XXX/XXX 测一下,会话直接夯住了,好像有点诡异,查看视图V$SESSION,看下当前数据库的连接数和等待事件等,果然有一大堆的library cache lock!作为一个有经验的DBA,把library cache lock和用户无法登录两者联系到一起,那多半是用户密码错误了。马上让研发修改配置文件中的密码,重启应用,问题解决。
虽然很快问题就解决了,但是反思一下,当时这种拍脑袋解决问题的方式真的不可取。所以,在测试环境模拟了一下故障,正儿八经地分析一下。。
当发现数据库中有大量的library cache lock等待事件后,先去查看它所对应的 P1,P2,P3的值。可以通过视图V$EVENT_NAME,知道每个等待事件的P1,P2,P3的具体含义。这里,p1: 'handle address',p2: 'lock address',p3: '100*mode+namespace'
1. 查看P1,P2,P3的值
    select to_char(p1,'xxxxxxxxxxxxx') p1raw,to_char(p2,'xxxxxxxxxxxxxxx') p2raw, to_char(p3,'xxxxxxxxxxxxxx') p3raw 
    from v$active_session_history where event='library cache lock';
      P1RAW         P2RAW     P3RAW
    -------------- ---------------- ---------------
      b4f2c3e0      b47952c8     4f0002
      b4f2c3e0      b47c5c68     4f0002
      b4f2c3e0      b460dcf8         4f0002
    复制

            2. 然后根据P3的值,查看具体的namespace

      16进制0x4f转换为10进制
      SQL> select to_number('4f','xx'from dual;
      TO_NUMBER('4F','XX')
      --------------------
       79
      查看 X$kglob,namespace=79 对应的是 ACCOUNT_STATUS
      SQL> select KGLHDNSP,KGLHDNSD from x$kglob where KGLHDNSP=79;
      KGLHDNSP  KGLHDNSD
      ---------- ----------------------------------------------------------------
       79        ACCOUNT_STATUS     
      复制
      从ACCOUNT_STATUS来看,这个等待事件应该与帐号密码验证有关。
      3. 验证猜测
      打开 1017 errorstack,观察日志。
        alter system set events '1017 trace name errorstack level 3';
        复制

        观察alert log

          Errors in file u01/app/oracle/diag/rdbms/gu/gu/trace/gu_ora_3737.trc:
          ORA-01017: invalid username/password; logon denied
          复制

          然后,从trace文件中看到客户端信息:

            client details:
            O/S info: user: root, term: pts/4, ospid: 3559
            machine: XXXX program: XXXXXXX (TNS V1-V3)
            application name: XXXXXX (TNS V1-V3), hash value=2077784982
            复制
            关闭 1017 errorstack 
              alter system set events '1017 trace name errorstack off';
              复制
              至此,一次比较完整的分析过程结束了。


              给自己定一个小目标,努力不要成为一个经验主义者~
              文章转载自扫地僧的故事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论

              11 0
              暂无图片
              2年前
              评论
              暂无图片 0
              👍
              2年前
              暂无图片 点赞
              评论