Oracle中的pfile和spfile详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中的pfile和spfile详解相关的知识,希望对你有一定的参考价值。

参考技术A

  在 i 以前 Oracle 使用pfile 存储初始化参数配置 这些参数在实例启动时被读取 任何

  修改需要重起实例才能生效 使用spfile 您能够使用ALTER SYSTEM 或ALTER SESSION

  来动态修改那些可动态修改的参数 任何更改能够立即生效 您能够选择使更改只应用于当前实

  例还是同时应用到spfile 这就使得任何对spfile 的修改都能够在命令行完成 我们能够完全

  告别手工修改初始化参数文档 这就大大减少了人为错误的发生

  SPFILE 是个二进制文档 能够使用RMAN 进行备份 这样实际上Oracle 把参数文档也

  纳入了备份恢复管理

  除了第一次启动数据库需要PFILE(然后能够根据PFILE 创建SPFILE) 我们能够不再需

  要PFILE ORACLE 强烈推荐使用spfile 应用其新特性来存储和维护初始化参数配置

  一 创建SPFILE

  缺省的 ORACLE 使用PFILE 启动数据库 SPFILE 必须由PFILE 创建 新创建的SPFILE

  在下一次启动数据库时生效 CREATE SPFILE 需要SYSDBA 或SYSOPER 的权限

  语法如下

  CREATE SPFILE[= SPFILE NAME ] FROM PFILE[= PFILE NAME ]

  例

  SQL> create spfile from pfile;

  缺省的 spfile 创建到系统缺省目录

  (Unix: $ORACLE_HOME/dbs; NT: $ORACLE_HOME\\database)

  假如SPFILE 已存在 那么创建会返回以下错误

  SQL> create spfile from pfile;

  create spfile from pfile

  *

  ERROR 位于第 行:

  ORA : 无法创建已由例程使用的SPFILE

  这也能够用来判断当前是否使用了SPFILE 文档

  然而意外的时 Oracle 并没有向其他文档相同 在运行期间保持锁定 让我们作以下试验

  SQL> host rename SPFILEEYGLEN ORA SPFILEEYGLEN ORA BAK

  SQL> alter system set db_cache_size= M scope=both;

  系统已更改

  SQL> host dir * ora

  驱动器E 中的卷是Doc

  卷的序列号是 C EFF

  E:\\Oracle\\Ora iR \\database 的目录

   : PWDeyglen ORA

   个文档 字节

   个目录 可用字节

  SQL> alter system set db_cache_size= M scope=spfile;

  alter system set db_cache_size= M scope=spfile

  *

  ERROR 位于第 行:

  ORA : 无法打开文档

  OSD : 无法打开文档

  O/S Error: (OS ) 系统很难找到指定的文档

  SQL> host rename SPFILEEYGLEN ORA BAK SPFILEEYGLEN ORA

  SQL> alter system set db_cache_size= M scope=spfile;

  系统已更改

  SQL>

  估计Oracle 以后会想办法来锁定这个文档

  二 使用SPFILE

  重新启动数据库 使用startup 命令 Oralce 将会按照以下顺序在缺省目录中搜索参

  数文档

  a spfile$ORACLE_SID ora

  缺省目录UNIX: $ORACLE_HOME/dbs/

  NT: $ORACLE_HOME\\database

  b spfile ora

  缺省目录UNIX: $ORACLE_HOME/dbs/

  NT: $ORACLE_HOME\\database

  c init$ORACLESID ora

  缺省目录UNIX: $ORACLE_HOME/dbs/

  NT: $ORACLE_HOME\\database or

  $ORACLE_HOME\\admin\\db_name\\pfile\\

  创建了spfile 重新启动数据库 Oracle 会按顺序搜索以上目录 spfile 就会自动生效

  三 使用pfile/spfile 启动数据库

  假如您想使用pfile 启动数据库 您能够在启动时指定pfile 或删除spfile

  SQL> startup pfile= E:\\Oracle\\admin\\eyglen\\pfile\\init ora ;

  您不能以同样的方式指定spfile 但是能够创建一个包含spfile 参数的pfile 文档 指向

  spfile

  SPFILE 是个自Oracle i 引入的初始化参数 类似于IFILE 参数 SPFILE 参数用于定

  义非缺省路径的spfile 文档

  您能够在PFILE 链接到SPFILE 文档 同时在PFILE 中定义其他参数 假如参数重复配置

  后读取的参数将取代先前的配置

  PFILE 参数的使用 例如:

  这是我们使用SPFILE 启动的情况

  SQL> startup

  ORACLE 例程已启动

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  数据库装载完毕

  数据库已打开

  SQL> show parameter log_archive_start

  NAME TYPE

  

  VALUE

  

  log_archive_start boolean

  TRUE

  SQL> show parameter spfile

  NAME TYPE

  

  VALUE

  

  spfile string

  %ORACLE_HOME%\\DATABASE\\SPFILE%

  ORACLE_SID% ORA

  SQL>

  我们修改PFILE 文档内容如下

  #Pfile link to SPFILE

  SPFILE= E:\\Oracle\\Ora iR \\database\\SPFILEEYGLEN ORA

  log_archive_start = false

  能够预见这个log_archive_start 参数配置将会代替SPFILE 中的配置

  SQL> startup pfile= e:\\initeyglen ora

  ORACLE 例程已启动

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  数据库装载完毕

  数据库已打开

  SQL> show parameter spfile

  NAME TYPE

  

  VALUE

  

  spfile string

  E:\\Oracle\\Ora iR \\database\\SPF

  ILEEYGLEN ORA

  SQL> show parameter log_archive_start

  NAME TYPE

  

  VALUE

  

  log_archive_start boolean

  FALSE

  然后我们能够使用ALTER SYSTEM 方式将修改固定到SPFILE

  SQL> alter system set log_archive_start=false scope=spfile;

  系统已更改

  所以您也能够通过如上方式在启动时修改初始化参数 比我们在本文最后介绍的导入导

  出方法要简便的多

  四 修改参数

  能够通过ALTER SYSTEM 或导入导出来更改SPFILE 的内容

  ALTER SYSTEM 增加了一个新选项 SCOPE SCOPE 参数有三个可选值

  MEMORY SPFILE BOTH

  MEMORY:只改变当前实例运行

  SPFILE:只改变SPFILE 的配置

  BOTH:改变实例及SPFILE

   SCOPE=MEMORY

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  TRUE

  SQL> ALTER SYSTEM SET timed_statistics=FALSE SCOPE=MEMORY;

  系统已更改

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  FALSE

  SQL> shutdown immediate

  数据库已关闭

  已卸载数据库

  ORACLE 例程已关闭

  SQL> startup

  ORACLE 例程已启动

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  数据库装载完毕

  数据库已打开

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  TRUE

   SCOPE=SPFILE

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  TRUE

  SQL> ALTER SYSTEM SET timed_statistics=FALSE SCOPE=SPFILE;

  系统已更改

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  TRUE

  SQL> shutdown immediate

  数据库已关闭

  已卸载数据库

  ORACLE 例程已关闭

  SQL> startup

  ORACLE 例程已启动

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  数据库装载完毕

  数据库已打开

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  FALSE

  SQL>

   . SCOPE = BOTH

  使用BOTH 选项实际上等同于不带参数的ALTER SYSTEM 语句

  注意 假如修改静态参数 那么需要指定SPFILE 参数 否则将会报错

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  FALSE

  SQL> ALTER SYSTEM SET timed_statistics=TRUE SCOPE=BOTH;

  系统已更改

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  TRUE

  SQL> shutdown immediate

  数据库已关闭

  已卸载数据库

  ORACLE 例程已关闭

  SQL> startup

  ORACLE 例程已启动

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  数据库装载完毕

  数据库已打开

  SQL> show parameter timed_statistics

  NAME TYPE

  

  VALUE

  

  timed_statistics boolean

  TRUE

  SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH;

  ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH

  *

  ERROR 位于第 行:

  ORA : 无法修改指定的初始化参数

  SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=SPFILE;

  系统已更改

   .您也能够在数据库shutdown 时创建和修改spfile 例如

  SQL> show sga

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  SQL> shutdown immediate

  数据库已关闭

  已卸载数据库

  ORACLE 例程已关闭

  SQL> create pfile from spfile;

  文档已创建

  SQL> create spfile from pfile;

  文档已创建

  SQL>

  五 是否使用了spfile

  判断是否使用了SPFILE 能够使用以下方法

   .查询v$parameter 动态视图 假如以下查询返回空值 那么您在使用pfile

  SQL> SELECT name value FROM v$parameter WHERE name= spfile ;

  NAME

  

  VALUE

  

  spfile

  %ORACLE_HOME%\\DATABASE\\SPFILE%ORACLE_SID% ORA

   .或您能够使用SHOW 命令来显示参数配置 假如以下结果value 列返回空值 那

  么说明您在使用pfile:

  SQL> SHOW PARAMETER spfile

  NAME TYPE

  

  VALUE

  

  spfile string

  %ORACLE_HOME%\\DATABASE\\SPFILE%

  ORACLE_SID% ORA

   .查询v$spparameter 视图

  假如以下查询返回 值 表示您在使用pfile 否则表明您使用的是spfile:

  SQL> SELECT COUNT(*) FROM v$spparameter WHERE value IS NOT NULL;

