Oracle参数文件

Oracle 参数文件是包含一系列参数和对应参数值的文件,分成两类:

Initialization Parameters File(初始化参数文件) Oracle 9i之前的版本。

Server Parameters File(服务参数文件)Oracle 9i之后引入该参数文件。

 

通过对比两个文件类型可以看出 spfile是数据类型的二进制文件,而pfile则是ASCII文本文件

[oracle@021Y-SH-BKAP dbs]$ file initorcl.ora 
initorcl.ora: ASCII text
[oracle@021Y-SH-BKAP dbs]$ file spfileorcl.ora 
spfileorcl.ora: data

 

pfile文件中的涉及的参数需要通过系统编辑工具编辑后,重启数据库对参数文件的改动内容进行加载。9i引入spfile之后,可以在数据库内通过ALTER SYSTEM/SESSION语句直接修改,并选择修改后的应用范围(内存中或是该文件中),并且这些参数修改值的应用不需要重启数据库。

另外,Oracle的RMAN工具把spfile纳入到备份恢复体系中。

 

SPFILE 创建

 

Oracle 9i开始,缺省情况下,Oracle启动数据库时加载spfile,而SPFILE需要从PFILE中创建出来(原来可以参考数据库启动过程)。新建的SPFILE在下一次数据库启动时生效。

创建语法:

CREATE SPFILE[='SPFILE_NAME'] FROM PFILE[='PFILE_NAME']
OR
CREATE PFILE[='PFILE_NAME'] FROM SPFILE[='SPFILE_NAME']

如果不指定名称,通过默认的名字是spfile+实例名组成文件名称。

 

SPFILE的默认创建路径是$ORACLE_HOME/dbs

此外,Oracle还引入V$SPPARAMETER视图来显示SPFILE的内容。

比如:

SQL> create spfile='chinaman.ora' from pfile;
File created.
SQL> host
[oracle@021Y-SH-BKAP dbs]$ ll chinaorcl.ora 
-rw-r----- 1 oracle oinstall 2560 Jan 20 09:09 chinaorcl.ora

 

盖国强书中提到SPFILE没有锁定的问题,在11G下已经得到解决:

SQL> host mv spfileorcl.ora spfileorcl.ora.bak
SQL> alter system set db_cache_size=24M scope=spfile;
alter system set db_cache_size=24M scope=spfile
*
ERROR at line 1:
ORA-01565: error in identifying file
'/DBBK/oracle/product/11.2.0.1.0/dbs/spfileorcl.ora'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> host mv spfileorcl.ora.bak spfileorcl.ora
SQL> alter system set db_cache_size=24M scope=spfile;
System altered.

不论如何,记住备份的重要性,甚至是SPFILE也要记得定期备份。

 

至于数据库的启动时默认查找并加载SPFILE的顺序如下(LINUX为例):

1、$ORACLE_HOME/dbs/spfile<Instance_name>.ora

2、$ORACLE_HOME/dbs/spfile.ora

3、$ORACLE_HOME/dbs/init<Instance_name>.ora

实验:

[oracle@021Y-SH-BKAP dbs]$ mv spfileorcl.ora spfileorcl.ora.bak
[oracle@021Y-SH-BKAP dbs]$ mv initorcl.ora initorcl.ora.bak
[oracle@021Y-SH-BKAP dbs]$ mv init.ora init.ora.bak
[oracle@021Y-SH-BKAP dbs]$ !sqlplus
SQL> startup nomount;
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/DBBK/oracle/product/11.2.0.1.0/dbs/initorcl.ora'
SQL> host mv initorcl.ora.bak initorcl.ora
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 6680915968 bytes
Fixed Size                  2213936 bytes
Variable Size            3556771792 bytes
Database Buffers         3087007744 bytes
Redo Buffers               34922496 bytes
把spfile<Instance_name>修改为spfile.ora启动数据库到mount状态发现,系统读取的是spfile.ora,而不是initorcl.ora
SQL> !mv spfileorcl.ora.bak spfile.ora
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 6680915968 bytes
Fixed Size                  2213936 bytes
Variable Size            3758098384 bytes
Database Buffers         2885681152 bytes
Redo Buffers               34922496 bytes
SQL> show parameter spfile
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
spfile                               string                            /DBBK/oracle/product/11.2.0.1.
                                                                       0/dbs/spfile.ora
                                                                     拷贝spfile.ora成spfile<Instance_name>.ora再次重启。                                                                 SQL> !cp spfile.ora spfileorcl.ora
SQL> !ls spfile*
spfile.ora  spfileorcl.ora
SQL> !ls -l spfile*
-rw-r----- 1 oracle oinstall 3584 Jan 20 09:54 spfile.ora
-rw-r----- 1 oracle oinstall 3584 Jan 20 09:57 spfileorcl.ora
SQL> show parameter spfile
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
spfile                               string                            /DBBK/oracle/product/11.2.0.1.
                                                                       0/dbs/spfileorcl.ora

 可以看到加载的是spfile<Instance_name>.ora而不是spfile.ora和initorcl.ora文件。

如果想通过手动指定PFILE的方式启动数据库,可以使用以下语句:

STARTUP PFILE='PATH/TO/PFILE_NAME.ORA'

可以再PFILE文件中显示的指明SPFILE路径,此时PFILE会链接到SPFILE,这时以PFILE启动时,会先读取SPFILE文件中的参数设置内容,如果在PFILE中又定义了与SPFILE相同的参数,则以最后读取的参数配置值为准

[oracle@021Y-SH-BKAP dbs]$ vi initorcl.ora 
SPFILE='/DBBK/oracle/product/11.2.0.1.0/dbs/spfileorcl.ora'
orcl.__db_cache_size=2885681152

你可能感兴趣的:(oracle,spfile)