柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!
全部博文(1669)
分类: Oracle
2011-12-05 16:14:44
spfile 、pfile、db启动顺序
SQL> show parameter db_recovery_file_dest_size;
SQL> show parameter spfile"
spfile 、pfile、db启动顺序
SQL> show parameter db_recovery_file_dest_size;
SQL> show parameter spfile
PFILE和SPFILE定义
PFILE:文本参数文件(TEXT PARAMETER FILE)又叫静态参数文件,ASCII文本文件(可以直接编辑)
SPFILE:服务器参数文件(SERVER PARAMETER FILE)。二进制文件(不可以直接编辑,db启动后通过sql命令在线修改。)
Oracle启动过程中选择参数文件的顺序:
从Oracle9i开始,spfile被引入Oracle数据库,Oracle首选spfile
Oracle在启动过程中,会在特定的路径中寻找参数文件,在Unix/Linux下的路径为$ORACLE_HOME/dbs目录,在WINDOWS上的路径为$ORACLE_HOME/database目录。
关于参数文件的详细说明:
新建一个数据库以后,默认启动文件是/dbs目录下的spfile,,执行create pfile from spfile以后,重启数据库,执行show parameter spfile会显示value为空,说明这时不是以spfile启动的,这时执行create pfile from spfile,会出现错误,因为现在没有使用spfile,这里用命令create spfile frompfile ,再重启数据库,发现启动参数为spfile。在刚安装完oracle以后,spfile和pfile会出 现在/dbs目录下,这时启动参数为spfile,执行create pfiel from spfile 以后,会在/database目录下产生一个pfile,这时重启数据库,会以/database目录下的pfile启动,重启后,执行create spfile from pfile,会在/database下产生一个spfile文件,这时重启数据库会以/database目录下的spfile启动。也就是说oracle会先找/database目录下的spfile和pfile,再找/dbs目录下的spfile和pfile。
2、 存放位置,查询v$parameter视图,方式有两种。
1)SQL> select vp.VALUE from v$parameter vp where vp.NAME = 'spfile';
VALUE
--------------------------------------------------------------------------------
F:/ORACLE/PRODUCT/10.2.0/DB_3/DBS/SPFILEFFTEST.ORA
2)SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/DBS/SPFILEFFTEST.ORA
实际上,以上两种方式是一样的。方式2)是方式1)的封装语句,从告警文件中可以发现,show parameter其实是执行了方式1)的语句。
一般保存位置:
Spfile位置:$/oracle/product/10.2.0/db_1/dbs/spfile
对于Windows其位置是:$ORACLE_HOME/database/spfile
pfile位置:$oracle/oracle/product/10.2.0/admin/
在$ORACLE_BASE/admin/
3、 判断db系统以pfile还是spfile启动?
1) 用show parameter spfile命令,如果Value为空,则表示使用以pfile启动db,未创建spfile。
SQL> show parameter spfile;
SQL> select name, value from v$parameter where name = 'spfile';
--以下是变种方式:
SQL> SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type"
FROM sys.v_$parameter WHERE name = 'spfile';
2) 查询v$spparameter视图。如果isspecified里有true,表明用spfile进行了指定配置。如果全为false,表明用pfile启动。
SQL> Select isspecified, count(*) from v$spparameter group by isspecified;
ISSPECIFIED COUNT(*)
----------- ----------
TRUE 23
FALSE 236
3) 通过create pfile来鉴别,如果当前使用的不是spfile,则相应格式的create pfile会产生错误。
查看是否使用SPFILE,可以在数据库启动后,使用create spfile命令验证。
SQL> create spfile from pfile='d:/asdf.ora';
create spfile from pfile='d:/asdf.ora'
*
ERROR 位于第 1 行:
ORA-32002: 无法创建已由例程使用的 SPFILE
4)
4、 Spfile与pfile相互创建
1) 从pfile创建spfile的方法。
如果以pfile启动,想切换成spfile启动。则重建spfile,然后重启DB即可。
create spfile from pfile;
SQL> create spfile from pfile;
Done
SQL> create spfile from pfile='F:/oracle/product/10.2.0/admin/fftest/pfile/init.ora.215201120126';
Done
SQL> connect fftest/fftest@fftest
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/DATABASE/SPFILEFFTEST.ORA
2) 从spfile创建pfile
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> create spfile from pfile='?/dbs/init
对于pfile,你可以用文本编辑器直接手工编辑一个,也可以使用create pfile命令 从spfile创建,如:CREATE PFILE='C:/PFILE/MYPFILE.ORA' FROM SPFILE='D:/SPFILE/MYSPFILE.ORA',或者从当前实例所使用的spfile创建:create pfile='c:/pfile/mypfile.ora' from spfile。
3)
5、 参数文件的修改方法
1) 分为手动修改和在线修改。
Pfile:手动修改用于修改pfile,直接用文本编辑打开pfile修改。要使用修改生效,须重启数据库。
Spfile:在线修改是在数据库运行时,用alter system命令进行修改,命令如下(详细的命令 语句请参考oracle官方参考文档):
sql>alter system set job_queue_processed=50 scope=MEMORY
注意,scope=MEMORY表示应用范围,取值如下:
SPFILE:修改只对SPFILE有效,不影响当前实例,需要重启数据库才能生效;
MEMORY:修改只对内存有效,即只对当前实例有效,且立即生效,但不会保存到SPFILE, 数据库重启后此配置丢失;
BOTH:顾名思义,包含以上两种,立即生效,且永久生效。
对于ALTER SYSTEM的参数修改命令,请注意以下几点:
第一,如果当前实例使用的是pfile而非spfile,则scope=spfile或scope=both会产生错误;
第二,如果实例以pfile启动,则scope的默认值为MEMORY, 若以spfile启动,则默认值为 BOTH;
第三,可以使用DEFERRED表示所作修改只适用于将来的会话,还可以使用COMMENT写入注 释,如:ALTER SYSTEM SET JOB_QUEUE_PROCESSES=50 SCOPE=BOTH DEFERRED COMMENT=" 注释"
第四,删除参数的方法如下:ALTER SYSTEM SET PARAMETER='';
附:启动顺序、pfile、spfile测试用例:
C:/Documents and Settings/felix>sqlplus fftest/fftest@fftest
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> shutdown immediate;
ORA-01031: 权限不足
SQL> connect fftest/fftest@fftest as sysdba
ERROR:
ORA-01031: insufficient privileges
SQL> connect sys/fftest@fftest as sysdba;
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 167775108 bytes
Database Buffers 436207616 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> show parameter spfile; --此处表明使用的spfile启动
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL> create pfile from spfile; --spfile在OS级别改名后,创建pfile报错
create pfile from spfile
*
第 1 行出现错误:
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 222301060 bytes
Database Buffers 381681664 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> show parameter spfile; --因为database/下的spfile改名,又找不到spfile.ora,只能找到initfftest.ora,而里面内容为spfile ...重定位到dbs/spfile文件
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DBS/SPFILEFFTEST.ORA
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DBS/SPFILEFFTEST.ORA
SQL> create pfile from spfile; --把dbs/下的spfile也改名,创建pfile失败。
create pfile from spfile
*
第 1 行出现错误:
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount; --因为spfile改名,导致db找不到启动文件,不能启动db,报错
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file 'F:/oracle/product/10.2.0/db_3/dbs/spfileff
test.ora'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 176163716 bytes
Database Buffers 427819008 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> show parameter db_recovery_file_dest_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 2G
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL> alter system set db_recovery_file_dest_size=10g scope=both; --spfile更改成功
系统已更改。
SQL> show parameter db_recovery_file_dest_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> create pfile from spfile; --用spfile生成pfile,可以看到pfile内容不再是spfile的重定向内容。
文件已创建。
SQL> show parameter db_recovery_file_dest_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter db_recovery_file_dest_size; --重启db,依然为10g
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup pfile=f:/oracle/product/10.2.0/db_3/database/init.ora.215201120126 --用指定的pfile文件启动
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 167775108 bytes
Database Buffers 436207616 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter db_recovery_file_dest_size; --大小为2G
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 2G
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> create spfile from pfile; ---用pfile生成spfile
文件已创建。
SQL> alter system set db_recovery_file_dest_size=3g scope=both; --pfile启动改参数失败
alter system set db_recovery_file_dest_size=3g scope=both
*
第 1 行出现错误:
ORA-32001: 已请求写入 SPFILE, 但是在启动时未指定 SPFILE
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter spfile; ---重启db,默认还是找database下的spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup pfile=f:/oracle/product/10.2.0/db_3/database/init.ora.215201120126 --手动编辑pfile文件参数后
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 167775108 bytes
Database Buffers 436207616 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 3G
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 184552324 bytes
Database Buffers 419430400 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 10G
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:/ORACLE/PRODUCT/10.2.0/DB_3/
DATABASE/SPFILEFFTEST.ORA
SQL>
#测试end