Oracle9i新特点-如何修改Spfile的参数
来源:互联网 发布:手机电视剧下载软件 编辑:程序博客网 时间:2024/04/28 08:50
Oracle9i新特点-如何修改Spfile的参数
简介:
本文是关于Oracle9i spfile的一篇文字,这是Oracle9i的一个新特性,虽然是很小的一个改进,但是却体现了Oracle在安全性和可靠性上的一个提高,
通过rman备份或者控制文件的自动备份,Oracle把spfile纳入到整个备份恢复体系当中。
本文对spfile的使用和修改等作了详细描述,对于其备份恢复也给出了相应的例子,希望大家能够从这篇文章中受益,从Oracle的这个新特性中获得收益。
在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; |
这也可以用来判断当前是否使用了SPFILE文件。
然而意外的是,oracle并没有向其他文件一样,在运行期间保持锁定,让我们作以下试验:
SQL> host rename SPFILEEYGLEN.ORA SPFILEEYGLEN.ORA.BAK SQL> alter system set db_cache_size= E:/Oracle/Ora9iR2/database 的目录 2003-02-10 14:35 2,048 PWDeyglen.ORA SQL> alter system set db_cache_size= SQL> host rename SPFILEEYGLEN.ORA.BAK SPFILEEYGLEN.ORA SQL> alter system set db_cache_size= |
估计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 数据库装载完毕。 数据库已经打开。 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/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 数据库装载完毕。 数据库已经打开。 SQL> show parameter spfile NAME TYPE ------------------------------------ ---------------------- VALUE ------------------------------ spfile string E:/Oracle/Ora9iR2/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
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 数据库装载完毕。 数据库已经打开。 SQL> show parameter timed_statistics 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 ------------------------------------ ---------------------- VALUE ------------------------------ 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> |
所以spfile的修改是相当容易的.
五. 是否使用了spfile
判断是否使用了SPFILE,可以使用以下方法:
1.查询v$parameter动态视图,如果以下查询返回空值,那么你在使用pfile.
SQL> SELECT name,value FROM v$parameter WHERE name='spfile'; NAME |
2.或者你可以使用SHOW命令来显示参数设置,如果以下结果value列返回空值,那么说明你在使用pfile:
SQL> SHOW PARAMETER spfile NAME TYPE |
3.查询v$spparameter视图
如果以下查询返回0值,表示你在使用pfile,否则表明你使用的是spfile:
SQL> SELECT COUNT(*) FROM v$spparameter WHERE value IS NOT NULL; COUNT(*) ---------- 32 |
或者使用以下查询,如果true值返回非0值,那么说明我们使用的是spfile.
SQL> select isspecified, count(*) from v$spparameter group ISSPECIFIED COUNT(*) |
更为直接的:
SQL> select decode(count(*), 1, 'spfile', 'pfile' ) USED USED |
六. SPFILE的备份与恢复
在本文开篇我们提到,Oracle把Spfile也纳入到Rman的备份恢复策略当中,如果你配置了控制文件自动备份(autoback),那么Oracle会在数据库发生重大变化(如增减表空间)时自动进行控制文件及Spfile文件的备份。
下面我们来看一下这个过程:
a. 设置控制文件自动备份:
[oracle@jumper oracle]$ rman target / Recovery Manager: Release Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. connected to target database: HSJF (DBID=1052178311) RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON; using target database controlfile instead of recovery catalog RMAN> exit |
这个设置可以在数据库中通过如下方式查询得到:
[oracle@jumper bdump]$ sqlplus "/ as sysdba" SQL*Plus: Release Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: SQL> select * from v$rman_configuration; |
b. 记录数据库变化
SQL> create tablespace eygle Tablespace created. |
如果新创建一个表空间,这时候检查alert<sid>.log文件,你可以在其中发现这样的备份信息:
Sat Jan 17 00:55:57 2004 |
如果使用rman进行备份,在提示中你可以看到如下信息:
RMAN> configure controlfile autobackup on; old RMAN configuration parameters: RMAN> run allocated channel: ch1 Starting backup at 02-DEC-03 Starting Control File and SPFILE Autobackup at 02-DEC-03 released channel: ch1 |
我们简单看一下自动备份的控制文件及spfile文件的格式及命名规则:
c-IIIIIIIIII-YYYYMMDD-QQ
c ------------------------控制文件
IIIIIIIIII---------DBID
YYYYMMDD------------时间戳
QQ----------------------序号00-FF,16进制表示
c. 使用自动备份恢复spfile文件
[oracle@jumper bdump]$ rman target / Recovery Manager: Release Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. connected to target database: HSJF (DBID=1052178311) RMAN> restore spfile to '/tmp/spfileeygle.ora' from autobackup; Starting restore at 17-JAN-04 using target database controlfile instead of recovery catalog RMAN> exit Recovery Manager complete. |
你同样可以通过这种方法恢复控制文件,示例如下:
[oracle@jumper bdump]$ rman target / Recovery Manager: Release Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. connected to target database: HSJF (DBID=1052178311) RMAN> restore controlfile to '/tmp/control01.ctl' from autobackup; Starting restore at 17-JAN-04 using target database controlfile instead of recovery catalog RMAN> exit Recovery Manager complete. |
Oracle9i自动备份控制文件的功能给我们带来了极大的收益,通过自动备份,在数据库出现紧急状况的时候,你可能可以从这个自动备份中获得更
为有效及时的控制文件.
缺省的,这个自动备份功能是关闭的,你可以用我们上面提到的方法打开该功能.
七. 设置Events事件
Events事件是Oracle的重要诊断工具及问题解决办法,很多时候需要通过Events设置来屏蔽或者更改Oracle的行为,下面我们来看一下怎样修改spfile,增加Events事件设置:
SQL> alter system set event='10841 trace name context forever' scope=spfile; System altered. SQL> startup force; Total System Global Area 101782380 bytes NAME TYPE VALUE |
顺便提一句,10841事件是用于解决Oracle9i中JDBC Thin Driver问题的一个方法,如果你的alert.log文件中出现以下错误提示:
Wed Jan 7 17:17:08 2004 |
那么,很不幸,你很可能是遇到了bug: 1725012
通过设置以上事件,可以屏蔽和解决这个ORA-00600错误.
具体你可以参考Metalink相关文档。
八. 导出SPFILE文件
SPFILE文件可以导出为文本文件,使用导出、创建过程你可以向SPFILE中添加参数。
SQL> create pfile='e:/initeyglen.ora' from spfile; 文件已创建。 SQL> shutdown immediate |
Initeyglen.ora文件的内容
*.aq_tm_processes=1
*.background_dump_dest='e:/oracle/admin/eyglen/bdump'
*.compatible='
*.control_files='e:/oracle/oradata/eyglen/control01.ctl',
'e:/oracle/oradata/eyglen/control02.ctl',
'e:/oracle/oradata/eyglen/control03.ctl'
*.core_dump_dest='e:/oracle/admin/eyglen/cdump'
*.db_block_size=8192
*.db_cache_size=25165824
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='eyglen'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=eyglenXDB)'
*.fast_start_mttr_target=300
*.hash_join_enabled=TRUE
*.instance_name='eyglen'
*.java_pool_size=33554432
*.job_queue_processes=10
*.large_pool_size=8388608
*.open_cursors=300
*.pga_aggregate_target=25165824
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_pool_size=50331648
*.sort_area_size=524288
*.sql_trace=FALSE
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='e:/oracle/admin/eyglen/udump'
然后我们可以使用这个pfile,或者手动修改其中的参数以启动数据库。
我们修改这个pfile,增加一行
*.log_archive_start=true
使用这个PFILE启动数据库
SQL> startup pfile='e:/initeyglen.ora' Total System Global Area 135338868 bytes NAME TYPE |
然后我们可以使用新的PFILE创建SPFILE
SQL> create spfile from pfile='e:/initeyglen.ora'; 文件已创建。 |
重新启动数据库,新的SPFILE生效。
SQL> startup Total System Global Area 135338868 bytes NAME TYPE NAME TYPE |
九. 关于920的PFILE
在$ORACLE_BASE/admin/db_name/spfile下,你很可能可以看到一个类似这样[init.ora.192003215317]名字的文件,这就是初始化
参数文件,只是跟上了时间戳。
对于Oracle920,缺省的就使用spfile启动,但是这个spfile不是凭空而来,而是根据这个文件创建而来,你可以去掉这个长后缀,就是标准的
pfile文件了。
如果手动创建数据库,可以看到以下的过程:
SQL> create spfile='e:/oracle/ora FROM pfile='E:/oracle/admin/sunny/scripts/init.ora'; |
文件已创建。
如果你想要使用pfile启动数据库,那么你可以把spfile改名,NT缺省位于$ORACLE_HOME/database下,这样Oracle就不会使用这个spfile了 。
你使用create pfile from spfile命令创建的pfile,也应该在这个目录下
以下是一个完整的例子:
E:/Oracle/Ora9iR2/database 的目录 2003-02-26 10:49 1,028 INITeyglen.ORA E:/Oracle/Ora9iR2/database>sqlplus /nolog SQL*Plus: Release Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect / as sysdba Total System Global Area 135338868 bytes NAME TYPE SQL> host dir *.ora E:/Oracle/Ora9iR2/database 的目录 2003-02-26 10:49 1,028 INITeyglen.ORA SQL> startup Total System Global Area 135338868 bytes NAME TYPE SQL> SQL> shutdown immediate Total System Global Area 135338868 bytes NAME TYPE |
Oracle诊断案例-Spfile案例一则
情况说明:
系统:SUN Solaris8
数据库版本:9203
问题描述:工程人员报告,数据库在重新启动时无法正常启动.检查发现UNDO表空间丢失.
问题诊断及解决过程如下:
1. 登陆系统检查alert.log文件
检查alert.log文件是通常是我们诊断数据库问题的第一步
SunOS 5.8 login: root "alert_gzhs.log" 7438 lines, 283262 characters ............. |
在警报日志末尾显示了数据库在Open状态因为错误而异常终止.
2. 尝试重新启动数据库
bash-2.03$ sqlplus "/ as sysdba"SQL*Plus: Release Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 已连接到空闲例程。 SQL> startup Total System Global Area 4364148184 bytes ............. |
工程人员报告的问题重现.
3. 检查数据文件
bash-2.03$ cd /u01/ oradata/gzhs |
发现存在文件UNDOTBS2.dbf
4. mount数据库,检查系统参数
bash-2.03$ sqlplus "/ as sysdba" SQL*Plus: Release SQL> SQL> show parameter spfile |
发现系统没有使用spfile,而初始化参数设置的undo表空间为UNDOTBS1
5. 检查参数文件
发现设置的UNDO表空间正是UNDOTBS1
undo_management=AUTO |
这个设置是极其可疑的.
怀疑参数文件和实际数据库设置不符.
6. 再次检查alert文件
查找对于UNDO表空间的操作
第一部分,创建数据库时的信息:
Sat Feb 7 20:30:12 2004 |
注意,这也是OCP教材上提到的两种创建UNDO表空间的方式之一
第二部分,发现创建UNDOTBS2的记录信息:
Wed Mar 24 20:20:58 2004 Successfully onlined Undo Tablespace 15. |
第三部分,新的UNDO表空间被应用
Wed Mar 24 20:24:25 2004
ALTER SYSTEM SET undo_tablespace='UNDOTBS2' SCOPE=MEMORY;
我们发现问题就在这里,创建了新的UNDO表空间以后,因为使用的是pfile文件,修改的只对当前实例生效,操作人员忘记了修改pfile文件.
如果使用spfile,缺省的修改范围是both,会同时修改spfile文件,就可以避免以上问题的出现.
第四部分,删除了UNDOTBS1的信息
Wed Mar 24 20:25:01 2004 |
这样再次重新启动数据库的时候,问题出现了,pfile中定义的UNDOTBS1找不到了,而且操作实在很久以前,没人能回忆起来,甚至无法得知是什么人的操作。
7. 更改pfile,启动数据库
修改undo表空间
########################################### .... bash-2.03$ sqlplus "/ as sysdba" SQL*Plus: Release Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> select * from v$version; BANNER SQL> exit |
在这里我们可以看到,使用spfile可以免去手工修改pfile文件的麻烦,减少了犯错的可能。
既然Oracle9i给我们提供了这个新特性,就值得我们学习使用它.
- Oracle9i新特点-如何修改Spfile的参数
- Oracle9i新特点-SPFILE的使用
- Oracle9i新特点:SPFILE的使用
- Oracle9i新特点:SPFILE的使用--How to set events with spfile and etc
- 如何修改Spfile的参数
- 9i新特点:SPFILE的使用
- 9i新特点:SPFILE的使用
- RAC 修改 spfile 参数
- RAC 修改 spfile 参数
- RAC 修改 spfile 参数
- RAC 修改 spfile 参数
- RAC 修改 spfile 参数
- RAC 修改 spfile 参数
- 如何删除spfile中指定的参数
- 在Oracle关闭的状态下,如何修改参数文件spfile
- oracle spfile pfile 参数修改
- 参数文件spfile的修改以及数据库的启动关闭
- 对Spfile之参数错误修改之后的解决办法(FAQ)
- は和が总结
- C#学习6——集合
- photoshop无法启动更新解决办法
- 九个寓言故事揭示泡妞成功秘技
- Hibernate代码生成模板
- Oracle9i新特点-如何修改Spfile的参数
- FCKeditor2.6在asp.net中的配置
- 动态可订制属性的 PropertyGrid
- LabVIEW操作小诀窍(一)
- 【MM】框架协议(Outline Agreement)
- JMF 播放器同步代码
- 常用正则表达式
- 《放羊的星星》经典台词
- 详细讲解Oracle 11g的基本安装