搜狐媒体平台-搜狐网站>IT

他一出家就成中国最帅和尚

眼眸深邃、轮廓分明、身材颀长,活生生的一幅画。

大学副教授与在押服刑女结婚

这在监狱民警看来,那么令人不可思议。

DBA必备技能:通过truss跟踪解决监听无法启动案例

Oraclemp 58 阅读(0) 评论()
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。举报

  作者简介:刘斌,云和恩墨高级技术专家,擅长数据库故障诊断分析,数据库性能优化,自动化运维开发,坚持学习、写作、分享,

  在Oracle DBA的日常工作中,通过各种跟踪手段,从数据库内外部发现问题,最终找到解决方案,是必备的重要技能。

  

  以下这则案例,就是通过OS系统级别的跟踪,快速定位并解决问题的一个例证。在Oracle数据库的跟踪时,OS上Truss是非常重要的工具。

  登录数据库主机发现一个节点监听异常:

  

  尝试手工启动,一样报错:

  grid@xxxxdbb:/home/grid $lsnrctl statuss

  LSNRCTL for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production on 04-MAR-2016 01:23:34

  Copyright (c) 1991, 2013, Oracle. All rights reserved.

  Connecting to (DEION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))

  TNS-12541: TNS:no listener

  TNS-12560: TNS:protocol adapter error

  TNS-00511: No listener

  IBM/AIX RISC System/6000 Error: 79: Connection refused

  第一怀疑就是hosts文件被改了,查看host没发现修改过。从上面看出是使用ipc方式启动,尝试truss看看能不能有信息。

  在Linux上调用truss跟踪一个操作非常简单,以下跟踪了lsnrctl start操作的过程:

  truss lsnrctl start

  execve("/usr/bin/lsnrctl", 0x2FF22BF8, 0x200138A8) Err#2 ENOENT

  execve("/etc/lsnrctl", 0x2FF22BF8, 0x200138A8) Err#2 ENOENT

  execve("/usr/sbin/lsnrctl", 0x2FF22BF8, 0x200138A8) Err#2 ENOENT

  execve("/usr/ucb/lsnrctl", 0x2FF22BF8, 0x200138A8) Err#2 ENOENT

  execve("/home/grid/bin/lsnrctl", 0x2FF22BF8, 0x200138A8) Err#2 ENOENT

  execve("/usr/bin/X11/lsnrctl", 0x2FF22BF8, 0x200138A8) Err#2 ENOENT

  execve("/sbin/lsnrctl", 0x2FF22BF8, 0x200138A8) Err#2 ENOENT

  execve("./lsnrctl", 0x2FF22BF8, 0x200138A8) Err#2 ENOENT

  execve("/u01/app/11.2.0.4/grid/bin/lsnrctl", 0x2FF22BF8, 0x200138A8) argc: 2

  kusla(2, 0x09FFFFFFF0001170) Err#1 EPERM

  read_sysconfig(0x09001000A07D1550,, 0x09001000A0806E68) = 0x0000000000000000

  sbrk(0x0000000000000000) = 0x00000001101D54D8

  vmgetinfo(0x0FFFFFFFFFFFF140, 7, 16) = 0

  sbrk(0x0000000000000000) = 0x00000001101D54D8

  sbrk(0x0000000000000008) = 0x00000001101D54D8

  __libc_sbrk(0x0000000000010020) = 0x00000001101D54E0

  thread_init(0x0900000000520760, 0x09001000A0888470) =

  sbrk(0x0000000000000000) = 0x00000001101E5500

  vmgetinfo(0x0FFFFFFFFFFFF780, 7, 16) = 0

  smcr_procattr(0, 1, 0x0FFFFFFFFFFFF778) Err#109 ENOSYS

  getrpid(-1, -1, 648535941220675944) = 8912948

  _getpid() = 8912948

  getprocs64(0x00000001101D7BF0, 5024, , 1) = 1

  appulimit(1005, 0) = 0x0FFFFFFFFE000000

  _thread_self() = 66453675

  thread_setmystate(0x0000000000000000, 0x0FFFFFFFFFFFF2A0) = 0

  .....省略....

  _getpid() = 8912948

  accessx("/etc/secvars.cfg", 04, 0) = 0

  statx("/etc/secvars.cfg", 0x0FFFFFFFFFFF6FB0, 176, 0) = 0

  _getpid() = 8912948

  accessx("/etc/passwd", 04, 0) = 0

  statx("/etc/passwd", 0x0FFFFFFFFFFF6E20, 176, 0) = 0

  accessx("/etc/security/passwd", 04, 0) Err#13 EACCES

  accessx("/etc/passwd", 04, 0) = 0

  statx("/etc/passwd", 0x0FFFFFFFFFFF6B50, 176, 0) = 0

  accessx("/etc/passwd", 04, 0) = 0

  statx("/etc/passwd", 0x0FFFFFFFFFFF6C20, 176, 0) = 0

  _getpid() = 8912948

  accessx("/etc/passwd", 04, 0) = 0

  statx("/etc/passwd", 0x0FFFFFFFFFFF6E20, 176, 0) = 0

  accessx("/etc/security/passwd", 04, 0) Err#13 EACCES

  accessx("/etc/passwd", 04, 0) = 0

  statx("/etc/passwd", 0x0FFFFFFFFFFF6B50, 176, 0) = 0

  accessx("/etc/passwd", 04, 0) = 0

  statx("/etc/passwd", 0x0FFFFFFFFFFF6C20, 176, 0) = 0

  accessx("/etc/security/passwd", 04, 0) Err#13 EACCES

  close(5) = 0

  gethostname(0x0FFFFFFFFFFF9C00, 512) = 0

  access("/tmp/.oracle", 0) = 0

  chmod("/tmp/.oracle", 01777) Err#1 EPERM

  socket(1, 1, 0) = 5

  access("/tmp/.oracle/sLISTENER", 0) = 0

  connext(5, 0x0FFFFFFFFFFF5BA8, 1025) Err#79 ECONNREFUSED

  -->注意这里,发现要读取/tmp/.oracle/sLISTENER

  access("/tmp/.oracle/sLISTENER", 0) = 0

  _nsleep(0x0FFFFFFFFFFF5580, 0x0FFFFFFFFFFF5650) = 0

  close(5) = 0

  socket(1, 1, 0) = 5

  connext(5, 0x0FFFFFFFFFFF5BA8, 1025) Err#79 ECONNREFUSED

  access("/tmp/.oracle/sLISTENER", 0) = 0

  -->注意,这里大量读取出错的信息抛出

  _nsleep(0x0FFFFFFFFFFF5580, 0x0FFFFFFFFFFF5650) = 0

  close(5) = 0

  socket(1, 1, 0) = 5

  connext(5, 0x0FFFFFFFFFFF5BA8, 1025) Err#79 ECONNREFUSED

  access("/tmp/.oracle/sLISTENER", 0) = 0

  _nsleep(0x0FFFFFFFFFFF5580, 0x0FFFFFFFFFFF5650) = 0

  close(5) = 0

  。。。。。

  socket(1, 1, 0) = 5

  connext(5, 0x0FFFFFFFFFFF5BA8, 1025) Err#79 ECONNREFUSED

  access("/tmp/.oracle/sLISTENER", 0) = 0

  _nsleep(0x0FFFFFFFFFFF5580, 0x0FFFFFFFFFFF5650) = 0

  close(5) = 0

  socket(1, 1, 0) = 5

  connext(5, 0x0FFFFFFFFFFF5BA8, 1025) Err#79 ECONNREFUSED

  access("/tmp/.oracle/sLISTENER", 0) = 0

  close(5) = 0

  kopen("/u01/app/11.2.0.4/grid/network/mesg/tnsus.msb", O_RDONLY) = 5

  kfcntl(5, F_SETFD, 0x0000000000000001) = 0

  lseek(5, 0, 0) = 0

  kread(5, "1513 "011303tt0000".., 256) = 256

  lseek(5, 512, 0) = 512

  kread(5, " 19B0000000000".., 512) = 512

  lseek(5, 1024, 0) = 1024

  kread(5, "0t01201A0 &0 -0 F".., 172) = 172

  lseek(5, 19456, 0) = 19456

  kread(5, "00F04 $000 b04 %00".., 512) = 512

  Starting /u01/app/11.2.0.4/grid/bin/tnslsnr: please wait...

  kwrite(1, " S t a r t i n g / u 0".., 61) = 61

  kfcntl(1, F_GETFL, 0x0000000000000008) = 67110914

  pipe(0x0FFFFFFFFFFF80E0) = 0

  pipe(0x0FFFFFFFFFFF80D8) = 0

  sigprocmask(0, 0x09001000A090DB70, 0x09001000A090DB90) = 0

  kfork() = 19988596

  kread(8, " N T P 0 1 4 4 8 3 5 7".., 64) = 14

  _getpid() = 8912948

  kfcntl(8, F_SETFD, 0x0000000000000001) = 0

  kwrite(7, "0 00100001 :01 ,".., 179) = 179

  kread(8, "0f0004000 "001 ., 8208) = 492

  close(7) = 0

  close(8) = 0

  --> 在经过了连续的尝试无法锁定文件后,出错,提示无法启动:

  TNSLSNR for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production

  System parameter file is /u01/app/11.2.0.4/grid/network/admin/listener.ora

  Log messages written to /u01/app/grid/diag/tnslsnr/xxxxdbb/listener/alert/log.xml

  Error listening on: (DEION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))

  TNS-12555: TNS:permission denied

  TNS-12560: TNS:protocol adapter error

  TNS-00525: Insufficient privilege for operation

  IBM/AIX RISC System/6000 Error: 1: Not owner

  kwrite(1, " T N S L S N R f o r ".., 470) = 470

  kwrite(1, "n", 1) = 1

  lseek(5, 19968, 0) = 19968

  kread(5, "0r04 5000 V04 600".., 512) = 512

  Listener failed to start. See the error message(s) above...

  kwrite(1, " L i s t e n e r f a i".., 61) = 61

  kfcntl(1, F_GETFL, 0x0000000000000008) = 67110914

  close(4) = 0

  kfcntl(1, F_GETFL, 0x0000000000000008) = 67110914

  close(5) = 0

  kfcntl(1, F_GETFL, 0x0000000013F600AB) = 67110914

  kfcntl(2, F_GETFL, 0x0000000013F600AB) = 67110914

  _exit(1)

  尝试删除/tmp/.oracle/sLISTENER后监听正常启动.

  事实上,在 /tmp/.oracle 目录,或者有些平台在 /var/tmp/.oracle 目录,存放一些数据库运行时的临时文件,包括基于socket的协议监听临时文件。在某些异常情况下,数据库关闭时没有及时清理这些文件,导致启动出现问题。这个案例就是这样的情况之一。

  以下是一段相关描述:

  The hidden directory '/var/tmp/.oracle' (or /tmp/.oracle on some platforms) or its content was removed while instances & the CRS stack were up and running. Typically this directory contains a number of "special" socket files that are used by local clients to connect via the IPC protocol (sqlnet) to various Oracle processes including the TNS listener, the CSS, CRS & EVM daemons or even database or ASM instances. These files are created when the "listening" process starts.

  这是应用truss的诊断案例一则,与大家分享。

  加入"云和恩墨大讲堂",参与讨论学习

  搜索 盖国强(Eygle)微信号:eyygle,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。

  关注公众号,获得后续精彩分享

