oracle的参数文件非常之多,但最重要的当属数据库参数文件。而数据库参数文件有pfile和spfile两类。pfile需手动修改,是文本文件;spfile是二进制文件,可动态更改。
之所以会有spfile,原因有:
1)可以杜绝参数文件的繁殖。我们知道,在客户端若要启动数据库,则需要pfile。spfile总是存在于数据库的服务端主机本身,不能置于客户端,从而保证了信息的一致性;
2)spfile可以用alter system命令修改到spfile里面,不需要手动更改。
通常,为了保证简单性,oracle建议,把spfile默认存储。
没有参数文件,就无法启动一个oracle数据库。可见,数据库参数文件还是蛮重要的。我们可以用v$parameter视图来查询参数值,或者show parameter也行哈。个人感觉show
parameter比较好用,因为它可以通配,默认%参数值%;而v$parameter的优点,则可以查出多个字段,比较准确定位我们要的信息。
oracle在nomount阶段的任务就是读取参数文件,在$ORACLE_HOME/dbs下查找,寻找的顺序是spfile<ORACLE_SID>.ora, spfile.ora , init<ORACLE_SID>.ora
接下来我们来谈谈spfile和pfile的几个常见操作。
关于几个spfile的操作如下:
1)转换为spfile:(在nomount状态下操作)
show parameter spfile; --查看是否使用了spfile
create spfile from pfile; --注意使用默认位置存储
startup force; --重新启动
show parameter spfile;
2)设置spfile中的值
alter system set parameter=value <comment='text'> <deferred>
<scope=memory|spfile|both>
<sid='sid|*'>
comment:注释。在v$parameter里面的update_comment字段可查。
deferred:为新建立的会话生效
scope:作用域。
3)取消spfile的设置
alter system reset parameter <scope=memory|spfile|both> sid=<'sid|*'>
这里的sid是必选的。单实例可用默认值sid=‘*’
4)从spfile创建pfile
create pfile=filename from spfile;
5)修正被破坏的spfile
借助告警日志的内容创建pfile,再用create spfile转换一个spfile
我们对于pfile的使用大概有两种:
1)用pfile来启动数据库
startup pfile=‘filename’;
2)用pfile来创建spfile
create spfile from pfile=‘filename’;
下面我们贴一个spfile的全部内容,并大概看一下里面的东西。
以下是spfile的内容,我们大致来看看:
[oracle@localhost dbs]$ strings spfileorcl.ora
orcl.__db_cache_size=176160768
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=54525952
orcl.__streams_pool_size=0
/*********************我是分割线***********/
以上这段是对SGA的分配
/*********************我是分割线***********/
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump' /*告警日志的位置*/
*.compatible='10.2.0.1.0' /*版本*/
*.control_files='/u01/app/oracle/oradata/ORCL/controlfile/o1_mf_7xzsjpnk_.ctl','/u01/app/oracle/flash_recovery_area/ORCL/controlfile/o1_mf_7xzsjq6j_.ctl' /*控制
文件的位置*/
*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'
*.db_block_size=8192 /*数据库默认数据块的大小*/
*.db_create_file_dest='/u01/app/oracle/oradata'
*.db_domain='oracle.com'
*.db_file_multiblock_read_count=16
*.db_name='orcl' /* 数据库名称,数据库启动的最小参数*/
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=81788928
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE' /*口令文件的可选参数*/
.sga_target=243269632
*.undo_management='AUTO' /*undo表空间的管理方式*/
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/orcl/udump' /*跟踪文件的存放位置,比如你设置了alter system set SQL_TRACE=true,那么它的内容的会保存在这里*/