oracle 参数文件 pfile/spfile ---详解

oracle有三种状态:

(1)nomount

(2)mount

(3)open

在数据库启动的时候,首先读取的是参数文件,然后是控制文件最后在挂载打开数据库文件。

我们首先了解一下什么是参数文件:

(一)遗留的init.orawe文件

遗留的init.ora文件时一个结构相当简单的文件,这是一系列可变的键/值对,以下是一个init.ora文件示例:

所在默认目录:

[oracle@felix dbs]$ pwd

$ORACLE_HOME/dbs

[oracle@felix dbs]$ cat init.ora  | grep -v '#'

 

db_name='ORCL'

memory_target=1G

processes = 150

audit_file_dest='/admin/orcl/adump'

audit_trail ='db'

db_block_size=8192

db_domain=''

db_recovery_file_dest='/flash_recovery_area'

db_recovery_file_dest_size=2G

diagnostic_dest=''

dispatchers='(PROTOCOL=TCP)(SERVICE=ORCLXDB)'

open_cursors=300

remote_login_passwordfile='EXCLUSIVE'

undo_tablespace='UNDOTBS1'

control_files = (ora_control1,ora_control2)

compatible ='11.2.0'

 

而现在主要用的是服务器参数文件:spfile文件

spfile文件时oracle做出的一个重大改变,有了spfile可以消除传统文件存在的两个问题:

(1)杜绝参数文件的繁殖。spfile文件总是存储在数据库服务器上,必须位于服务器主机本身,不能放在客户机上,对于参数文件设置来说,这样就可以只有一个”信息来源“。

(2)无需再数据库之外使用文本编辑器手动的维护参数文件(实际上,更确切的说法是不能手动的维护)。利用ALTER SYSTEM 命令,完全可以直接将值写入spfile。管理员不必再手动的查找和维护所有参数文件。

spfile文件是一个二进制文件,不能直接用vi编辑。

1.转化spfile即转成pfile(pfile是一个文本文件,可以直接用vi打开和编辑)

01:34:07 sys@felix SQL>show parameterspfile

 

 

NAME                                 TYPE                   VALUE

---------------------------------------------------------- ------------------------------

spfile                               string                 /u01/app/oracle/product/11.2.0

                                                            /db_1/dbs/spfilefelix.ora

 

为了更容易读取和可视化要求,可以将spfile文件进行转化:

01:49:37 sys@felix SQL>create pfile fromspfile;

 

 

File created.

 

默认创建目录在:$ORACLE_HOME/dbs下,名称为pfile.ora

查看pfile文件内容:

[oracle@felix dbs]$ cat  initfelix.ora

felix.__db_cache_size=92274688

felix.__java_pool_size=4194304

felix.__large_pool_size=4194304

felix.__oracle_base='/u01/app/oracle'#ORACLE_BASEset from environment

felix.__pga_aggregate_target=146800640

felix.__sga_target=272629760

felix.__shared_io_pool_size=0

felix.__shared_pool_size=159383552

felix.__streams_pool_size=4194304

*.audit_file_dest='/u01/app/oracle/admin/felix/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='/u01/app/oracle/oradata/felix/control01.ctl','/u01/app/oracle/fast_recovery_area/felix/control02.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_name='felix'

*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'

*.db_recovery_file_dest_size=4322230272

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP)(SERVICE=felixXDB)'

*.memory_target=417333248

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

 

(二)如何设置spfile文件的值:

 

使用alter system命令,语法如下:(<>中的部分是可选的,其中(|)便是“取候选列表中的一个选项”)

Alter system set parameter=value

;

Context:设置与此参数相关的可选注释

Deferred:制定系统修改是否支对以后的会话生效。

 

可以使用以下查询来查看哪些参数要求必须使用deferred:

sys@felix SQL>select name fromv$parameter where issys_modifiable='DEFERRED';

 

NAME

----------------------------------------

backup_tape_io_slaves

recyclebin

audit_file_dest

object_cache_optimal_size

object_cache_max_size_percent

sort_area_size

sort_area_retained_size

olap_page_pool_size

 

8 rows selected.

 

 

Scope=memery:只在实例中修改,数据库重启之后将不再保存

Scope=spfile只修改spfile中的值。数据库重启并再次处理spfile之前,这个修改不会生效。有些参数

Scope=both:表示在内存和spfile中都会完成参数修改

 

(三)取消spfile中的值得设置

Alter system reset parameter scope=sid=’sid|*’;

所以举例来说,如果我们想删除sort_area_size,以允许使用此前指定的默认值,可以这样做

 

Alter system reset sort_area_sizescope=spfile;

 

注意:在之前的版本中(在10g R2以及更早的版本中),与现在的做法不同SID=子句不是可选的,在那些版本中,必须在alter system命令的最后加上SID=’*’,为spfile中的所有实例重置参数,或者要对单个实例指定SID=’some_sid’来完成设置;

 

(四)spfile损坏修正

之前有可以重建pfile文件,spfile文件也可建:命令如下:

Create spfile from pfile=’$ORACLE_HOME/dbs/init’;

 

现在我们遇到spfile文件丢失了,怎么办??

我们可以从alter告警日志里找到spfile文件信息,

 

告警文件目录:

$ORACLE_BASE/diag/rdbms/felix/felix/trace

 

会有如下信息:

Using parameter settings in client-sidepfile /u01/app/oracle/admin/felix/pfile/init.ora on machine felix

System parameters with non-default values:

 processes                = 150

 memory_target            = 400M

 control_files            ="/u01/app/oracle/oradata/felix/control01.ctl"

 control_files            ="/u01/app/oracle/fast_recovery_area/felix/control02.ctl"

 db_block_size            = 8192

 compatible               = "11.2.0.0.0"

 db_recovery_file_dest    ="/u01/app/oracle/fast_recovery_area"

 db_recovery_file_dest_size= 4122M

 undo_tablespace          ="UNDOTBS1"

 remote_login_passwordfile= "EXCLUSIVE"

 db_domain                =""

 dispatchers              = "(PROTOCOL=TCP)(SERVICE=felixXDB)"

 audit_file_dest          ="/u01/app/oracle/admin/felix/adump"

 audit_trail              ="DB"

 db_name                  ="felix"

 open_cursors             = 300

 diagnostic_dest          ="/u01/app/oracle"

 

然后把一下信息创建成pfile文件,再转化成spfile文件

 

你可能感兴趣的:(Oracle,系列)