Oracle 教程 PFile and SPFile
1.参数文件类型
参数文件有两种类型,pfile及spfile。PFILE是文本文件,而SPFILE是二进制格式的。PFILE文件可以用文本编辑器打开、而SPFILE不行,只能通过SQL命令在线修改。PFILE文件为ASCII文本文件,SPFILE为数据文件。
pfile默认名称为“init+实例名.ora”, 文件位置:ORACLE_HOME\dbs
spfile默认名称为“spfile+实例名.ora”, 文件位置:ORACLE_HOME\dbs
1.1.查看pfile文件
[oracle@dg1:/oracle/app/oracle/product/12.2.0.3/dbs]$cat initOTTER.ora
OTTER.__data_transfer_cache_size=0
OTTER.__db_cache_size=553648128
OTTER.__inmemory_ext_roarea=0
OTTER.__inmemory_ext_rwarea=0
OTTER.__java_pool_size=16777216
OTTER.__large_pool_size=16777216
OTTER.__oracle_base='/oracle/app/oracle'#ORACLE_BASE set from environment
OTTER.__pga_aggregate_target=687865856
OTTER.__sga_target=973078528
OTTER.__shared_io_pool_size=50331648
OTTER.__shared_pool_size=318767104
OTTER.__streams_pool_size=0
OTTER.__unified_pga_pool_size=0
*.audit_file_dest='/oracle/app/oracle/admin/OTTER_PR/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/oradata/data/OTTER_PR/control01.ctl','/oradata/data/OTTER_PR/control02.ctl'
*.db_block_size=8192
*.db_file_name_convert=' /oradata/data/OTTER_DR',' /oradata/data/OTTER_PR'
*.db_flashback_retention_target=1440
*.db_name='OTTER'
*.db_recovery_file_dest='/oradata/fra'
*.db_recovery_file_dest_size=4294967296
*.db_unique_name='OTTER_PR'
*.diagnostic_dest='/oracle/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=OTTERXDB)'
*.fal_client='OTTER_PR'
*.fal_server='OTTER_DR'
*.local_listener='LISTENER_OTTER'
*.log_archive_config='DG_CONFIG=(OTTER_PR, OTTER_DR)'
*.log_archive_dest_2='SERVICE=OTTER_DR LGWR ASYNC valid_for=(online_logfile,primary_role) db_unique_name=OTTER_DR'
*.log_archive_dest_state_2='enable'
*.log_archive_max_processes=5
*.log_file_name_convert=' /oradata/data/OTTER_DR',' /oradata/data/OTTER_PR'
*.memory_target=1579m
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.processes=320
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
1.2.查看spfile文件
[oracle@dg1:/oracle/app/oracle/product/12.2.0.3/dbs]$cat spfileOTTER.ora
C"▒? ,▒c6?CC"NrOTTER.__data_transfer_cache_size=0
OTTER.__db_cache_size=553648128
OTTER.__inmemory_ext_roarea=0
OTTER.__inmemory_ext_rwarea=0
OTTER.__java_pool_size=16777216
OTTER.__large_pool_size=16777216
OTTER.__oracle_base='/oracle/app/oracle'#ORACLE_BASE set from environment
OTTER.__pga_aggregate_target=687865856
OTTER.__sga_target=973078528
OTTER.__shared_io_pool_size=50331648
OTTER.__shared_pool_size=318767104
OTTER.__streams_pool_size=0
OTTER.__unified_pga_pool_size=0
*.audit_file_dest='/orCC">^acle/app/oracle/admin/OTTER_PR/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/oradata/data/OTTER_PR/control01.ctl','/oradata/data/OTTER_PR/control02.ctl'
*.db_block_size=8192
*.db_file_name_convert=' /oradata/data/OTTER_DR',' /oradata/data/OTTER_PR'
*.db_flashback_retention_target=1440
*.db_name='OTTER'
*.db_recovery_file_dest='/oradata/fra'
*.db_recovery_file_dest_size=4294967296
*.db_unique_name='OTTER_PR'
*.diagnostic_dest='/oracle/app/oracle'
*.dispatchers='(PRCC"vTOCOL=TCP) (SERVICE=OTTERXDB)'
*.fal_client='OTTER_PR'
*.fal_server='OTTER_DR'
*.local_listener='LISTENER_OTTER'
*.log_archive_config='DG_CONFIG=(OTTER_PR, OTTER_DR)'
*.log_archive_dest_2='SERVICE=OTTER_DR LGWR ASYNC valid_for=(online_logfile,primary_role) db_unique_name=OTTER_DR'
*.log_archive_dest_state_2='enable'
*.log_archive_max_processes=5
*.log_file_name_convert=' /oradata/data/OTTER_DR',' /oradata/data/OTTER_PR'
*.memory_target=1579m
*.nls_language='AMERICAN'
*.nls_territoryCC"='AMERICA'
*.open_cursors=300
*.processes=320
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
CC"EeCC"DeCCKeCC" JeC
1.3.数据库当前使用spfile还是pfile?
判断数据库是通过spfile启动还是通过pfile启动:
方法一:
SQL> select distinct isspecified from v$spparameter;
ISSPEC
------
TRUE
FALSE
第一个值为true代表为spfile启动,为false表示pfile启动;
方法二:
修改系统参数,如果提示无法修改spfile代表为pfile启动
SQL> alter system set processes=400 scope=spfile;
alter system set processes=400 scope=spfile
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE is in use
1.4.参数文件转换
通过spfile创建pfile
SQL> create pfile='/oracle/app/oracle/product/12.2.0.3/dbs/initOTTER.ora' from spfile;
File created.
通过pfile创建spfile
SQL> create spfile='/oracle/app/oracle/product/12.2.0.3/dbs/spfileOTTER.ora' from pfile;
File created.
11g可以在数据库未关闭的情况下,实现spfile的重建
create spfile from memory;
1.5.启动顺序
Oracle启动时,查找顺序为spfile\
pfile是静态文件,修改后不会马上生效,必须重启数据库,重新读取文件才能生效。
spfile是动态文件,是二进制文件,不可以用文本编辑器修改,需要用alter命令修改,指定合适的scope,不需要重启数据库也可以生效。
2.参数解析
2.1.推导参数
推导参数通常来自于其他参数的运算,依赖其他参数得出。例如SESSIONS参数,11g中SESSIONS=(1.5*processes)+22。
2.2.操作系统依赖参数
某些参数取值依赖或者受限于操作系统。例如db_cache_size参数,该值最大值受限于物理内存大小。
2.3.可变参数
可变参数包含绝大多数潜在影响系统性能的可调整参数,某些可变参数设置的是限制条件,如OPEN_CURSORS;有的参数是设置容量,如 DB_CACHE_SIZE 等。这类参数通常可以为 DBA 或最终用户调整,从而产生限制或性能变化,对 Oracle 至关重要。
2.4.废弃参数
随着oracle版本更替,部分老的参数在新版本废弃。如在11gR2中,被废弃的参数有lock_sga_areas,instance_nodeset,spin_count等等参数。
2.5.单实例与全局实例参数
在以上的参数文件中,可以看到参数的格式为“Key-value”配对方式。
例如:
OTTER.__shared_pool_size=318767104
*.db_block_size=8192
OTTER(SID)表示参数应用范围。上面的例子中,OTTER.表示该参数起作用的范围是在OTTER实例中。
*表示参数的应用范围是全局,在所有实例中起作用。
通常的数据库环境都是单实例的。而RAC(Real Application Cluster)是Oracle的数据库集群解决方案。也就是在多台主机上安装多个Oracle实例,对应的数据库却只有一份。
“*”号表示这个参数在整个RAC所有实例中起作用。
3.参数查看和修改
3.1.参数查看
在SQL*PLUS中,通过show parameter命令来查看某些参数的设置值:
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 1584M
sga_min_size big integer 0
sga_target big integer 0
unified_audit_sga_queue_size integer 1048576
也可以通过查询视图v$parameter进行查看参数值设置:
select * from v$parameter;
3.2.查询隐藏参数
Oracle中,以“_”开头的初始化参数通常被称为隐藏参数,这些参数具有某些特殊的功能,这些参数大都是一些描述共享内存SGA、PGA的参数,如large_pool、java_pool的大小。
那么,这些共享内存的参数的含义是什么呢?在Oracle中,数据库内存空间分配,特别是SGA各个子分区的分配一直是一个难题。从Oracle 10g开始,Oracle开始推出了自动管理内存空间各个分区的技术。DBA只需要配置出SGA或者总共Oracle使用数据库的空间target,Oracle会自动根据负载和工作量进行各个分区调节。这样,通常是可以实现内存分布的最优化目标。
在Oracle进行各分区调节的时候,会将当前的空间“_”的参数计入到系统参数文件中。当重新启动Oracle的时候,会首先按照这部分的参数设置来配置实例的内存空间。这样的好处是能够保留下系统经历“千辛万苦”才调节出的参数组合。
获取这些参数需要查询特殊的视图。
col name for a40
col value for a20
col pdesc for a65
SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.KSPPDESC PDESC
FROM SYS.xksppi x, SYS.xksppcv y
WHERE x.indx = y.indx
AND x.ksppinm LIKE '%&par%';
Enter value for par: sga
old 4: AND x.ksppinm LIKE '%&par%'
new 4: AND x.ksppinm LIKE '%sga%'
NAME VALUE PDESC
---------------------------------------- -------------------- -----------------------------------------------------------------
_sga_early_trace 0 sga early trace event
sga_max_size 1660944384 max total SGA size
_touch_sga_pages_during_allocation FALSE touch SGA pages during allocation
_hugetlbfs_mount_point_for_sga HugeTLBFS mount point to be used
pre_page_sga TRUE pre-page sga for process
lock_sga FALSE Lock entire SGA in physical memory
_4031_sga_dump_interval 3600 Dump 4031 SGA heapdump error once for each n-second interval
_4031_sga_max_dumps 10 Maximum number of SGA heapdumps
_ksm_pre_sga_init_notif_delay_secs 0 seconds to delay instance startup at sga initialization (pre)
_ksm_post_sga_init_notif_delay_secs 0 seconds to delay instance startup at sga initialization (post)
_defer_sga_enabled FALSE Enable deferred shared memory allocation for SGA
_defer_sga_min_total_defer_segs_sz 107374182400 Minimum total deferred segs size for defer sga allocation
_defer_sga_alloc_chunk_size 1073741824 Chunk size for defer sga allocation
_defer_sga_min_spsz_at_startup 53687091200 Minimum shared pool size at startup with deferred sga enabled
_defer_sga_test_alloc_intv 0 SA** sleeps for N secs before allocating a deferred segment
_sga_alloc_slaves_term_timeout_secs 120 Termination timeout in secs for SA** slaves
_max_physmem_perc_sga 80 maximum percentage of physical memory for SGA
_sga_heap_chunk_alignment FALSE force SGA heap chunk alignment
_sga_heap_chunk_alignment_disabled FALSE force SGA heap chunks not to be aligned
allow_group_access_to_sga FALSE Allow read access for SGA to users of Oracle owner group
_pga_in_sga_param1 pga in sga param1
_pga_in_sga_param2 pga in sga param2
_pga_in_sga_param3 pga in sga param4
_pga_in_sga_param4 pga in sga param4
_pga_in_sga_param5 pga in sga param4
sga_min_size 0 Minimum, guaranteed size of PDB's SGA
__sga_current_size 0 Current size for PDB SGA
_lm_rcvinst_sga_threshold 85 recovery buddy SGA threshold
_lm_dynamic_sga_target dynamically adjust for changes in SGA size
_gcs_dynamic_sga FALSE if TRUE, enable dynamic cache fusion resources in runtime
sga_target 0 Target size of SGA
__sga_target 973078528 Actual size of SGA
_sga_shrink_allow FALSE Allow SGA shrink operation
_sga_grow_batch_size 2147483648 Dynamic SGA grow batch size
_memory_nocancel_defsgareq FALSE do not cancel deferred sga reqs with auto-memory
_memory_imm_mode_without_autosga TRUE Allow immediate mode without sga/memory target
_memory_initial_sga_split_perc 60 Initial default sga target percentage with memory target
_memory_broker_sga_shrink_chunked TRUE if TRUE, break a large sga shrink request to chunks
_memory_broker_sga_shrink_chunk_size 20 if kmgsbshnkbrk set, sga request resize chunk size in granules.
_memory_broker_sga_grow_split TRUE if TRUE, allow sga grow to be split between cache and sp
_memory_broker_sga_grow_splitif_size 20 split sga target grow if atleast this many granules.
_sga_clear_dump FALSE Allow dumping encrypted blocks in clear for debugging
_max_fsu_sgapcent 10 Percentage of shared pool for Fast Space Usage
_inmemory_suppress_vsga_ima FALSE Suppress inmemory area in v$sga
unified_audit_sga_queue_size 1048576 Size of Unified audit SGA Queue
_parallel_blackbox_sga TRUE true if blackbox will be allocated in SGA, false if PGA
_kewm_trace_sga FALSE Enable/Disable Metrics SGA Allocation Tracing
_test_offload_pdb_sga_init FALSE Test offload of PDB SGA creation
48 rows selected.
3.3.修改参数
通过 ALTER SYSTEM 或者导入导出来更改 SPFILE 的内容。从 Oracle9i 开始,ALTER SYSTEM 命令增加了一个新的选项:SCOPE。
SCOPE 参数有三个可选值
- MEMORY 只改变当前实例运行,重新启动数据库后失效
- SPFILE 只改变 SPFILE 的设置,不改变当前实例运行,重新启动数据库后生效
- BOTH 同时改变实例及 SPFILE,当前更改立即生效,重新启动数据库后仍然有效。
alter sysetm/session set parametername=values scope=memory|spfile|both;
判断参数修改方式:
SQL> select name,isses_modifiable,issys_modifiable from v$parameter where name like '%recovery%';
NAME ISSES ISSYS_MOD
---------------------------------------- ----- ---------
db_recovery_file_dest FALSE IMMEDIATE
db_recovery_file_dest_size FALSE IMMEDIATE
recovery_parallelism FALSE IMMEDIATE
remote_recovery_file_dest FALSE IMMEDIATE
SQL> select distinct issys_modifiable from v$parameter;
ISSYS_MOD
---------
IMMEDIATE
DEFERRED
FALSE
- IMMEDIATE scope=memory 动态参数 alter system set parametername=values 既修改到内存,也修改到spfile参数文件
- DEFERRED 会话参数alter session
- FALSE 静态参数,不能直接修改到内存 alter system set parametername=values scope=spfile
4.参数示例
4.1.数据库块datablock大小
*.db_block_size=8192 默认为8k。
- 表空间数据文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实际需要,设置为 4K、8K、16K、32K、64K等几种大小,ORACLE的物理文件最大只允许4194304个数据块(由操作系统决定),表空间数据文件的最大值为 4194304×DB_BLOCK_SIZE/1024M。
- DB_BLOCK_SIZE作为数据库的最小操作单位,是在创建数据库的时候指定的,在创建完数据库之后便不可修改。要修改DB_BLOCK_SIZE,需要重建数据库。一般可以将数据EXP出来,然后重建数据库,指定新的DB_BLOCK_SIZE,然后再将数据IMP进数据库。
- DB_BLOCK_SIZE一般设置为操作系统块的倍数,即2K,4K,8K,16K或32K,但它的大小一般受数据库用途的影响。对于联机事务,其特点是事务量大,但每个事务处理的数据量小,所以DB_BLOCK_SIZE设置小点就足够了,一般为4K或者8K,设置太大话一次读出的数据有部分是没用的,会拖慢数据库的读写时间,同时增加无必要的IO操作。而对于数据仓库和ERP方面的应用,每个事务处理的数据量很大,所以DB_BLOCK_SIZE一般设置得比较大,一般为8K,16K或者32K,此时如果DB_BLOCK_SIZE小的话,那么I/O自然就多,消耗太大。
- 大一点的DB_BLOCK_SIZE对索引的性能有一定的提高。因为DB_BLOCK_SIZE比较大的话,一个DB_BLOCK一次能够索引的行数就比较多。
- 对于行比较大的话,比如一个DB_BLOCK放不下一行,数据库在读取数据的时候就需要进行行链接,从而影响读取性能。此时DB_BLOCK_SIZE大一点的话就可以避免这种情况的发生。
在oracle11g中引进了bigfile表空间,他充分利用了64位CPU的寻址能力,使oracle可以管理的数据文件总量达到8EB。单个数据文件的大小达到128TB,即使默认8K的db_block_size也达到了32TB。
使用bigfile表空间,它只能支持一个数据文件。也就是说这个文件的最大大小就是表空间最大大小,不可以通过增加数据文件来扩大该表空间的大小。
4.2. control_files控制文件配置目录
控制文件包括了数据库参数和当前状态信息。参数文件加载之后,Oracle启动mount、open阶段需要读取控制文件内容。control_files定义当前系统的控制文件位置和名称。如:
*.control_files=’/oradata/data/OTTER_PR/control01.ctl’,’/oradata/data/OTTER_PR/control02.ctl’
控制文件极其重要,如果意外损坏或者误删除影响重大。所以,通常会采用冗余备份的方法保存。同时在使用RMAN等备份方法时,也存在专门针对控制文件的备份方法。
4.3.audit_审计信息
数据库审计是Oracle提供的一个可选组件功能。
*.audit_file_dest=’/oracle/app/oracle/admin/OTTER_PR/adump’
*.audit_trail=’db’
表示数据库审计信息策略(Database)和审计文件存放的位置。
4.4. 恢复文件位置和大小
设置存放恢复文件,如Archivelog Files和一些备份信息的物理位置。这个位置存放大小可以通过dest_size参数设置。
*.db_recovery_file_dest=’/oradata/fra’
*.db_recovery_file_dest_size=4294967296
4.5.OMF创建参数
Oracle推出了OMF技术(Oracle Managed File),实现各类型文件的自动化管理。用户不需要设置文件名称,在创建文件的时候,会自动在设置的目录上建立文件。
*.db_create_file_dest=’/u01/oradata’
参数db_create_file_dest为数据文件创建的目录。在建立表空间的时候,只需要指定表空间名称,不需要指定数据文件名称。Oracle会自动的在db_create_file_dest目录下建立相关名称数据文件。
4.6.共享连接模式
Oracle两种连接方式:共享模式和独占模式。在通常情况下,两种模式是可以并存的。一般默认的连接是独占dedicate模式,此时允许一些服务是使用共享连接模式。通常Oracle在安装的时候是有XML数据库服务的,这些在设置中是使用共享连接模式。
*.dispatchers='(PRCC”vTOCOL=TCP) (SERVICE=OTTERXDB)’
*.shared_servers=2
参数dispatcher和shared_servers分别是共享连接模式的设置参数。Dispatcher设置共享连接支持的服务名称和连接协议。Shared_server表示共享连接池中默认存放的数据库连接数量。
4.7.进程数和开启游标数
*.open_cursors=300
*.processes=320
processes参数表示Oracle实例能够同时支持的服务进程Server Process个数。如果实际连接超过Process参数数值,Oracle会拒绝新连接或者强制断开不活跃连接。
open_cursors是表示一个session会话中可以开启的最大游标数量。
4.8.数据库名称
*.db_name=’OTTER’
*.db_unique_name=’OTTER_PR’
5.总结
参数文件中包括了数据库系统中一些最基本的参数内容,是启动过程中一个不可缺少的环节。以上示例的参数,并不是每个都是必需的。
其中,db_block_size、control_files、processes和undo_management都是称为basic参数。如果这些参数不设置,就会影响到Oracle的正常启动,启动过程会报错。其它一些Advanced参数Oracle都有默认值可以供使用。