剖析Oracle中oerr命令(r8笔记第70天)

Oralce中的命令非常丰富,oerr命令是一个不错的辅助工具,很多看起来没有眉目的错误代码,可以让DBA很快定位问题的缘由,我们根本不需要去记有哪些ORA错误,除非那些错误已经完全和你的工作分不开。 绝大多数的命令都是二进制的形式,比如sqlplus我们可一窥其中的奥妙,oerr是一个shell脚本,而且实现原理也不难,我们来剖析一下,看看这个工具的设计思想。 首先这个工具位于$ORACLE_HOME/bin下,直接看还看不出是个shell脚本。 [oracle@db117 ~]$ ll $ORACLE_HOME/bin/oerr -rwxr-xr-x 1 oracle oinstall 2567 Apr 23 2014 /U01/app/oracle/product/11.2.0.4/bin/oerr 但是我就是喜欢折腾,所以无意中就打开了这个文件。可以看到这个脚本的注释如下: # Usage: oerr facility error # # This shell script is used to get the description and the cause and action # of an error from a message text file when a list of error numbers are passed # to it. It supports different language environments and errors from different # facilities. 当然脚本的完整内容也没有多少行,我们来简单看看,有一个配置文件facility.lis Facilities_File=$ORACLE_HOME/lib/facility.lis 需要从这个配置文件中取得相应的component,比如我们使用命令oerr ora 12345,则ora就是第一个参数,根据这个参数可以得到接下来需要使用的component值。 脚本里面有如下一行类似的内容,我们带入参数ora,当然还可以输入tns等等。 Fac_Info=`grep -i "^${Facility}:" $Facilities_File 2> /dev/null` 我们转换一下,可以看到得到的component是rdbms [oracle@db117 ~]$ grep -i "^ora:" $ORACLE_HOME/lib/facility.lis ora:rdbms:*: 至于这一行内容的解释,在文件中也可以轻松找到。 # # The entries in this file are colon separated defining, for each # facility (field 1), the component name (field 2), the "real" facility # name for facilities with aliases (field 3) with a value of "*" for # facilities without renamings and an optional facility description # (field 4) # # facility:component:rename:description # 里面的内容如下: acfs:usm:*: acfsk:usm:*: advm:usm:acfs: advmk:usm:*: amd:cwmlite:*: amdu:rdbms:*: 当然这只是开始,错误信息的文件在一个指定的文件中,比如component是rdbms,则错误信息的文件为$ORACLE_HOME/rdbms/mesg [oracle@db117 ~]$ cd $ORACLE_HOME/rdbms/mesg 而错误信息的文件也是有规律的,和ora相关的一个文件,oraus.msg也是大体这样的格式。 [oracle@db117 mesg]$ ll ora*us*msg -rw-r--r-- 1 oracle oinstall 4976647 Apr 23 2014 oraus.msg 比方这个时候我们移步到错误信息的文件中,找到了下面两行错误信息。 64477, 00000, "Multiple token tables are not supported." // *Cause: An attempt was made to create a new token table. If encountered // during an import, a critical patch was possibly missing on the // export database. // *Action: Use the default token table. If encountered during an import, // apply the appropriate patch on the export database and try the // export and import again. 64621, 00000, "SQL statement length (%s) exceeds maximum allowed length (%s)" // *Cause: An attempt was made to issue a SQL statement that exceeded the // maximum allowed length of a statement. // *Action: Modify the SQL statement or the views to which it refers to fit // within the maximum length or split the SQL statement. // 这个时候怎么去解析读取这个文件的呢, 首先就是解析错误编码,比如输入错误编码64621,我们也可以输入064621等,这个地方都会使用sed来先转换一下,保证能够找到完全匹配的内容。 Code=`echo 64621|/bin/sed 's/^[0]*//'` [oracle@db117 bin]$ echo 64621|/bin/sed 's/^[0]*//' 64621 [oracle@db117 bin]$ echo 064621|/bin/sed 's/^[0]*//' 64621 假设这个时候我们就看64621的错误信息,这个时候就可以使用awk来读取文件的内容。Oracle的调用方式类似下面的形式。 Code=64621 [oracle@db117 bin]$ awk "BEGIN { found = 0; } /^[0]*$Code/ { found = 1; print ; next;} /^\/\// { if (found) { print; } next; } { if (found) { exit; } }" $ORACLE_HOME/rdbms/mesg/oraus.msg 64621, 00000, "SQL statement length (%s) exceeds maximum allowed length (%s)" // *Cause: An attempt was made to issue a SQL statement that exceeded the // maximum allowed length of a statement. // *Action: Modify the SQL statement or the views to which it refers to fit // within the maximum length or split the SQL statement. // 所以学以致用,我们也可以仿照这种方式简单定制符合自己需求的内容。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2016-04-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

服务器增加内存后无法重启数据库的问题及解决 (36天)

前几天生产环境需要做服务器的扩容,把原本64G的内存扩到了128G.然后调整了一些其他的kernel参数,在此基础上需要调整sga的大小,以便分配更多的缓存。 ...

29850
来自专栏全华班

java学习手册-CentOS 6.3(x86_32)下安装Oracle 10g R2

CentOS 6.3(x86_32)下安装Oracle 10g R2 一、硬件要求 1、内存 & swap Minimum: 1 GB of RAM Reco...

38150
来自专栏不止是前端

Vue:前后端数据联调

43290
来自专栏运维咖啡吧

LDAP落地实战(一):OpenLDAP部署及管理维护

上边来了一堆的名词解释,看的云里雾里,还不是很明白,怎么跟自己的组织架构对应起来呢?看看下边的图是不是清晰明了

46530
来自专栏Seebug漏洞平台

GNU tar 解压路径绕过漏洞(CVE-2016-6321) 分析

Author: LG (知道创宇404安全实验室) 漏洞简介 GNU tar文档管理命令是linux系统下常用的一个打包、压缩的命令。经CSS(FSC1V Cy...

39660
来自专栏开源项目

免费个人博客搭建教程(详细-图文)--Hexo+OSChina

使用工具介绍 码云 Pages:码云 Pages 是一个免费的静态网页托管服务,您可以使用码云 Pages 托管博客、项目官网等静态网页。这样就不用购买服务器和...

669120
来自专栏遊俠扎彪

CentOS 5.6 安装 Oracle 10g 基本步骤

尝试安装了不下10次,只成功两次,很奇怪。安装Oracle是我接触Linux以来,最糟糕的经历之一。现总结一下,主要参考列表如下:

213100
来自专栏Android 技术栈

Mac搭建Hexo博客流程记录,排雷完成

经过一天的辛苦作战,总算基础的东西出来了。踩了太多的坑,综合我踩坑的经过,明白到,选好一篇引导文很重要!有些步骤不要先做了,不然后面你都不知道怎么死的..

20020
来自专栏zhisheng

SpringBoot Kafka 整合使用

前提 假设你了解过 SpringBoot 和 Kafka。 1、SpringBoot 如果对 SpringBoot 不了解的话,建议去看看 DD 大佬 和 纯洁...

928160
来自专栏博客园迁移

dubbo见解

  服务容器负责启动,加载,运行服务提供者。   服务提供者在启动时,向注册中心注册自己提供的服务。   服务消费者在启动时,向注册中心订阅自己所需的服务。  ...

18620

扫码关注云+社区

领取腾讯云代金券