dbstart脚本启动数据库问题

一直都想配置数据库随系统启动而自动启动,按照文档的指导建立了/etc/init.d/dbora文件,修改了/etc/oratab,在/etc/rc.d/rcX.d增加自动启动和停止项,指向/etc/init.d/dbora。。。如此这般,但数据库仍然无法自动启动,于是便一直这么撂着。

今天找到了这个帖子:ORACLE随LINUX启动关闭 。确定了我的配置应该没有问题。为了简单起见,把rsh启动改为su启动,配置完成后,dbstart启动仍然存在问题,启动日志形如:
/u01/app/oracle/product/10.2.0/db_1/bin/dbstart: Starting up database "orcl"
Thu Dec 23 14:23:31 CST 2010


SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 23 14:23:31 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connect / as sysdba SQL> ORA-01031: insufficient privileges
connect / as sysdba SQL>
/u01/app/oracle/product/10.2.0/db_1/bin/dbstart: Database instance "orcl" warm started.

奇怪的是,以oracle用户的操作系统认证竟然返回权限不够!而且日志中显示orcl数据库已经“warm started",但实际系统上并没有任何orcl的进程存在。

看着这个启动日志,忽然发现SQLPLUS似乎把连接命令当成了提示符!手动执行SQLPLUS,发现果然如此:
[oracle@localhost db_1]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 12月 23 16:33:06 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

dfljdf
dfljdf SQL> l
  1  select
  2  lower
  3  (
  4    USER ||
  5    '$'  ||
  6    substr
  7    (
  8      global_name,0,
  9      decode
 10      (
 11        instr(global_name,'.')-1,-1,
 12        length(global_name), instr(global_name,'.') -1
 13      )
 14    )
 15  )
 16  || '@' || utl_inaddr.get_host_name
 17  as GLOBAL_NAME
 18* from global_name
dfljdf SQL>

在SQLPLUS运行起来后而命令提示符出现之前,输入的任何字符都被当成了提示符(见上面,随便输入的“dfljdf”被当成了提示符)。

上面l命令显示的SQLPLUS缓存中的内容是为了显示“USER$SID@HOSTNAME”形式的提示符而设置的glogin.sql文件中的内容。

于是想到曾经可以通过手动运行dbstart脚本成功启动数据库,但后来不知从什么时候起就无法使用脚本手动启动数据库了,现在想来应该就是在配置了glogin.sql后的问题。

从glogin.sql中注释掉设置SQLPLUS提示符的内容,又可以使用dbstart启动数据库了。

但是为什么glogin.sql的部分内容会影响数据库自动启动,原因不明。
请使用浏览器的分享功能分享到微信等