在看盖国强的《深入浅出——DBA入门、进阶与诊断案例》的时候发现了这个命令,觉得很好用,于是汇总如下。 由上面的公式就可以知道了,oerr使用方法大体如下: 二、简单的看看oerr命令脚本 2.内容 3.入口 4.在$ORACLE_HOME/rdbms/mesg下有很多.msg文件、.msb文件 6.脚本执行路径
一、基本用法
[oracle@root]oerr --help Usage: oerr facility error Facility is identified by the prefix string in the error message. For example, if you get ORA-7300, "ora" is the facility and "7300" is the error. So you should type "oerr ora 7300". If you get LCD-111, type "oerr lcd 111", and so on. [oracle@root]oerr --info Usage: oerr facility error Facility is identified by the prefix string in the error message. For example, if you get ORA-7300, "ora" is the facility and "7300" is the error. So you should type "oerr ora 7300". If you get LCD-111, type "oerr lcd 111", and so on. [oracle@root]man oerr No manual entry for oerr. [oracle@root]
[oracle@root]oerr ora 00600 ----查询ora-00600错误的描述信息 00600, 00000, "internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s]" // *Cause: This is the generic internal error number for Oracle program // exceptions. This indicates that a process has encountered an // exceptional condition. // *Action: Report as a bug - the first argument is the internal error number [oracle@root]oerr lcd 111 ----查询lcd-111错误的描述信息 111, 0, "value not in legal range [%.*s]" // *Cause: The value of the parameter is outside bounds // *Action: Refer to the manual for the bounds on the parameter [oracle@root]
1.位置
[oracle@root]which oerr /data/oracle/oracle/product/10.2.0/bin/oerr [oracle@root]cd /data/oracle/oracle/product/10.2.0/bin
[oracle@root]more oerr #!/bin/sh # # $Id: oerr 28-aug-2001.15:35:03 mkrohan Exp $ # Copyright (c) 1994, 2001, Oracle Corporation. All rights reserved. # # 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. # # # Turn on script tracing if, requested [ "$ORACLE_TRACE" = "T" ] && set -x # # If ORACLE_HOME is not set, we will not be able to locate # the message text file. if [ ! "$ORACLE_HOME" ] then echo "ORACLE_HOME not set. Please set ORACLE_HOME and try again." 1>&2 exit 1 fi # # Ignore user locale LC_ALL=C export LC_ALL # # Definition script "constants" Facilities_File=$ORACLE_HOME/lib/facility.lis # # Check script usage if [ "$#" != "2" ] then exec 1>&2 echo 'Usage: oerr facility error' echo echo 'Facility is identified by the prefix string in the error message.' echo 'For example, if you get ORA-7300, "ora" is the facility and "7300"' echo 'is the error. So you should type "oerr ora 7300".' echo echo 'If you get LCD-111, type "oerr lcd 111", and so on.' exit 1 fi # # Pickup the command line arguments Facility= "$1" Code= "$2" # # Get the facility information from the oerr data file Fac_Info=`grep -i "^${Facility}:" $Facilities_File 2> /dev/ null` if [ $? -ne 0 ] then echo "oerr: Unknown facility '$Facility'" 1>&2 exit 1 fi # # Parse the components from the Fac_Info string into Shell variables eval `echo "$Fac_Info" | awk -F: '{ if (index ($3, "*") == 0) printf ( "Facility=%s\n", $3); else printf ( "Facility=%s\n", $1); printf ( "Component=%s\n", $2); }'` if [ -z "$Facility" -o -z "$Component" ] then echo "oerr: Invalid facilities entry '$Fac_Info'" 1>&2 exit 1 fi # # The message file searched is always the US English file Msg_File=$ORACLE_HOME/$Component/mesg/${Facility}us.msg if [ ! -r $Msg_File ] then echo "oerr: Cannot access the message file $Msg_File" 1>&2 exit 1 fi # # Search the message file for the error code, printing the message text # and any following comments which should give the cause and action for # the error. awk "BEGIN { found = 0; } /^[0]*$Code/ { found = 1; print ; next;} /^\/\ // { if (found) { print; } next; } { if (found) { exit; } }" $Msg_File exit 0 [oracle@root]
Msg_File=$ORACLE_HOME/$Component/mesg/${Facility}us.ms
在$ORACLE_HOME/mesg下有几个.msb文件,可以发现
1)在$ORACLE_HOME/rdbms/mesg下的文件均为commands test,可以编辑但有部分乱码情况。 [oracle@root]file bbedus.msb bbedus.msb: commands text [oracle@root]file bbedus.msg bbedus.msg: commands text [oracle@root] 2)在$ORACLE_HOME/mesg下的文件为data类型 [oracle@root]file kfodus.msb kfodus.msb: data [oracle@root] 为类似二进制文件,部分字符可以识别,但很多乱码。
5.发现
在$ORACLE_HOME/rdbms/mesg下有很多.msg文件中,可以找到ora-600的错误描述和命令oerr ora 00600一样的结果
[oracle@root]grep 00600 *.msg kgpus.msg:00600, 00000, "internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s]" ocius.msg:/ Use ORA-00600 messages for internal messages not to be seen by the user. ocius.msg:/ BETTER : ORA-00600, internal error, arguments: [ttcxxx], [], [], [], [] ocius.msg:/ Use ORA-00600 messages for internal messages not to be seen by the user. oraus.msg:/ Use ORA-00600 messages for internal messages not to be seen by the user. oraus.msg:/ BETTER : ORA-00600, internal error, arguments: [ttcxxx], [], [], [], [] oraus.msg:/ Use ORA-00600 messages for internal messages not to be seen by the user. oraus.msg:00600, 00000, "internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s]" oraus.msg:16099, 00000, "internal error ORA-00600 occurred at standby database" [oracle@root]
[oracle@root]sh -x oerr ora 00600 + [ = T ] + [ ! /data/oracle/oracle/product/10.2.0 ] LC_ALL=C + export LC_ALL Facilities_File=/data/oracle/oracle/product/10.2.0/lib/facility.lis ----调用facility.lis + [ 2 != 2 ] Facility=ora Code=00600 + grep -i ^ora: /data/oracle/oracle/product/10.2.0/lib/facility.lis Fac_Info=ora:rdbms:*: + [ 0 -ne 0 ] + + awk echo ora:rdbms:*: -F: { if (index ($3, "*") == 0) printf ( "Facility=%s\n", $3); else printf ( "Facility=%s\n", $1); printf ( "Component=%s\n", $2); } + eval Facility=ora Component=rdbms Component=rdbms Facility=ora + [ -z ora -o -z rdbms ] Msg_File=/data/oracle/oracle/product/10.2.0/rdbms/mesg/oraus.msg --定位在oraus.msg内,与上面查相符合 + [ ! -r /data/oracle/oracle/product/10.2.0/rdbms/mesg/oraus.msg ] + awk BEGIN { found = 0; } /^[0]*00600/ { found = 1; print ; next;} /^\/\ // { if (found) { print; } next; } { if (found) { exit; } } /data/oracle/oracle/product/10.2.0/rdbms/mesg/oraus.msg 00600, 00000, "internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s]" // *Cause: This is the generic internal error number for Oracle program // exceptions. This indicates that a process has encountered an // exceptional condition. // *Action: Report as a bug - the first argument is the internal error number + exit 0 [oracle@root]