pfile VS spfile
oracle 实例的启动需要用到初始化参数文件,oracle software 根据初始化参数文件的定义来
构造内存结构和后台进程。初始化参数可以存储在pfile 或者 spfile 中。oracle 9i 以后才有
spfile,oracle 9i 以前的数据库使用的都是pfile。
使用spfile 的好处:
1、可以使用rman 来备份spfile,rman 不支持备份pfile。
2、减少人为错误,spfile 是由oracle 数据库维护的,在对其中的参数做修改的时候oracle 数据库会做检查。
3、使用方便,如果你想远程启动数据库,不像pfile 需要本地的初始化参数文件副本。
4、查找定位方便。
pfile 与 spfile 的不同点:
1、pfile 是静态的如果需要修改可以使用vi 等文字编辑工具手动修改。如果需要远程启动数据库,需要pfile 的本地副本。
2、spfile 可以通过alter system set 命名动态的修改初始化参数的值,如果手动的修改spfile 将会导致文件损坏,实例不能启动。
确定oracle实例是由那种类型的初始化参数文件启动的。
SQL> select value from V$parameter where name = 'spfile';
VALUE
--------------------------------------------------------------------------------
/opt/app/oracle/product/11.2.0/dbhome_1/dbs/spfileorcl.ora
SQL> select decode(value,null,'pfile','spfile')
2 from V$parameter
3 where name = 'spfile';
DECODE
------
spfile
查看初始化参数文件(pfile and spfile)的内容:
1、使用show parameter
SQL> show parameter sga_max_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 552M
2、查询V$parameter 或者V$parameter2 视图获得当前作用于oracle 实例的
初始化参数。
select name,value from V$parameter
order by name;
3、查询V$spparameter 获得spfile 中的初始化参数信息。
方式2和方式3查询到的结果可能不相同,因为实例启动以后DBA对初始化参数进行了修改,这些修改只在实例运行期间有效没有同步到spfile 中。
oracle实例启动中查找初始化参数文件的顺序:
1、spfile.ora
2、spfile.ora
3、init.ora
查找到其中一个就会忽略其他后续的初始化参数文件。
[oracle@ora-lover dbs]$ pwd
/opt/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@ora-lover dbs]$ ll *.ora
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r-----. 1 oracle oinstall 2560 Jul 17 10:24 spfileorcl.ora
并不一定上述的3个初始化参数文件都存在的。
现在oracle 数据库默认是使用spfile 来启动实例的,如果想要使用pfile来启动数据库可以使用如下类似的命令:
startup pfile =‘/path/to/init.ora’
如果要使用存放在非默认位置的spfile 来启动数据库实例,可以使用下面的方式。
修改初始化参数文件的内容:
pfile 可以使用文本编辑器修改,spfile 可以通过alter system set 命令修改。
使用alter system set 命令修改spfile 中的初始化参数的时候,需要注意范围。
scope 的取值有:
memory:修改的参数只在本次实例运行期间有效,实例重启以后失效。
spfile :修改持久化到spfile中,下次启动实例的时候生效。
both :参数的修改对本次实例的运行有效,并且持久化到spfile 中。
当没有指定scope 的时候,如果实例是使用pfile 启动的那么默认的scope 方式是memory。如果实例是使用spfile 启动的默认的scope 方式是both。
pfile 与 spfile 之间的相互转化:
[oracle@ora-lover dbs]$ pwd
/opt/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@ora-lover dbs]$ ll *.ora
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r-----. 1 oracle oinstall 2560 Jul 17 10:24 spfileorcl.ora
SQL> create pfile from spfile;
File created.
SQL> host
[oracle@ora-lover dbs]$ ll *.ora
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r--r--. 1 oracle oinstall 937 Jul 17 22:24 initorcl.ora--新创建的pfile。
-rw-r-----. 1 oracle oinstall 2560 Jul 17 10:24 spfileorcl.ora
如果当前实例是使用spfile 启动的那么是不可以使用下面的命令来创建spfile 的。
SQL> create spfile from pfile;
create spfile from pfile
*
ERROR at line 1:
ORA-32002: cannot create SPFILE already being used by the instance
但你可以使用指定不同于默认路径的方式来创建spfile。
SQL> create spfile = '/opt/app/oracle/oradata/orcl/spfile.ora' from pfile;
File created.
如果在pfile 和 spfile 的相互转化过程中需要的话pfile 也是可以指定路径的。
create pfile 与create spfile 只要实例启动以后就可以执行。
备份spfile :
rman 提供了备份spfile 的功能.
RMAN> backup spfile;--显示的发出备份spfile 的命令。
开启spfile 的自动备份功能。
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored
设置了上述参数以后rman 在执行backup 命令的时候会自动的备份控制文件和参数文件(前提是实例是使用spfile启动的)。
注:初始化参数文件中至少要包含一个参数:DB_NAME 该参数是没有默认值的。如果要删除spfiel 中的某个参数使用alter system reset parameter = values...
删除的参数在下次实例运行期间生效。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-735882/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26110315/viewspace-735882/