基本上每个软件都有一些配置信息;在Windows系统中,很多软件都将这些配置信息写入注册表中;而在Linux系统中,则是在/etc目录下生成一个配置文件。
这些配置文件无非就是记录一些参数值,在软件启动的时候读取这些参数值,对软件进行初始化。同理,对于Oracle来说,也存在着这么个配置文件,里面记录了一些初始化参数,在Oracle启动的时候,会读取这个配置文件中的数据对Oracle进行初始化。这篇文章就对Oracle启动过程中使用到的这个参数文件进行重点讲解与分析。
在《Oracle学习笔记——数据库启动原理》这篇文章中也说到了,Oracle的启动分为三步,在第一步启动实例的时候,需要读取配置文件,决定分配多大的内存,那这个配置文件是“何许人也”呢?
在Oracle中,有两种类型的初始化配置文件,更多的时候,我们把这两种初始化配置文件叫做初始化参数文件。Oracle有许许多多的初始化参数,这些参数用于对整个数据库的资源、用户访问、进程等信息进行控制。而这些初始化参数就保存在这个初始化参数文件中,我们可以进行读取,甚至修改。在Oracle中,这两种类型的初始化参数文件分别是:
这两种初始化参数文件中记录的内容是一模一样的,只是文件格式不一样罢了,PFILE文件就是一个文本文件,而SPFILE则是一个二进制文件。
下面就分别对这两种初始化参数文件进行总结。
PFILE文件和很多的配置文件一样,就是一个简单的文本文件,使用你的文本编辑器就可以打开。可能包含以下信息:
orcl.__db_cache_size=201326592
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='C:\Oracle11g'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=281018368
orcl.__sga_target=528482304
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=310378496
orcl.__streams_pool_size=0
*.audit_file_dest='C:\Oracle11g\admin\orcl\adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
...
这就是PFILE文件中的一些参数信息,以key=value的形式记录。
SPFILE是一个二进制文件,如果直接打开的话,是不可阅读的。在打开数据库的情况下,我们可以运行以下命令检查当前使用的是SPFILE,还是PFILE。
SHOW PARAMETER PFILE;
当以SPFILE文件启动数据库时,则会显示出SPFILE的信息。以此我们就可以得到SPFILE的路径。
初始化参数文件中的参数是为了对数据库的资源,进程,内存等信息进行限制的,避免不了要对这些参数进行修改,以达到最优的性能。
对于PFILE文件,可以直接使用文本编辑器打开,直接编辑,简单明了。但是存在一个问题,在数据库运行时,DBA不能永久修改初始化参数的值。要想永久修改初始化参数的值,DBA需要先关闭数据库,对参数文件PFILE进行修改,然后用修改后的PFILE重新启动数据库。
当使用SPFILE文件时,修改初始化参数的SQL命令为:
-- key表示需要修改的参数名称
-- value表示修改以后的新值
-- COMMENT表示对该字段进行的注释
-- DEFERRED表示指定修改是在下次启动实例时再生效
-- SCOPE表示修改应用的范围
-- MEMORY表示仅仅是内存中,不写入SPFILE;下次实例启动时,修改就被丢弃
-- SPFILE表示写入SPFILE中,但并不立即应用到当前实例中,下次启动实例时再生效
-- BOTH(默认)表示立即生效并且写入SPFILE中
-- SID表示修改应用的实例,如果指定*(默认选项),则是应用到所有实例
ALTER SYSTEM SET =
但是对于SPFILE文件的修改,灵活性则非常的大。
初始化参数文件是一个非常重要的文件,它是DBA经过不断的调优而配置得来的,里面参数的价值千金,所以对于初始化参数的备份是必不可少的。至于备份我就不多说了,无非就是拷贝一份。如果现在我的手头只有PFILE文件,而没有SPFILE文件,那么如何生成一份SPFILE呢?
我们可以通过SQL命令,使用PFILE文件生成SPFILE文件。命令如下:
CREATE SPFILE='<指定生成的SPFILE文件路径>' FROM PFILE='<指定PFILE文件路径>';
如果我的手头只有SPFILE文件,那么我如何生成PFILE文件呢?同理,我们可以使用SPFILE来生成PFILE,命令如下:
-- 从指定SPFILE文件创建PFILE
CREATE PFILE='<指定生成的PFILE文件路径>' FROM SPFILE='<指定SPFILE文件路径>';
-- 从当前实例所使用的SPFILE文件创建PFILE
CREATE PFILE='<指定生成的PFILE文件路径>' FROM SPFILE;
Oracle在启动实例的时候会读取初始化参数文件中的信息,如果我的手头现在有多个初始化参数文件,我想从指定的一个初始化参数文件启动数据库,那么如何从指定的初始化参数文件启动数据库呢?
数据库的STARTUP命令中可以指定从哪个PFILE来启动,但是只能指定PFILE, 不能指定SPFILE文件。
-- 指定SPFILE文件启动,出错
SQL> STARTUP SPFILE='C:\MYSPFILE.ORA';
SP2-0714: 无效的 STARTUP 选项组合
-- 指定PFILE文件启动,正常启动
SQL> STARTUP PFILE='C:\mypfile.ora';
ORACLE 例程已经启动。
Total System Global Area 535662592 bytes
Fixed Size 1375792 bytes
Variable Size 327156176 bytes
Database Buffers 201326592 bytes
Redo Buffers 5804032 bytes
数据库装载完毕。
数据库已经打开。
学习Oracle真的是一个漫长的过程。各种知识点,虽然有些知识学了,实践的机会很少;但是对于理解其它的知识点是非常有帮助的。
2015年5月20日 于呼和浩特。