分类: Oracle
2008-05-07 16:26:11
在Oracle9i中,一个新的文件被引入-spfile,spfile用于服务器端,管理初始化参数。
在9i以前,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 位于第 1 行: ORA-32002: 无法创建已由例程使用的 SPFILE |
这也可以用来判断当前是否使用了SPFILE文件。
然而意外的时,Oracle并没有向其他文件一样,在运行期间保持锁定,让我们作以下试验:
SQL> host rename SPFILEEYGLEN.ORA SPFILEEYGLEN.ORA.BAK SQL> alter system set db_cache_size= 系统已更改。 SQL> host dir *.ora 驱动器 E 中的卷是 Doc 卷的序列号是 E:\Oracle\Ora9iR2\database 的目录 2003-02-10 14:35 2,048 PWDeyglen.ORA 1 个文件 2,048 字节 0 个目录 150,347,776 可用字节 SQL> alter system set db_cache_size= alter system set db_cache_size= * ERROR 位于第 1 行: ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error: (OS 2) 系统找不到指定的文件。 SQL> host rename SPFILEEYGLEN.ORA.BAK SPFILEEYGLEN.ORA SQL> alter system set db_cache_size= 系统已更改。 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是一个自Oracle9i引入的初始化参数,类似于IFILE参数。 SPFILE参数用于定义非缺省路径的spfile文件。
你可以在PFILE链接到SPFILE文件,同时在PFILE中定义其他参数,如果参数重复设置,后读取的参数将取代先前的设置。
PFILE参数的使用,例如:
这是我们使用SPFILE启动的情况,
SQL> startup ORACLE 例程已经启动。 Total System Global Area 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。
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\Ora9iR2\database\SPFILEEYGLEN.ORA' log_archive_start = false |
可以预见这个log_archive_start参数设置将会代替SPFILE中的设置:
SQL> startup pfile='e:\initeyglen.ora' ORACLE 例程已经启动。 Total System Global Area 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。
NAME TYPE VALUE ---------------- ------- --------- ---------------------- spfile string E:\Oracle\Ora9iR2\database\SPFLEEYGLEN.ORA
------------------------------------ -------- ----------- 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
1. 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 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> show parameter timed_statistics NAME TYPE VALUE ------------------------------------ ------- ------------ timed_statistics boolean TRUE |
2. 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 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。
NAME TYPE VALUE ------------------------------------ ------- ------------ timed_statistics boolean FALSE SQL> |
3. 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 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> SHOW parameter timed_statistics NAME TYPE ALUE ------------------------------------ -------- ---------- timed_statistics boolean TRUE SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH; ALTER SYSTEM SET sql_trace=FALSE SCOPE=BOTH * ERROR 位于第 1 行: ORA-02095: 无法修改指定的初始化参数 SQL> ALTER SYSTEM SET sql_trace=FALSE SCOPE=SPFILE; 系统已更改。 |
4.你也可以在数据库shutdown时创建和修改spfile,例如:
SQL> show sga Total System Global Area 135338868 bytes Fixed Size 453492 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes SQL> SHUTDOWN immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> create pfile from spfile; 文件已创建。 SQL> create spfile from pfile; 文件已创建。 SQL> |