2009年2月1日星期日

参数及参数文件

在oracle数据库中,有一系列的初始化参数用来进行数据库约束和资源限制,这些参数通常存储在一个参数文件中,在数据库实例启动时读取并加载。
一、初始化参数的分类
按照得出方式不同,初始化参数可以分为3类:推导参数、操作系统依赖参数和可变参数。
1、推导参数(Derived Parameters)
推导参数通常来自于其他参数的运算,依赖其他参数得出。所以这类参数通常不需要修改。如果强制修改,那么修改值会覆盖推导值。
2、操作系统依赖参数
某些参数的有效值或者取值范围依赖或者受限于操作系统。如db_cache_size参数,设置oracle使用的内存大小,该参数的最大值就要受限于物理内存。这一类参数通常被称为操作系统依赖参数。
3、可变参数
可变参数通常可以调整,有些设置的是限制条件,如OPEN_CURSORS;有的参数是设置容量,如DB_CACHE_SIZE等。这类参数通常可以为DBA或最终用户调整,从而产生限制或性能变化。
初始化参数通常还有一些其他分类方式:
按照修改方式划分,初始化参数又可以分为静态参数和动态参数。静态参数只能在参数文件中修改,在重新启动后才能生效;动态参数可以动态调整,调整后通常可以立即生效。
按照获取方式不同,初始化参数又可以分为显式参数和隐含参数:
显式参数可以通过v$parameter查询得到;而隐含参数通常以"_"开头,必须通过查询系统表才能获得这些参数(不建议修改隐含参数)。
二、参数文件
参数文件是一个包含一系列参数及参数对应值的操作系统文件,它有以下两种类型:
初始化参数文件(Initialization Parameters Files):oracle 9i之前oracle一直采用pfile方式存储初始化参数,该文件为文本文件。
服务器参数文件(Server Parameter Files):从oracle 9i开始,oracle引入了spfile文件,该文件为二进制格式。
在9i以前,oracle使用pfile存储初始化参数设置,参数文件的修改需要手工进行,这些参数在实例启动时被读取,通过pfile的修改需要重起实例才能生效;从9i开始,oracle引入spfile文件,使用spfile,用户可以通过ALTER SYSTEM或者ALTER SESSION来修改参数,而不再需要通过手工修改。对于动态参数,所有更改可以立即生效,同时用户可以选择更改只应用于当前实例还是同时应用到spfile。对于静态参数,只能将变更应用到spfile文件,这些变更在数据库重启后生效。
所有对spfile的修改都可以通过命令行完成。(oracle备份恢复体系)
1、pfile和spfile
第一次启动数据库时需要pfile,然后可以根据pfile创建spfile,此后用户可以不再需要pfile。
注:当使用DBCA自定义创建数据库时,在最后一个步骤,可以选择“生成数据库创建脚本”,通过这个脚本,可以研究oracle是怎样创建的数据库,也可以通过脚本执行,按步骤手工创建数据库。
2、spfile的创建
从9i开始,缺省情况下,oracle使用spfile启动数据库。其实spfile必须由pfile创建,新创建的spfile在下一次启动数据库时生效。
CREATE SPFILE需要SYSDBA或者SYSOPER权限,具体语法如下:
CRESTE SPFILE[='SPFILE-NAME'] FROM PFILE[='PFILE-NAME']
缺省情况下,spfile创建到以下系统缺省目录。
对于unix,目录为$oracle_home/dbs
对于NT,目录为$oracle_home\database
如果spfile已经存在,那么创建会返回错误:ORA-32002:无法创建已由例程使用的SPFILE。可以通过这个来判断当前是否使用了spfile文件。
随着spfile的引入,oracle同时引入了一个视图用以记录spfile的参数设置信息,这个视图是v$spparameter。
注:运行期间,spfile并不锁定,所以spfile可能会意外丢失,如果发生类似情况,oracle会不允许使用create spfile from pfile缺省命令来重建spfile(因为ORA-32002错误而失败),通常可以创建一个自定义名称的spfile文件,然后重命名为缺省名称即可。
3、spfile的搜索顺序
使用startup命令重新启动数据库,oracle会按照以下顺序在缺省目录中搜索参数文件。
(1)spfile$oracle_sid.ora,其缺省目录如下:
unix:$oracle_home/dbs/
NT:%oracle_home%\database
(2)spfile.ora,其缺省目录如下:
unix:$oracle_home/dbs/
NT:%oracle_home%\database
(3)init$oracle_sid.ora,其缺省目录如下:
unix:$oracle_home/dbs/
NT:%oracle_home%\database
创建了spfile,重新启动数据库,oracle会按顺序搜索以上目录,spfile就会自动生效。
注:可以修改默认目录。
4、使用pfile/spfile启动数据库
如果想使用pfile启动数据库,则可以在启动时指定pfile或者删除spfile:
SQL>startup pfile="E:\oracle\admin\test\pfile\init.ora";
不能以同样的方式指定spfile,但是可以创建一个包含spfile参数的pfile文件,将spfile参数的值指向spfile。spfile是一个自oracle 9i引入的初始化参数,类似IFILE参数。spfile参数用于定义非缺省路径的spfile文件。
可以在pfile连接到spfile文件,同时在pfile中定义其他参数,如果参数重复设置,后读取的参数将取代先前的设置。
在RAC(real application clusters 真正应用集群)系统中经常使用,由于在RAC中,用户通常需要把spfile存储在共享磁盘上,所以常规的做法就是通过定义pfile文件,在pfile文件中对spfile文件进行重定向。
注:通过在pfile中调用spfile,使用后设置的参数覆盖spfile中的参数设置,是解决spfile中参数设置错误的一种方法。
5、修改参数
可以通过alter system或者导入导出来更改spfile的内容。
从oracle9i开始,alter system命令增加了一个新的选项scope。scope参数有3个可选值:memory、spfile和both。
memory:只改变当前实例运行,重新启动数据库后失败。
spfile:只该改变spfile的设置,不改变当前实例运行,重新启动数据库后生效。
both:同时改变实例及spfile,当前更改立即生效,重新启动数据库后仍然有效。
针对RAC环境,alter system还可以指定SID参数,对不同实例进行不同设置。
完整命令:
alter system set = scope = memory spfile both [sid=]
注:对于静态参数,只能指定scope=spfile进行修改。通过scope=spfile修改的参数,虽然对当前实例无效,但是其参数值可以从v$spparameter视图中查询得到。
注:不带scope参数和scope=both实际上是等价的。如果修改静态参数,那么需要指定spfile参数,不能指定both参数,否则数据库将会报错。
在RAC环境中,如果不指定SID名称,或者指定为“*”,那么修改缺省的对所有实例都生效。
注:在RAC环境中,不同实例的undo_tablespace设置是不同的,当修改一个实例的undo表空间时,一定要注意指定相应的实例,以避免修改错误。
如果不慎错误地修改了参数导致数据库无法启动,我们可以通过spfile创建pfile文件,然后修改pfile中的参数(将错误修改的参数再改正回来),再由pfile创建spfile的方式解决,最后由spfile正常启动数据库。
注:由于spfile是一个二进制文件,所以不能通过手工方式修改,手工修改会导致spfile损坏,使得该spfile不能启动数据库。
6、重置spfile中设置的参数
恢复某个参数为缺省值:
alter system parameter sid='sid*'
注:该命令通常用于RAC环境中,在单实例环境中,需要指定sid='*',reset一个参数,oracle将从spfile文件中删除该参数。
7、导出spfile文件
spfile文件可以导出为文本文件,可以使用导出、创建过程可以向spfile中添加参数。
create pfilei='e:\test.ora' from spfile;
注:对于单机数据库,导出的文件中,每个参数以一个"*"开头,这意味着该参数可以影响所有的实例;而对于并行环境(RAC),可以看到不同实例的参数设置可以不同,这时可以用实例名称来替换"*"。
生成了pfile之后,可以使用这个pfile,或者手动修改其中的参数以启动数据库(用修改后的pfile生成spfile,然后启动数据库)。

没有评论:

发表评论