lishixinzhi/Article/program/Oracle/201311/17305

判断ORACLE启动时使用spfile还是pfile

Oracle 9i以后启动的时候默认使用的初始化文件是spfile,我们可以通过如下三种方式来判断是SPFILE还是PFILE方式启动数据库。
1、show parameter spfile
2、show parameter pfile
3、看v$spparameter视图

1、通过查看spfile、pfile视图
用spfile启动数据库:
SQL> show parameter pfile;
NAME                                 TYPE     VALUE
------------------------------------ -------- ------------------------------
spfile                               string   C:\ORACLE\PRODUCT\10.2.0\DB_1\
                                              DATABASE\SPFILEWWL.ORA
SQL> show parameter spfile;
NAME                                 TYPE     VALUE
------------------------------------ -------- ------------------------------
spfile                               string   C:\ORACLE\PRODUCT\10.2.0\DB_1\
                                              DATABASE\SPFILEWWL.ORA
用pfile启动数据库
SQL> startup pfile=c:\initwwl.ora
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size                  2066080 bytes
Variable Size             385878368 bytes
Database Buffers         1207959552 bytes
Redo Buffers               14708736 bytes
Database mounted.
Database opened.
SQL> col type format a8
SQL> show parameter pfile;
NAME                                 TYPE     VALUE
------------------------------------ -------- ------------------------------
spfile                               string
SQL> show parameter spfile;
NAME                                 TYPE     VALUE
------------------------------------ -------- ------------------------------
spfile                               string
SQL> 


我们在这里可以很明显的发现,使用spfile启动数据库,在查看show parameter pfile和show parameter spfile 都能看到spfile参数文件的路径。
反之使用pfile启动的数据库,我们无论是查看show parameter pfile还是show parameter spfile 都无法看到pfile参数文件的路径。

2、通过v$spparameter视图
   使用spfile启动数据库,我们可以看到查询出来的结果是spfile
SQL> select decode(count(*),1,‘spfile‘,‘pfile‘) from v$spparameter where rownum=1 and isspecified = ‘TRUE‘;

DECODE(COUNT
------------
spfile


使用pfile启动数据库,我们可以看到查询出来的结果是pfile。
SQL> select decode(count(*),1,‘spfile‘,‘pfile‘) from v$spparameter where rownum=1 and isspecified =‘TRUE‘;
DECODE(COUNT
------------
pfile




























































以上是关于Oracle中的pfile和spfile详解的主要内容,如果未能解决你的问题,请参考以下文章

10pfile和spfile文件详解

ORACLE的SPFILE与PFILE

数据库参数文件PFILE和SPFILE

Oracle数据库使用pfile启动还是spfile启动---oracle

Oracle基础 07 参数文件 pfile/spfile

关于oracle pfile和spfile文件说明