Linux下oracle 10g的错误:ORA-01034, ORA-27101 and ORA-00600

进入系统,oracle报错:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist

这两个错误的原因可能是:
ORACLE_SID或ORACLE_HOME没有设置正确。对normal users来言,或者是oracle数据库没有启动。对remote users,可能listener有问题。

解决方法:
step 1.
确保ORACLE_SID和ORACLE_HOME正确的设置。可以再Unix下查看变量:
SQL>!echo $ORACLE_SID
data1 or XE

SQL>!echo $ORACLE_HOME
.../oracle/product/10.2.0/db_1(or server)

如果运行的结果与上面的结果不同,可以通过下面的命令set:
$export ORACLE_SID=db_name_here // db_name_here = data1 or XE
另外,需要注意:ORACLE_SID是大小写区分的

step 2.
验证数据库实例正在运行.
在Unix下可以这样查看:
SQL>!PS -ef | grep smon
这行命令会返回一行数据,类似于: ora_smon_xe。 如果没有返回这样的数据,说明数据库没有启动。

运行一下命令启动数据库:
$sqlplus / as sysdba
$startup

如果没有返回错误的话,再去查看 ps -ef | grep smon, 应该会返回ora_smon_xe之类的一行数据。

可是,我在startup的时候却发生了错误:
ORA-00600: internal error code, arguments: [keltnfy-ldminit] ...
g了一下,发现问题都指向/etc/hosts和hostname. 可是,我这边的机器没有更改过hostname啊,机器装好了就是这样的。
输入$hostname
ABC-DEF //说明hostname是ABC-DEF

再vim /etc/hosts
127.0.0.1对应的hostname是localhost,难道因为二者不对应造成的? 管他呢,先增加一行再说,在hosts里新增一行:
127.0.0.1 ABC-DEF
!wq

$startup
ok,可以启动了。

看来原因真是二者不对应造成的。默认的hostname是localhost,装的时候hostname设置为ABC-DEF,二者不对应。而通过hostname命令得到的主机名无法ping通,Oracle10g认为主机无法达到所以启动数据库报错。

PS:
有解决方案说:如果一定要修改机器名,需要修改的比较彻底,需要修改/etc/hosts,/etc/sysconfig/network这两个文件,如果忘了将/etc/hosts中127.0.0.1对应的机器修改成network文件中的一样,将会导致上面描述的错误。
可是,/etc/sysconfig/network是个文件夹,而且,vi该文件夹的时候,也没发现里面有关于hostname的设置。。。不过,我用的suse,莫非network文件的位置不对了。。。find一番,也没找到。自己无解了


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。