初始化参数文件
- 实例启动时Oracle将读入初始化参数文件的每个参数项,并使用这些参数来配置Oracle实例。
- Oracle数据库中有两种参数:
显式:在初始化参数文件中有一个参数项。
隐式:在初始化参数文件中没有参数项,但使用Oracle的默认值 。 - 在一个Oracle数据库中可以有多个初始化参数文件共存,但每次Oracle实例启动时只能读取(使用)一个初始化参数文件。
- 初始化参数文件中参数项何时变化起作用取决于所使用的文件类型。
- 两种不同类型的文件:
静态参数文件(PFILE):该文件为文本文件,文件名通常为 init.ora 。
动态服务器参数文件(SPFILE):该文件为二进制文件,文件名通常为 spfile.ora 。
Oracle 8i和以前的版本只能使用静态参数文件。
Oracle 9i及以后的版本中可以使用这两种类型的参数文件。 - 参数文件的内容包括:
实例名和该实例相关的数据库名
控制文件名和位置
系统全局区的配置
还原段(回滚段)的配置
该实例所能同时启动的进程数
标准数据块的大小
是否允许DBA远程登录
--查看当前实例是用哪种参数文件启动的
SELECT isspecified, COUNT(*)
FROM v$spparameter
GROUP BY isspecified;
--如果isspecified里有true,表明用spfile进行了指定配置;如果全为false,则表明用pfile启动。
--查看当前实例是用哪种参数文件启动的。
show parameter spfile
--如果value有值,那么数据库就是在spfile下启动的,而pfile启动的数据库,其value值是空的。
静态参数文件
- 静态参数文件可以使用文本编辑器进行修改。
- Oracle只在实例启动时读取该文件,因此所做的修改要在实例下次启动时才起作用。
- 在Oracle 11g中默认使用SPFILE启动数据库,此时PFILE存在,但只是一个模板信息,是不可用的,必须创建一个可用的PFILE才可以使用PFILE启动数据库。
- Oracle Universal Installer(Oracle通用安装程序)在安装时会创建一个PFILE的样本文件init.ora,默认存储在$ORACLE_BASE\admin<SID>\pfile下。
- 可以使用操作系统的复制命令通过样本文件产生所需的参数文件init.ora,如:initOrcl.ora。
- 由于样本文件已经很老了,即使修改了可能启动时也会出错,因此,通常根据SPFILE创建PFILE。
PFILE示例
动态参数文件
- 该文件是一个二进制文件,存储在数据库服务器上,默认存储在$ORACLE_HOME\database下。
- 该文件由Oracle服务器自动维护,无法使用文本编辑器修改,但可以使用ALTER SYSTEM语句在不关闭和启动数据库的情况下改变实例或数据库的配置。
- 它提供了自我调优的能力,可以使用恢复管理器(RMAN)备份这一参数文件。
创建参数文件
- 因为SPFILE是二进制文件,无法直接修改文件,所以通常通过SPFILE创建一个PFILE,然后修改PFILE中的参数值,最后再从PFILE创建SPFILE。
--根据SPFILE创建PFILE的语法:
CREATE PFILE[=PFILE名] FROM SPFILE[=SPFILE名];
--根据PFILE创建SPFILE的语法:
CREATE SPFILE[=SPFILE名] FROM PFILE[=PFILE名];
--通过默认的SPFILE文件创建一个默认的PFILE文件。
CREATE PFILE FROM SPFILE;
--必须具有SYSDBA权限才能创建参数文件
--通过默认的PFILE文件创建一个默认的SPFILE文件。
CREATE SPFILE FROM PFILE;
--注意:无法创建已由实例使用的 SPFILE。
修改SPFILE中的参数
--修改参数值的语法:
ALTER SYSTEM SET 参数名 = 值
[SCOPE={SPFILE|MEMORY|BOTH}];
--SCOPE=SPFILE:修改只对SPFILE有效,不影响当前实例,需要重启数据库才能生效;
--SCOPE=MEMORY:修改只对内存有效,即只对当前实例有效,且立即生效,但不会保存到SPFILE,重启数据库后无效;
--SCOPE=BOTH:立即生效,且永久生效。
- 注意事项:
如果当前实例以PFILE启动,则SCOPE的默认值为MEMORY。
如果当前实例以SPFILE启动,则SCOPE的默认值为BOTH。
如果当前实例使用的是PFILE而非SPFILE,则SCOPE=SPFILE 或 SCOPE=BOTH 会产生错误。
查看SPFILE中的参数
- 使用SQL *Plus命令查看参数值
--查看所有参数
SHOW PARAMETER
--查看参数instance_name的值
SHOW PARAMETER instance_name
- 使用v$parameter视图查看参数值
--查看所有参数
SELECT name, type, value
from v$parameter;
--查看参数instance_name的值
select name, type, value
from v$parameter
where name = 'instance_name';