Oracle的pfile和spfile的一点理解和笔记
一、关于pfile
1、pfile是啥呢,pfile的全名就是parameter file,参数文件。
2、pfile是一个可编辑的文本文件,主要内容就是数据库的配置参数,包括内存配置、数据库名、sessions、processes等。
3、Oracle Database 9i之前,Oracle数据库就是通过pfile的配置来启动和初始化数据库的。
4、pfile默认路径(windows):{oracle_home}/database/initSID.ora
5、另外,windows系统的话,在安装目录下的app/admin/{sid}/pfile/init.ora.12345678,这个位置一般会有一个pfile文件。
————————————————
二、关于spfile
1、spfile是Oracle Database 9i才开始出现的。
2、spfile是一个二进制文件,不可直接编辑。
3、spfile的默认路径(windows):{oracle_home}/database/spfileSID.ora
4、spfile之后,数据库默认就是读取spfile的配置启动和初始化参数 ,加载参数到内存中。
5、扩展:我们有时候修改数据库配置参数时,语法一般是:alter system set xxx=abc scope={spfile|memory|both}。如果是spfile的话,就是说参数修改到spfile,那么下次启动数据库就会以修改后的参数初始化实例;如果是memory的话,就是说仅次改内存中的参数,立即生效,但重启数据库就会失效;如果是both,即同时修改两处。
————————————————
三、关于读取配置文件启动数据库
1、Oracle 9i之前,Oracle是通过pfile启动和初始化数据库。在9i之后,默认通过加载spfile来启动和初始化数据库。
2、关于启动的加载配置文件顺序(例如启动orcl数据库):
(1)读取默认spfile:{oracle_home}/database/spfileORCL.ora
(2)默认spfile读取不到,会读取同目录下的spfile.ora文件(有坑)
(3)如果上面2个都读不到,读同目录下pfile:{oracle_home}/database/initORCL.ora
(4)如果上面仨都没有,就报错。
3、如果默认读的spfile和pfile都读不到,可以通过指定pfile的方法启动,如指定D:\app\admin\orcl\pfile\init.ora.10152018183435来启动orcl数据库,命令为startup pfile=pfile文件路径,演示如下:
C:\Users\lihy>set oracle_sid=orcl C:\Users\lihy>sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期一 7月 1 00:36:29 2019 Copyright (c) 1982, 2010, Oracle. All rights reserved. 已连接到空闲例程。 SQL> startup pfile=D:\app\admin\orcl\pfile\init.ora.10152018183435 ORACLE 例程已经启动。 Total System Global Area 1068937216 bytes Fixed Size 2182592 bytes Variable Size 616563264 bytes Database Buffers 444596224 bytes Redo Buffers 5595136 bytes 数据库装载完毕。 数据库已经打开 ————————————————
5、怎么查看数据库是通过spfile启动的还是pfile:在SQL命令窗口,输入show parameter spfile,如果结果显示spfile的文件路径,即为通过spfile启动的,如果没有,就是pfile。如下:
四、pfile和spfile间的相互倒腾
1、只要数据库能启动起来,那么就能生成pfile或者spfile
2、通过spfile的配置生成pfile:
(1)默认路径和文件:SQL> create pfile from spfile;
(2)指定路径和文件:SQL> create pfile=文件全路径 from spfile 文件全路径;
3、通过pfile的配置生成spfile:
(1)默认路径和文件:SQL> create spfile from pfile;
(2)指定路径和文件:SQL> create spfile=文件全路径 from pfile 文件全路径;
4、根据已启动的数据库(配置信息已经加载到内存)直接生成pfile和spfile:
(1)生成pfile:SQL> create pfile from memory;
(2)生成spfile:SQL> create spfile from memory;
5、生成spfile的时候,如果你是读取默认spfile启动的,执行create spfile from memory的时候就会报错“无法创建已由实例使用的 SPFILE”,因为数据库就是读这个文件启动的,所有不能再建一个同样名字的spfile。可以用create spfile=路径 from memory 的方式建一个不同名字的spfile。