几个常见的LINUX下的ORACLE错误解决方法

必要的硬件信息检查:

检查内容 最小值 检查命令参考
物理内存 512M # grep MemTotal /proc/meminfo
交换空间 max{1.0 GB,2倍内存} # grep SwapTotal /proc/meminfo
/tmp 空间 400 MB # df -k /tmp
软件所需空间 2.5 GB # df -k
数据库文件 1.2 GB # df -k

前提:tds7.1(kernel: 2.4.21-16)操作系统选择[完全安装]

一、建用户组、用户脚本creuser.sh

# For create the oracle user

#!/bin/sh

groupadd -g 600 dba
groupadd -g 601 oinstall
useradd -u 600 -g dba -G oinstall oracle -d /opt/oracle -p oracle

二、设置环境变量.bash_profile脚本如下(该脚本cp到$ORACLE_BASE目录下,并更改文件里的SID。执行以下命令:
# chown –R oracle.dba /opt/oracle/ ):

# .bash_profile

# Use to set orale profile
# /opt/oracle/.bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
SOURCE ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

export ORACLE_BASE=/opt/oracle
export ORACLE_SID=ORA10G #此参数应根据节点修改
export ORACLE_HOME=$ORACLE_BASE/product/ora10g
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=$PATH:$ORACLE_HOME/bin:/sbin

export LANG=en_US

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib

export THREADS_FLAG=native

umask 022

三、编辑/etc/sysctl.conf,在该文件末尾加入如下内容:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
编辑完之后,保存,执行 # /sbin/sysctl -p 命令操作来使我们所做的变更生效。
注意:核心参数配置可能需要根据实际环境进行适当的变动.

四、Trouble-Shooting

1、运行runInstaller,错误提示如下:
Checking requirements...
Checking operating system version: must be redhat-2.1,redhat-3,SuSE-9,SuSE-8,UnitedLinux-1.0
Failed<<<<
解决方法:
方法一:
在/etc下创建UnitedLinux-release文件
#cat > /etc/UnitedLinux-release << EOF
>UnitedLinux 1.0 (i586)
>VERSION=1.0
>EOF
然后就可以正常启动安装程序。注意不要使用vi编辑该文件,否则可能会引起ORA-12547: TNS: lost contact的错误。

方法二:
运行runInstaller -ignoreSysPrereqs,这样会跳过检查

方法三:
修改Oracle 的/.../disk1/install/linux/oraparam.ini这个参数文件

2、安装界面或者netca界面、dbca界面显示很多"口口"样子的乱码

解决办法:查看locale输出
# locale
LANG=zh_CN.GB18030
LC_CTYPE=zh_CN.GB18030
LC_NUMERIC="zh_CN.GB18030"
LC_TIME="zh_CN.GB18030"
LC_COLLATE="zh_CN.GB18030"
LC_MONETARY="zh_CN.GB18030"
LC_MESSAGES="zh_CN.GB18030"
LC_PAPER="zh_CN.GB18030"
LC_NAME="zh_CN.GB18030"
LC_ADDRESS="zh_CN.GB18030"
LC_TELEPHONE="zh_CN.GB18030"
LC_MEASUREMENT="zh_CN.GB18030"
LC_IDENTIFICATION="zh_CN.GB18030"
LC_ALL=
执行#export LANG=en_US 然后重新调用安装程序.

3、Oracle10g自动检查操作系统是否符合安装的条件。当按照上面的脚本对系统进行配置后,会有警告提示。[Retry]会看到如下提示:

Checking for openmotif-2.1.30-11; found Not found. Failed <<<<
Check complete. The overall result of this check is: Failed <<<<
Problem: Some recommended packages are missing (see above)

下载并安装openmotif-2.1.30-11软件包后,通过验证。

备注:有oracle文档说明:对于在RHELAS3上安装oracle10g,需要openmotif-2.2.2-16或更高版本;
但下载openmotif-2.2.2-16.src.rpm,在机器上编译安装,oracle自动检查仍然有警告提示。

4、安装程序在进行到74%的时,按照提示用root身份运行$ORACLE_HOME/root.sh,出现以下错误:

./root.sh: line 227: /var/opt/oracle/srvConfig.loc: 没有那个文件或目录
./root.sh: line 228: /var/opt/oracle/srvConfig.loc: 没有那个文件或目录
/bin/chown: 无法取得 ‘/var/opt/oracle/srvConfig.loc’的属性:没有那个文件或目录
/bin/chgrp: 无法取得 ‘/var/opt/oracle/srvConfig.loc’的属性:没有那个文件或目录
/bin/chmod: 无法取得 ‘/var/opt/oracle/srvConfig.loc’的属性:没有那个文件或目录
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
OCR create keys failed, OCR error 26
Failed to initialize Oracle Cluster Registry for cluster

解决方法:
# mkdir /var/opt/oracle
# chown -R oracle.dba /var/opt/oracle
# ./root.sh

5、 数据库启动:
$sqlplus /nolog
SQL>connect / as sysdba
SQL>startup

ORA-00371: not enougsh shared pool memory, should be atleast 52132659 bytes.

解决方法:
这个错误并非是内核参数设置的问题,也和系统的物理内存大小无关。编辑$ORACLE_HOME/dbs/init$GID.ora文件:
shared_pool_size = 52132659

6、 数据库启动:
$sqlplus /nolog
SQL>connect / as sysdba
SQL>startup

ora-01102: cannot mount database in EXCLUSIVE mode

解决方法:
完全关闭数据库,更改$ORACLE_HOME/dbs/init.ora文件里的db_name为建库时定义的“全局数据库名”,然后再重新启动数据库

7、 数据库启动:
$sqlplus /nolog
SQL>connect / as sysdba
SQL>startup

ora-00205:error in identifying conrolfile, check alert log for more info

解决方法:
SQL>show parameter control_files
SQL>CREATE CONTROLFILE
将$ORACLE_BASE/admin/$GID/pfile/init$SID.ora***************拷贝到$ORACLE_HOME/dbs下,命名为init$SID.ora,即可解决。

8、数据库启动:
$sqlplus /nolog
SQL>connect / as sysdba
SQL>startup

ORA-01990:error opening password file '$ORACLE_NAME/dbs/orapw'
ORA-27037:unable to obtain file status
Linux Error:2: No such file or directory
Additional information: 3

解决方法:
将$ORACLE_HOME/dbs下的orapw$db_name文件拷贝生成一个orapw文件。

8、建库的过程中或者连接数据库的时候提示:
ORA-12547: TNS: lost contact
引起该错误的环境比较复杂,原因可能是:
1、用vi编辑的/etc/UnitedLinux-release文件
2、内核参数设置不正确
3、察看一下listener是否正常启动: lsnrct1 status
4、机器负载过大