mt.sohu.com true Oraclemp https://mt.sohu.com/20170626/n498572503.shtml report 14986 作者简介:刘斌,云和恩墨高级技术专家,擅长数据库故障诊断分析,数据库性能优化,自动化运维开发,坚持学习、写作、分享,在OracleDBA的日常工作中,通过各种跟
阅读(0) 举报
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。

热门关注

搜生活

搜生活+关注

搜狐公众平台官方账号

MAGIC杨梦晶

MAGIC杨梦晶+关注

生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者

搜狐教育

搜狐教育+关注

搜狐网教育频道官方账号

星吧GEO

星吧GEO+关注

全球最大华文占星网站-专业研究星座命理及测算服务机构

热门图片

  • 热点视频
  • 影视剧
  • 综艺
  • 原创
锦绣缘

同步热播-锦绣缘

主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
神雕侠侣

大结局-神雕侠侣

主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
封神英雄榜

同步热播-封神英雄榜

主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓

六颗子弹

主演:尚格·云顿/乔·弗拉尼甘/Bianca Bree
龙虎少年队2

龙虎少年队2

主演:艾斯·库珀/ 查宁·塔图姆/ 乔纳·希尔

《奔跑吧兄弟》

baby14岁写真曝光

《我看你有戏》

李冰冰向成龙撒娇争宠

《明星同乐会》

李湘遭闺蜜曝光旧爱

《非你莫属》

美女模特教老板走秀

《一站到底》

曝搬砖男神奇葩择偶观

搜狐视频娱乐播报

柳岩被迫成赚钱工具

大鹏嘚吧嘚

大屁小P虐心恋

匆匆那年第16集

匆匆那年大结局

隐秘而伟大第二季

乔杉遭粉丝骚扰

The Kelly Show

男闺蜜的尴尬初夜

我来说两句排行榜

客服热线:86-10-58511234

客服邮箱:kf@vip.sohu.com