前言
对于使用oracle数据库的开发人员而言,oracle数据库的
.ora
文件想必不会陌生,但是对于这个文件具体的作用以及细节可能就不太了解了,本篇文章将对oracle的配置文件进行讲解,希望对各位读者有所帮助。
(一)什么是参数文件
在Oracle 9i之前,参数文件只有一种,它是文本格式的,称为pfile(Parameter File),在9i及以后的版本中,新 增了服务器参数文件,称为spfile(Server Parameter File),它是二进制格式的。这两种参数文件都是用来存储参 数配置以供oracle读取的。两种文件不仅是格式上存在差异,在功能上也存在着不同之处。
PFILE 是一个文本文件,通常以 .ora 为扩展名。它包含一系列的参数设置,每行一个参数,格式为 参数名=值。PFILE 可以直接用文本编辑器(如 Notepad、vi 等)编辑,但所有参数修改都需要重启数据库实例才能生效。
SPFILE是一个二进制文件,其格式由Oracle内部定义,包含参数的名称、值和元数据。直接编辑SPFILE可能会导致文件损坏,从而使数据库无法启动。因此,Oracle建议通过SQL*Plus或其他管理工具来修改SPFILE中的参数。
我们可以简单列个表格来写一下二者的不同点:
PFILE | SPFILE | |
---|---|---|
存储位置 |
$ORACLE_HOME/dbs/init.ora or $ORACLE_HOME/dbs/initorcl.ora
|
$ORACLE_HOME/dbs/spfile.ora or $ORACLE_HOME/dbs/spfileorcl.ora
|
是否支持动态生效 | 否,修改后必须重启 | 否,修改后需要重启。 如果scope为both的话,则不需要重启 |
持久性 | 是 | 是 |
<font style="color:rgba(0, 0, 0, 0.9);">默认行为</font> | startup命令指定PFILE时,优先取PFILE | startup命令未指定PFILE时,优先取SPFILE |
是否支持直接修改 | 支持vi等编辑器直接修改 | 不支持直接修改,但可以通过SQL命令进行修改 |
文件格式 | 普通文本文件 | 二进制文件 |
(二)参数文件的加载顺序原理
oracle实例在启动时,会去读取参数文件中的配置,这个过程是这样的:数据库的startup命令中可以指定以哪个pfile来启动,但是请注意,只能指定pfile,不能指定spfile。当使用不带pfile
子句的startup 命令时,Oracle 将从平台指定的默认位置上的服务器 参数文件(spfile) 中读取初始化参数。Oracle查找spfile或者创通的init.ora的顺序是:
- spfile$ORACLE_SID.ora的文件
- spfile.ora文件
- init$ORACLE_SID.ora文件。
- init.ora
(三)应该如何合理修改SPFILE
文件的内容
SPFILE
文件由于是二进制文件,无法直接用vi等编辑器进行修改,所以最好的修改方式是使用SQL进行修改:例如
alter system set job_queue_processed=50 scope=MEMORY
注意,scope=MEMORY表示应用范围,取值如下:
- SPFILE:修改只对SPFILE有效,不影响当前实例,需要重启数据库才能生效;
- MEMORY:修改只对内存有效,即只对当前实例有效,且立即生效,但不会保存到SPFILE, 数据库重启后此配置丢失;
- BOTH:顾名思义,包含以上两种,立即生效,且永久生效。
(四)SPFILE和PFILE文件的转换(恢复受损的SPFILE
文件)
如果误操作改动了SPFILE
文件,导致文件再也无法被正常加载,数据库实例也无法正常启动。这种情况下我们可以使用ORACLE提供命令来重新生成一份文件。
步骤1:根据SPFILE
文件生成PFILE
文件(若本身存在PFILE
文件最好先备份一下)
这里的文件目录可以手动指定,一般情况下我们会选择放到ORACLE_HOME/dbs
目录下面,文件名的话可以自定义,需要注意要以.ora后缀结尾就行。
CREATE PFILE='/path/to/pfile/init.ora' FROM SPFILE;
步骤2:检查PFILE
文件内容是否正常
步骤3:使用PFILE
文件启动数据库实例
STARTUP PFILE='/path/to/pfile/init.ora';
步骤4:根据PFILE
重新生成SPFILE
文件
CREATE SPFILE FROM PFILE='/path/to/pfile/init.ora';
步骤5:根据SPFILE
文件重启数据库实例
SHUTDOWN IMMEDIATE;
STARTUP;