☆Smoozer☆

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

新装的一台机器,无法运行程序,报错:
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一番,也没找到。自己无解了。

posted on 2009-05-21 13:18  smoozer  阅读(11890)  评论(0编辑  收藏  举报