Oracle参数文件(Parameter File)是Oracle数据库中一个重要的文件组成部分,负责在启动阶段提供重要的参数支持。正确配置的参数文件可以保证启动过程顺利进行。
1、从启动过程看参数文件
首先说说启动过程中,参数文件Parameter File的作用。Oracle启动过程共分为三个阶段:nomount、mount和open。其中,涉及到nomount阶段的重要文件就是参数文件。在nomount阶段,详细配置信息流如下:
ü通过环境变量定位启动实例物理位置和参数文件位置
在数据库实例停止的状态下,用户通过sqlplus登录空闲实例,主要认证方式是OS验证或者密码文件Password File。此时,Oracle需要确定启动的实例名称和对应的Oracle程序文件是什么?解决的方法就是利用操作系统的环境变量。
在Linux系统上,我们从安装时就要进行一系列的环境变量配置。如下:
//获取以ORA开头的环境变量
[oracle@oracle11g ~]$ env | grep ORA
ORACLE_SID=wilson
ORACLE_BASE=/u01
ORACLE_HOME=/u01/oracle
$ORACLE_SID、$ORACLE_BASE和$ORACLE_HOME是环境变量中最重要的三个。分别定义了启动数据库实例的名称sid、对应Oracle产品软件的基础目录base和Oracle数据库安装的Home路径。在启动sqlplus的时候,三个参数都会传入到sqlplus的上下文环境。
在进行startup的时候,开始是nomount阶段。Oracle首选去读取三个环境变量值,找到$ORACLE_HOME对应的目录结构。目前Oracle目录结构大都遵循OFA(Optimal Flexible Architecture最佳灵活体系结构)。简单来说,就是将各种配置文件都遵守相同部署规范和存储结构。在这个体系中,Linux/Unix描述参数文件通常都在$ORACLE_HOME/dbs(NT体系下目录为$ORACLE_HOME/database)目录下。所以,如果可以确定$ORACLE_HOME目录,就可以找到参数文件存储的目录。
ü确定参数文件名称
由于历史的原因,Oracle系统分别经历过二进制参数文件和ASCII格式参数两个时代。目前的Oracle版本,两类型文件都可以被支持。区别就是寻找的顺序差异。
寻找的顺序:首先是spfile.ora,该文件是二进制格式。如果不存在,Oracle会试图寻找spfile.ora文件,该文件也是二进制格式。如果两者都没有找到,就开始寻找init.ora文件,最后确定init.ora文件。
注意,此时就需要使用到$ORACLE_SID的环境变量。如果四个文件都没有找到,Oracle就会在nomount阶段报错。
ü根据参数文件Parameter File启动实例
在nomount阶段,Oracle是不会主动进行数据库文件的开启和加载的。这个阶段主要完成的就是数据库实例instance创建,包括backgroud process创建和共享内存分配。
对nomount阶段实例进程和共享内存创建的详细解析,请参阅笔者《Oracle启动三阶段》(http://space.itpub.net/17203031/viewspace-684503)系列。
经过了nomount阶段,Oracle实现了数据库实例的启动,共享内存分配。另一个重要方面就是参数文件信息的读取。下面我们一起检查下参数文件中有什么信息呢?
2、获取参数文件信息
目前的Oracle版本中,参数文件主要是使用二进制spfile文件保存的。直接进行修改参数文件的手段主要是通过启动Oracle之后,通过alter system/database之类的命令。本篇中,我们可以间接通过将二进制格式文件转化为ASCII格式文件,来查看参数内容。
判断数据库启动是否是通过SPFILE二进制格式启动,只需要查看参数spfile。如果有value值,就表示启动的数据库是使用二进制格式参数文件。如果没有,就是使用ASCII格式文件。
SQL> show parameter spfile
NAMETYPEVALUE
------------------------------------ ----------- ------------------------------
spfilestring/u01/oracle/dbs/spfilewilson.ora
之后我们到文件系统中查看该文件。
//使用file命令查看格式内容
[oracle@oracle11g test]$ file /u01/oracle/dbs/spfilewilson.ora
/u01/oracle/dbs/spfilewilson.ora: data //二进制格式
使用create pfile命令将二进制的spfile导出为pfile文件。
SQL> conn / as sysdba
Connected.
SQL> create pfile='/test/pfile.ora' from spfile;
File created.
//切换到文件系统
[oracle@oracle11g ~]$ cd /test
[oracle@oracle11g test]$ ls -l
total 4
-rw-r--r--1 oracle oinstall 963 Jun1 04:49 pfile.ora
[oracle@oracle11g test]$file pfile.ora
pfile.ora: ASCII text
展开文件pfile.ora,可以直接获取到参数文件中包括的所有参数。
[oracle@oracle11g test]$ cat pfile.ora
wilson.__db_cache_size=92274688
wilson.__java_pool_size=4194304
wilson.__large_pool_size=4194304
wilson.__oracle_base='/u01'#ORACLE_BASE set from environment
wilson.__pga_aggregate_target=142606336
wilson.__sga_target=272629760
wilson.__shared_io_pool_size=0
wilson.__shared_pool_size=155189248
wilson.__streams_pool_size=8388608
*.audit_file_dest='/u01/admin/wilson/adump'
*.audit_trail='DB'
*.compatible='11.2.0.0.0'
*.control_files='/u01/oradata/WILSON/controlfile/o1_mf_6bcsqm50_.ctl','/u01/flash_recovery_area/WILSON/controlfile/o1_mf_6bcsqmd8_.ctl'
*.db_block_size=8192
*.db_create_file_dest='/u01/oradata'
*.db_domain=''
*.db_name='wilson'
*.db_recovery_file_dest='/u01/flash_recovery_area'
*.db_recovery_file_dest_size=3145728000
*.diagnostic_dest='/u01'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=wilsonXDB)'
*.memory_target=415236096
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_servers=2
*.undo_tablespace='UNDOTBS1'
相对于Oracle内部控制文件包括的巨大参数数量,参数文件Parameter File中包括了一些很核心的重要参数。
接下来,我们打算针对不同类型对这些参数进行分析和解释。