DB-hub Technology Oracle 教程 PFile and SPFile

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\.ora–>spfile.ora–>init\.ora。
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都有默认值可以供使用。