服务器参数文件---参数文件-----文件

本文介绍了Oracle SPFILE的重要特性,包括其如何解决传统参数文件的问题、如何进行SPFILE与PFILE之间的转换、如何设置及取消SPFILE中的参数值,以及如何在SPFILE损坏的情况下进行修复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在访问和维护实例参数设置方面,SPFILE是Oracle做出的一个重要改变。有了SPFILE,可以消除传统参数文件存在的两个严重问题:
可以杜绝参数文件的繁殖。SPFILE总是存储在数据库服务器上;必须存在于服务器主机本身,不能放在客户机上。对参数设置来说,这样就可以只有一个“信息来源”。
无需在数据库之外使用文本编辑器手动地维护参数文件(实际上,更确切的说法是不能手动地维护)。利用ALTER SYSTEM 命令,完全可以直接将值写入SPFILE。管理员不必再手动地查找和维护所有参数文件。
这个文件的命名约定默认为:
我强烈建议使用默认位置;否则会影响SPFILE的简单性。如果SPFILE在其默认位置,几乎一切都会为你做好。如果将SPFILE移到一个非默认的位置,你就必须告诉 Oracle到哪里去找SPFILE,这又会导致遗留参数文件的一大堆问题卷土重来!
1. 转换为SPFILE
假设有一个数据库,它使用了前面所述的遗留参数文件。转换为SPFILE非常简单;这里使用了 CREATE SPFILE命令。
注意    还可以使用一个“逆”命令从SPFILE创建参数文件(parameter file,PFILE),稍后我们会解释为什么希望这样做。
所以,假设使用一个 init.ora参数文件,而且这个init.ora 参数文件确实在服务器的默认位置上,那么只需发出 CREATE SPFILE命令,并重启服务器实例就行了:
这里使用 SHOW PARAMETER命令显示出原先没有使用SPFILE,但是创建SPFILE并重启实例后,确实使用了这个SPFILE,而且它采用了默认名。
注意    在集群环境中,通过使用Oracle RAC,所有实例共享同一个SPFILE,所以要以一种受控的方式完成这个转换过程(从PFILE转换为SPFILE)。这个SPFILE可以包含所有参数设置,甚至各个实例特有的设置都可以放在这一个SPFILE中 ,但是必须把所有必须的参数文件合并为一个有以下格式的PFILE。
在集群环境中,为了从使用各个PFILE转换为所有实例都共享一个公共的SPFILE,需要把各个PFILE合并为如下一个文件:
也就是说,集群中所有实例共享的参数设置都以*.开头。单个实例特有的参数设置(如 INSTANCE_NUMBER和所用的重做 THREAD)都以实例名(Oracle SID)为前缀。在前面的例子中,
PFILE对应包含两个节点的集群,其中的实例分别为 O10G1和 O10G2。
*.db_name = 'O10G' 这个赋值指示,使用这个SPFILE的所有实例会装载一个名为 O10G的数据库。
O10G1.undo_tablespace='UNDOTBS1'指示,名为 O10G1的实例会使用这个特定的撤销(undo)表空间,等等。
2. 设置SPFILE中的参数值
一旦根据SPFILE启动并运行数据库,下一个问题就是如何设置和修改其中的值。要记住,SPFILE是二进制文件,它们可不能用文本编辑器来编辑。这个问题的答案就是使用 ALTER SYSTEM命令,语法如下(< > 中的部分是可选的,其中的管道符号(|)表示“取候选列表中的一个选项”):
默认情况下, ALTER SYSTEM SET命令会更新当前运行的实例,并且会为你修改SPFILE,这就大大简化了管理;原先使用 init.ora参数文件时,通过 ALTER SYSTEM命令设置参数后,如果忘记更新 init.ora参数文件,或者把init.ora参数文件丢失了,就会产生问题,使用SPFILE则会消除这些问题。
记住这一点,下面来详细分析这个命令中的各个元素:
parameter=value 这个赋值提供了参数名以及参数的新值。例如, pga_aggregate_target = 1024m会把 PGA_AGGREGATE_TARGET参数值设置为1 024 MB(1 GB)。
comment='text'是一个与此参数设置相关的可选注释。这个注释会出现在 V$PARAMETER视图的 UPDATE_COMMENT字段中。如果使用了相应选项允许同时保存对SPFILE的修改,注释会写入SPFILE,而且即便服务器重启也依然保留,所以将来重启数据库时会看到这个注释。
deferred指定系统修改是否只对以后的会话生效(对当前建立的会话无效,包括执行此修改的会话)。默认情况下, ALTER SYSTEM命令会立即生效,但是有些参数不能“立即”修改,只能为新建立的会话修改这些参数。可以使用以下查询来看看哪些参数要求必须使用 deferred:
上面的代码表明, SORT_AREA_SIZE可以在系统级修改,但是必须以延迟方式修改。以下代码显示了有 deferred选项和没有 deferred选项时修改这个参数的值会有什么结果:
SCOPE=MEMORY|SPFILE|BOTH指示了这个参数设置的“作用域”。设置参数值时作用域有以下选择:
SCOPE=MEMORY只在实例中修改;数据库重启后将不再保存。下一次重启数据库时,设置还是修改前的样子。
SCOPE=SPFILE只修改 SPFILE中的值。数据库重启并再次处理SPFILE之前,这个修改不会生效。有些参数只能使用这个选项来修改,例如, processes参数就必须使用 SCOPE=SPFILE,因为我们无法修改活动实例的 processes值。
SCOPE=BOTH 是指,内存和 SPFILE 中都会完成参数修改。这个修改将反映在当前实例中,下一次重启时,这个修改也会生效。 这是使用 SPFILE 时默认的作用域值 。如果使用 init.ora 参数文件,默认值则为 SCOPE=MEMORY ,这也是此时惟一合法的值。
sid='sid|* '主要用于集群环境;默认值为 sid='* '。这样可以为集群中任何给定的实例惟一地指定参数设置。除非你使用Oracle RAC,否则一般不需要指定 sid=设置。
这个命令的典型用法很简单:
或者,更好的做法是,还可以指定 COMMENT= 赋值来说明何时以及为什么执行某个修改:
3. 取消SPFILE中的值设置
下一个问题又来了,“好吧,这样就设置了一个值,但是现在我们又想‘取消这个设置’,换句话说,我们根本不希望SPFILE有这个参数设置,想把它删掉。但是既然不能使用文本编辑器来编辑这个文件,那我们该怎么办呢?”同样地,这也要通过 ALTER SYSTEM命令来完成,但是要使用 RESET子句:
在这里,SCOPE/SID 设置的含义与前面一样,但是 SID=部分不再是可选的。 Oracle SQL Reference手册在介绍这个命令时有点误导,因为从手册来看,好像这只对RAC(集群)数据库有效。实际上,手册中有下面的说明:
alter_system_reset_clause( ALTER SYSTEM命令的 RESET子句)用于“真正应用集群”(RAC)环境。
接下来,它又说:
在非RAC环境中,可以为这个子句指定 SID='* '。
这就有点让人糊涂了。不过,要从SPFILE“删除”参数设置,也就是仍然采用参数原来的默认值,就要使用这个命令。所以,举例来说,如果我们想删除 SORT_AREA_SIZE,以允许使用此前指定的默认值,可以这样做:
这样会从SPFILE中删除 SORT_AREA_SIZE,通过执行以下命令可以验证这一点:
然后可以查看 /tmp/pfile.tst的内容,这个文件将在数据库服务器上生成。可以看到,参数文件中不再有 SORT_AREA_SIZE参数了。
4. 从SPFILE创建PFILE
上一节用到的 CREATE PFILE...FROM SPFILE命令刚好与 CREATE SPFILE相反。这个命令根据二进制SPFILE创建一个纯文本文件,生成的这个文件可以在任何文本编辑器中编辑,并且以后可以用来启动数据库。正常情况下,使用这个命令至少有两个原因:
创建一个“一次性的”参数文件,用于启动数据库来完成维护,其中有一些特殊的设置。所以,可以执行 CREATE PFILE...FROM SPFILE命令,并编辑得到的文本PFILE,修改所需的设置。然后启动数据库,使用 PFILE=<FILENAME>选项指定要使用这个PFILE而不是SPFILE。完成后,可以正常地启动,数据库又会使用SPFILE。
维护修改历史,在注释中记录修改。过去,许多DBA会在参数文件中加大量的注释,来记录修改历史。例如,如果一年内把缓冲区缓存大小修改过20次,在 db_cache_size init.ora参数设置前就会有20条注释,这些注释会指出修改的日期,以及修改的原因。SPFILE不支持这样做,但是如果习惯了以下用法,也可以达到同样的效果:
通过这种方式,修改历史就会在一系列参数文件中长久保存。
5. 修正被破坏的SPFILE
关于SPFILE还有最后一个问题,“SPFILE是二进制文件,如果SPFILE被破坏了,数据库无法启动,那该怎么办?还是 init.ora文件更好一些,至少它是文本文件,我们可以直接编辑和修正”。嗯,这么说吧,SPFILE不会像数据文件、重做日志文件、控制文件等那样被破坏,但是,倘若真的发生了这种情况,还是有几种选择的。
首先,SPFILE中的二进制数据量很小。如果在UNIX平台上,只需一个简单的 strings命令就能提取出所有设置:
Windows 上,则要用 write.exe WordPad ,即写字板)打开这个文件。 WordPad 会显示出文件中的所有文本,只需将其剪切并粘贴到 init<ORACLE_SID>.ora 中,就能创建启动实例的 PFILE
万一SPFILE丢失了(不论是什么原因,反正我没有见过SPFILE消失的情况),还可以从数据库的警告日志恢复参数文件的信息(稍后将介绍警告日志的更多内容)。每次启动数据库时,警告日志都会包含如下一部分内容:
通过这一部分内容,可以很容易地创建一个PFILE,再用 CREATE SPFILE命令将其转换为一个新的SPFILE。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值