1. 参数文件的选择
我们来关注一下启动过程中Oracle选择参数文件的顺序。
从Oracle 9i开始,spfile被引入Oracle数据库,Oracle首选spfile<ORACLE_SID>.ora文件作为启动参数文件;如果该文件不存在,Oracle选择spfile.ora文件;如果前两者都不存在,Oracle将会选择init<ORACLE_SID>.ora文件;如果以上三个文件都不存在,Oracle将无法创建和启动instance。
Oracle在启动过程中,会在特定的路径中寻找参数文件,在Unix/Linux下的路径为ORACLE_HOME/dbs目录,在WINDOWS上的路径为ORACLE_HOME\database目录。
可以在SQL*PLUS中通过show parameter spfile命令来检查数据库是否使用了spfile文件,如果value不为Null,则数据库使用了spfile文件:
SQL> show parameter spfile NAME TYPE VALUE ------- ------- ----------------------------------------------- spfile string ?/dbs/spfile@.ora
复制
注意这里的"?"代表ORACLE_HOME,@代表数据库的sid。现在如果更名spfile<ORACLE_SID>.ora文件,此后Oracle将选择spfile.ora文件启动数据库:
[oracle@jumper dbs]$ mv spfileconner.ora spfileconner.ora.bak SQL> startup nomount SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string ?/dbs/spfile.ora
复制
进一步的如果再更名spfile.ora文件,此后Oracle将选择init<ORACLE_SID>.ora文件启动数据库:
[oracle@jumper dbs]$ mv spfile.ora spfile.ora.bak SQL> startup nomount SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string
复制
如果这三个文件都不存在,Oracle将无法启动:
[oracle@jumper dbs]$ mv initconner.ora initconner.ora.bak SQL> startup ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/opt/oracle/product/9.2.0/dbs/initconner.ora'
复制
注意这里出现的错误提示,报告无法找到参数文件init<ORACLE_SID>.ora,这正是Oracle在启动过程中最后一个查找的参数文件。
在Oracle整个启动过程中,参数文件是写在应用程序中的硬代码,按照前面描述的顺序进行查找,以下是来自源码中关于参数文件及其查找顺序的定义:
?/dbs/spfile@.ora ?/dbs/spfile.ora ?/dbs/init@.ora
复制
虽然不能改变Oracle对于参数文件的搜索路径及行为,但是如果参数文件不在相应的位置,在Linux/Unix系统上,可以通过符号链接来进行重定位,以满足一些特殊需要。
2. 实例启动最小参数需求
在参数文件中,通常需要最少的参数是db_name ,设置了这个参数之后,数据库实例就可以启动,来看一个简单的测试。
可以随意命名一个ORACLE_SID(测试来自于Linux下,适用于Linux/Unix,对于Windows平台,需要通过oradim.exe工具创建服务),然后尝试启动到nomount状态:
[oracle@jumper dbs]$ export ORACLE_SID=julia [oracle@jumper dbs]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Mon May 8 11:08:36 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to an idle instance. SQL> startup nomount; ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/opt/oracle/product/9.2.0/dbs/initjulia.ora'
复制
参数文件查找失败会给出提示信息,此时创建一个最简单的参数文件(仅包含DB_NAME初始化参数),然后就可以启动实例:
SQL> ! echo "db_name=julia" > /opt/oracle/product/9.2.0/dbs/initjulia.ora SQL> startup nomount; ORACLE instance started. Total System Global Area 97588504 bytes Fixed Size 451864 bytes Variable Size 46137344 bytes Database Buffers 50331648 bytes Redo Buffers 667648 bytes
复制
缺省的,如果不设置,background_dump_dest目录(告警日志文件alert_<ORACLE_SID>.log的存放地点)位于$ORACLE_HOME/rdbms/log目录下:
SQL> show parameter background_dump NAME TYPE VALUE ------------------------------------ ---------------------- ---------------------- background_dump_dest string ?/rdbms/log
复制
顺便看下其他几个缺省路径的地点:
SQL> show parameter dump_dest NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------ background_dump_dest string ?/rdbms/log core_dump_dest string ?/dbs user_dump_dest string ?/rdbms/log SQL> show parameter control_files NAME TYPE VALUE ------------------------------------ ---------------------- ----------------------- control_files string ?/dbs/cntrl@.dbf
复制
这样,通过以上步骤就以最少的参数需求启动了Oracle实例。