04、Oracle 教程 - Oracle 的参数文件(Parameter files)

参数文件记录了 Oracle 数据库的基本参数信息,包括数据库名、控制文件所在路径等。参数文件也是 Oracle 数据库较为重要的一种文件结构。

一、参数文件的分类

(1)spfile(Server Parameter File):服务器参数文件,文件格式为二进制格式,不能使用文本编辑器修改,可以使用 alter system 命令修改文件中的参数值,可以使用 strings 命令查看其内容。spfile 参数文件的默认名称为:spfile<ORACLE_SID>.ora,文件路径为:$ORACLE_HOME/dbs。
(2)pfile(Initialization Parameters File): 初始化参数文件,文件格式为文本格式,可以使用文本编辑器修改其中的参数内容。pfile 默认的名称为:init<ORACLE_SID>.ora,文件路径为:$ORACLE_HOME/dbs。
(3)Oracle 实例启动时查找参数文件的顺序:Oracle 首先在默认目录中查找名为 spfile<$ORACLE_SID>.ora的文件,如果没有则查找spfile.ora 文件,如果还没有,继续查找 init<$ORACLE_SID>.ora 文件。

Oracle 数据库根据 SPFILE 或 PFILE 中设置的参数来配置数据库的启动。Oracle 实例在启动时,会去读取参数文件中的配置:数据库的 startup 命令中可以指定以哪个 pfile 来启动(startup 命令只能指定 pfile,不 能指定 spfile)。如果使用不带 pfile 子句的 startup 命令,Oracle 将从默认位置的 spfile 文件中读取初始化参数。

查看启动实例时所使用的参数文件:

SQL> SELECT INST_ID,NAME,VALUE FROM GV$PARAMETER WHERE NAME LIKE '%pfile%';
   INST_ID NAME 			  VALUE
---------- ------------------------------ --------------------------------------------------
	 2 spfile			  +DATA/orcl/spfileorcl.ora
	 1 spfile			  +DATA/orcl/spfileorcl.ora
	 
SQL> show parameter pfile
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
spfile				     string	 +DATA/orcl/spfileorcl.ora
-- 可以看出 oracle 启动实例时使用的是 spfile 参数文件

二、Oracle 参数的分类

根据参数的生效时间,Oracle 参数可以分为两类:静态参数和动态参数。
动态参数:可以在数据库运行时修改参数值并且立即生效的参数。
静态参数:内存中的当前值不能被修改,只能在参数文件中修改,且数据库必须要重启才能生效的参数。

Oracle 在视图 V$PARAMETER 中提供了一个列 ISSYS_MODIFIABLE,如果该列的值为 IMMEDIATE 代表该参数为动态参数,且修改后立即生效;如果该列的值为 DEFERRED 代表该参数为动态参数,但参数值修改后不会立即生效,只有在新连接的会话中生效;如果该列的值为 FALSE 代表该参数为静态参数。

三、查看 Oracle 参数

查询Oracle 参数的方法如下:

1、使用 show parameters 命令

该命令可以查询当前会话生效的参数。

SQL>  show parameter name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
cell_offloadgroup_name		     string
db_file_name_convert		     string
db_name 			             string	 	orcl
db_unique_name			         string	 	orcl
global_names			         boolean	FALSE
instance_name			         string	 	orcl2
lock_name_space 		         string
log_file_name_convert		     string
processor_group_name		     string
service_names			         string	 	orcl

2、使用 show spparameters 命令

该命令可以查询当前会话生效的 spfile 参数,参数的取值来源于 spfile 参数文件。

SQL> show spparameter name

SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
*	 cell_offloadgroup_name        string
*	 db_file_name_convert	       string
*	 db_name		               string	   orcl
*	 db_unique_name 	           string	   orcl
*	 global_names		           boolean
*	 instance_name		           string
*	 lock_name_space	           string
*	 log_file_name_convert	       string
*	 processor_group_name	       string
*	 service_names		           string

3、使用 create pfile 命令

此方法可以将 spfile 或当前内存中设置的参数保存到 pfile 文件中,pfile 文件是文本文件,可以直接打开进行查看。这种方法列出的参数都是用户设置的参数,不包括默认值参数。

-- 将 spfile 参数文件中设置的参数保存到 pfile 文件 aaa.ora 中
SQL> create pfile = '/home/oracle/aaa.ora' from spfile;
File created.

-- 将当前内存中设置的参数保存到 pfile 文件 bbb.ora 中
SQL> create pfile = '/home/oracle/bbb.ora' from memory;
File created.

文件aaa.ora 的内容如下:

[oracle@rac1 ~]$ cat aaa.ora 
orcl2.__db_cache_size=289406976
orcl1.__db_cache_size=306184192
orcl1.__java_pool_size=4194304
orcl2.__java_pool_size=4194304
orcl1.__large_pool_size=8388608
orcl2.__large_pool_size=8388608
orcl1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl1.__pga_aggregate_target=293601280
orcl2.__pga_aggregate_target=335544320
orcl1.__sga_target=545259520
orcl2.__sga_target=503316480
orcl1.__shared_io_pool_size=0
orcl2.__shared_io_pool_size=0
orcl2.__shared_pool_size=192937984
orcl1.__shared_pool_size=218103808
orcl1.__streams_pool_size=0
orcl2.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.control_files='+DATA/orcl/controlfile/current.260.1070471991','+BAK/orcl/controlfile/current.256.1070471991'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='+BAK'
*.db_recovery_file_dest_size=4621074432
*.db_unique_name='orcl'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
orcl2.instance_number=2
orcl1.instance_number=1
*.memory_target=838860800
*.open_cursors=600
test1.open_cursors=500
orcl1.open_cursors=200
orcl2.open_cursors=400
*.processes=150
*.remote_listener='rac-scan:1521'
*.remote_login_passwordfile='exclusive'
orcl2.thread=2
orcl1.thread=1
orcl2.undo_tablespace='UNDOTBS2'
orcl1.undo_tablespace='UNDOTBS1'

文件bbb.ora 的内容如下:

[oracle@rac1 ~]$ cat bbb.ora 
# Oracle init.ora parameter file generated by instance orcl1 on 08/02/2021 03:48:20
orcl1.__db_cache_size=292M
orcl2.__db_cache_size=276M
*.__java_pool_size=4M
*.__large_pool_size=8M
*.__oracle_base='/u01/app/oracle' ORACLE_BASE set from environment
orcl1.__pga_aggregate_target=280M
orcl2.__pga_aggregate_target=320M
orcl1.__sga_target=520M
orcl2.__sga_target=480M
*.__shared_io_pool_size=0
orcl1.__shared_pool_size=208M
orcl2.__shared_pool_size=184M
*.__streams_pool_size=0
*._aggregation_optimization_settings=0
*._always_anti_join='CHOOSE'
*._always_semi_join='CHOOSE'
*._and_pruning_enabled=TRUE
*._b_tree_bitmap_plans=TRUE
*._bloom_filter_enabled=TRUE
*._bloom_folding_enabled=TRUE
*._bloom_pruning_enabled=TRUE
*._complex_view_merging=TRUE
*._compression_compatibility='11.2.0.4.0'
*._connect_by_use_union_all='TRUE'
*._convert_set_to_join=FALSE
*._cost_equality_semi_join=TRUE
*._cpu_to_io=0
*._dimension_skip_null=TRUE
*._eliminate_common_subexpr=TRUE
*._enable_type_dep_selectivity=TRUE
*._fast_full_scan_enabled=TRUE
*._first_k_rows_dynamic_proration=TRUE
*._gby_hash_aggregation_enabled=TRUE
*._generalized_pruning_enabled=TRUE
*._globalindex_pnum_filter_enabled=TRUE
*._gs_anti_semi_join_allowed=TRUE
*._improved_outerjoin_card=TRUE
*._improved_row_length_enabled=TRUE
*._index_join_enabled=TRUE
*._ksb_restart_policy_times='0'
*._ksb_restart_policy_times='60'
*._ksb_restart_policy_times='120'
*._ksb_restart_policy_times='240' internal update to set default
*._left_nested_loops_random=TRUE
*._local_communication_costing_enabled=TRUE
*._minimal_stats_aggregation=TRUE
*._mmv_query_rewrite_enabled=TRUE
*._new_initial_join_orders=TRUE
*._new_sort_cost_estimate=TRUE
*._nlj_batching_enabled=1
*._optim_adjust_for_part_skews=TRUE
*._optim_enhance_nnull_detection=TRUE
*._optim_new_default_join_sel=TRUE
*._optim_peek_user_binds=TRUE
*._optimizer_adaptive_cursor_sharing=TRUE
*._optimizer_better_inlist_costing='ALL'
*._optimizer_cbqt_no_size_restriction=TRUE
*._optimizer_coalesce_subqueries=TRUE
*._optimizer_complex_pred_selectivity=TRUE
*._optimizer_compute_index_stats=TRUE
*._optimizer_connect_by_combine_sw=TRUE
*._optimizer_connect_by_cost_based=TRUE
*._optimizer_connect_by_elim_dups=TRUE
*._optimizer_correct_sq_selectivity=TRUE
*._optimizer_cost_based_transformation='LINEAR'
*._optimizer_cost_hjsmj_multimatch=TRUE
*._optimizer_cost_model='CHOOSE'
*._optimizer_dim_subq_join_sel=TRUE
*._optimizer_distinct_agg_transform=TRUE
*._optimizer_distinct_elimination=TRUE
*._optimizer_distinct_placement=TRUE
*._optimizer_eliminate_filtering_join=TRUE
*._optimizer_enable_density_improvements=TRUE
*._optimizer_enable_extended_stats=TRUE
*._optimizer_enable_table_lookup_by_nl=TRUE
*._optimizer_enhanced_filter_push=TRUE
*._optimizer_extend_jppd_view_types=TRUE
*._optimizer_extended_cursor_sharing='UDO'
*._optimizer_extended_cursor_sharing_rel='SIMPLE'
*._optimizer_extended_stats_usage_control=192
*._optimizer_false_filter_pred_pullup=TRUE
*._optimizer_fast_access_pred_analysis=TRUE
*._optimizer_fast_pred_transitivity=TRUE
*._optimizer_filter_pred_pullup=TRUE
*._optimizer_fkr_index_cost_bias=10
*._optimizer_full_outer_join_to_outer=TRUE
*._optimizer_group_by_placement=TRUE
*._optimizer_improve_selectivity=TRUE
*._optimizer_interleave_jppd=TRUE
*._optimizer_join_elimination_enabled=TRUE
*._optimizer_join_factorization=TRUE
*._optimizer_join_order_control=3
*._optimizer_join_sel_sanity_check=TRUE
*._optimizer_max_permutations=2000
*._optimizer_mode_force=TRUE
*._optimizer_multi_level_push_pred=TRUE
*._optimizer_native_full_outer_join='FORCE'
*._optimizer_new_join_card_computation=TRUE
*._optimizer_null_aware_antijoin=TRUE
*._optimizer_or_expansion='DEPTH'
*._optimizer_order_by_elimination_enabled=TRUE
*._optimizer_outer_join_to_inner=TRUE
*._optimizer_outer_to_anti_enabled=TRUE
*._optimizer_push_down_distinct=0
*._optimizer_push_pred_cost_based=TRUE
*._optimizer_rownum_bind_default=10
*._optimizer_rownum_pred_based_fkr=TRUE
*._optimizer_skip_scan_enabled=TRUE
*._optimizer_sortmerge_join_inequality=TRUE
*._optimizer_squ_bottomup=TRUE
*._optimizer_star_tran_in_with_clause=TRUE
*._optimizer_system_stats_usage=TRUE
*._optimizer_table_expansion=TRUE
*._optimizer_transitivity_retain=TRUE
*._optimizer_try_st_before_jppd=TRUE
*._optimizer_undo_cost_change='11.2.0.4'
*._optimizer_unnest_corr_set_subq=TRUE
*._optimizer_unnest_disjunctive_subq=TRUE
*._optimizer_use_cbqt_star_transformation=TRUE
*._optimizer_use_feedback=TRUE
*._or_expand_nvl_predicate=TRUE
*._ordered_nested_loop=TRUE
*._parallel_broadcast_enabled=TRUE
*._partition_view_enabled=TRUE
*._pivot_implementation_method='CHOOSE'
*._pre_rewrite_push_pred=TRUE
*._pred_move_around=TRUE
*._push_join_predicate=TRUE
*._push_join_union_view=TRUE
*._push_join_union_view2=TRUE
*._px_minus_intersect=TRUE
*._px_partition_scan_enabled=TRUE
*._px_pwg_enabled=TRUE
*._px_ual_serial_input=TRUE
*._query_rewrite_setopgrw_enable=TRUE
*._remove_aggr_subquery=TRUE
*._replace_virtual_columns=TRUE
*._resource_manager_plan=''
*._right_outer_hash_enable=TRUE
*._selfjoin_mv_duplicates=TRUE
*._sql_model_unfold_forloops='RUN_TIME'
*._sqltune_category_parsed='DEFAULT' parsed sqltune_category
*._subquery_pruning_enabled=TRUE
*._subquery_pruning_mv_enabled=FALSE
*._table_scan_cost_plus_one=TRUE
*._union_rewrite_for_gs='YES_GSET_MVS'
*._unnest_subquery=TRUE
*._use_column_stats_for_function=TRUE
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='DB'
orcl1.background_dump_dest='/u01/app/oracle/diag/rdbms/orcl/orcl1/trace'Deprecate parameter
orcl2.background_dump_dest='/u01/app/oracle/diag/rdbms/orcl/orcl2/trace'Deprecate parameter
*.cluster_database=TRUE
*.compatible='11.2.0.4.0'
*.control_files='+DATA/orcl/controlfile/current.260.1070471991'
*.control_files='+BAK/orcl/controlfile/current.256.1070471991'
orcl1.core_dump_dest='/u01/app/oracle/diag/rdbms/orcl/orcl1/cdump'
orcl2.core_dump_dest='/u01/app/oracle/diag/rdbms/orcl/orcl2/cdump'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='+BAK'
*.db_recovery_file_dest_size=4407M
*.db_unique_name='orcl'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
orcl1.instance_number=1
orcl2.instance_number=2
orcl1.local_listener=' (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.101)(PORT=1521))'
orcl2.local_listener=' (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.102)(PORT=1521))'
*.log_buffer=2199552 log buffer update
*.memory_target=800M
orcl1.open_cursors=200
orcl2.open_cursors=400
*.optimizer_dynamic_sampling=2
*.optimizer_mode='ALL_ROWS'
*.plsql_warnings='DISABLE:ALL' PL/SQL warnings at init.ora
*.processes=150
*.query_rewrite_enabled='TRUE'
*.remote_listener='rac-scan:1521'
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_manager_plan=''
*.result_cache_max_size=2M
*.skip_unusable_indexes=TRUE
orcl1.thread=1
orcl2.thread=2
orcl1.undo_tablespace='UNDOTBS1'
orcl2.undo_tablespace='UNDOTBS2'
orcl1.user_dump_dest='/u01/app/oracle/diag/rdbms/orcl/orcl1/trace'Deprecate parameter
orcl2.user_dump_dest='/u01/app/oracle/diag/rdbms/orcl/orcl2/trace'Deprecate parameter

4、查看 v$parameter 视图

vpa r a m e t e r 视 图 提 供 了 当 前 会 话 可 见 的 初 始 化 参 数 的 取 值 , 如 果 要 查 询 r a c 数 据 库 的 所 有 实 例 的 设 置 , 可 以 查 询 g v parameter 视图提供了当前会话可见的初始化参数的取值,如果要查询 rac 数据库的所有实例的设置,可以查询 gv parameter视图提供了当前会话可见的初始化参数的取值,如果要查询rac数据库的所有实例的设置,可以查询gvparameter 视图。

SQL> select name,value,issys_modifiable from v$parameter where name like 'instance%';
NAME			       VALUE					ISSYS_MOD
------------------------------ ---------------------------------------- ---------
instance_groups 							        FALSE
instance_type		       RDBMS					FALSE
instance_number 	       1					    FALSE
instance_name		       orcl1					FALSE

SQL> select inst_id,name,value,issys_modifiable from gv$parameter where name like 'instance%';
   INST_ID NAME 			  VALUE 				   ISSYS_MOD
---------- ------------------------------ ---------------------------------------- ---------
	 1 instance_groups							       FALSE
	 1 instance_type		  RDBMS 				   FALSE
	 1 instance_number		  1					       FALSE
	 1 instance_name		  orcl1 				   FALSE
	 2 instance_groups							       FALSE
	 2 instance_type		  RDBMS 				   FALSE
	 2 instance_number		  2					       FALSE
	 2 instance_name		  orcl2 				   FALSE
8 rows selected.

5、查看 v$system_parameter 视图

vsy s t e m p a r a m e t e r 视 图 提 供 了 当 前 实 例 生 效 的 初 始 化 参 数 的 取 值 , 如 果 要 查 询 r a c 数 据 库 的 所 有 实 例 的 设 置 , 可 以 查 询 g v system_parameter 视图提供了当前实例生效的初始化参数的取值,如果要查询 rac 数据库的所有实例的设置,可以查询 gv systemparameter视图提供了当前实例生效的初始化参数的取值,如果要查询rac数据库的所有实例的设置,可以查询gvsystem_parameter 视图。

SQL> select name,value,issys_modifiable from v$system_parameter where name like 'instance%';
NAME			       VALUE					ISSYS_MOD
------------------------------ ---------------------------------------- ---------
instance_groups 							        FALSE
instance_type		       RDBMS					FALSE
instance_number 	       1					    FALSE
instance_name		       orcl1					FALSE

SQL> select inst_id,name,value,issys_modifiable from gv$system_parameter where name like 'instance%';
   INST_ID NAME 			  VALUE 				   ISSYS_MOD
---------- ------------------------------ ---------------------------------------- ---------
	 1 instance_groups							       FALSE
	 1 instance_type		  RDBMS 				   FALSE
	 1 instance_number		  1					       FALSE
	 1 instance_name		  orcl1 				   FALSE
	 2 instance_groups							       FALSE
	 2 instance_type		  RDBMS 				   FALSE
	 2 instance_number		  2					       FALSE
	 2 instance_name		  orcl2 				   FALSE

8 rows selected.

6、查看 v$spparameter 视图

vsp p a r a m e t e r 视 图 提 供 了 来 自 s p f i l e 文 件 中 初 始 化 参 数 的 取 值 , 如 果 参 数 在 s p f i l e 文 件 中 没 有 设 置 , 字 段 i s s p e c i f i e d 对 应 的 值 为 f a l s e 。 如 果 要 查 询 r a c 数 据 库 的 所 有 实 例 的 设 置 , 可 以 查 询 g v spparameter 视图提供了来自 spfile 文件中初始化参数的取值,如果参数在 spfile 文件中没有设置,字段 isspecified 对应的值为 false。如果要查询 rac 数据库的所有实例的设置,可以查询 gv spparameter视图提供了来自spfile文件中初始化参数的取值,如果参数在spfile文件中没有设置,字段isspecified对应的值为false。如果要查询rac数据库的所有实例的设置,可以查询gvspparameter 视图。

SQL> select name,value from v$spparameter where name like 'instance%';
NAME			       VALUE
------------------------------ ----------------------------------------
instance_groups
instance_type
instance_number 	       2
instance_number 	       1
instance_name

SQL> select inst_id,name,value from gv$spparameter where name like 'instance%';
   INST_ID NAME 			  VALUE
---------- ------------------------------ ----------------------------------------
	 1 instance_groups
	 1 instance_type
	 1 instance_number		  2
	 1 instance_number		  1
	 1 instance_name
	 2 instance_groups
	 2 instance_type
	 2 instance_number		  2
	 2 instance_number		  1
	 2 instance_name

10 rows selected.

7、查看 v$spparameter2 视图

vsp p a r a m e t e r 2 和 v spparameter2 和 v spparameter2和vspparameter 视图相似,唯一的区别在于对于包含多值的初始化参数,v s p p a r a m e t e r 2 视 图 会 返 回 多 条 记 录 。 对 于 r a c 环 境 可 以 查 询 g v spparameter2 视图会返回多条记录。对于 rac 环境可以查询 gv spparameter2视图会返回多条记录。对于rac环境可以查询gvspparameter2 视图。

SQL> select name,value,issys_modifiable from v$parameter where name like '%files%';
NAME			       VALUE					ISSYS_MOD
------------------------------ ---------------------------------------- ---------
filesystemio_options	   none					                          FALSE
control_files		       +DATA/orcl/controlfile/current.260.1070471991,  FALSE
			               +BAK/orcl/controlfile/current.256.1070471991
db_files		          200					                         FALSE
session_max_open_files	   10					                          FALSE

SQL> select name,value,issys_modifiable from v$parameter2 where name like '%files%';
NAME			       VALUE					ISSYS_MOD
------------------------------ ---------------------------------------- ---------
filesystemio_options	    none					                      FALSE
control_files		       +DATA/orcl/controlfile/current.260.1070471991    FALSE
control_files		       +BAK/orcl/controlfile/current.256.1070471991     FALSE
db_files		           200					                          FALSE
session_max_open_files	    10					                           FALSE

SQL> select inst_id,name,value,issys_modifiable from gv$parameter where name like '%files%';
   INST_ID NAME 			  VALUE 				   ISSYS_MOD
---------- ------------------------------ ---------------------------------------- ---------
	 1 filesystemio_options    none					                         FALSE
	 1 control_files		  +DATA/orcl/controlfile/current.260.1070471991,  FALSE
					         +BAK/orcl/controlfile/current.256.1070471991
	 1 db_files			      200					                        FALSE
	 1 session_max_open_files  10					                         FALSE
	 2 filesystemio_options    none					                         FALSE
	 2 control_files		  +DATA/orcl/controlfile/current.260.1070471991,  FALSE
					         +BAK/orcl/controlfile/current.256.1070471991
	 2 db_files			      200					                        FALSE
	 2 session_max_open_files  10					                         FALSE

8 rows selected.

SQL> select inst_id,name,value,issys_modifiable from gv$parameter2 where name like '%files%';
   INST_ID NAME 			  VALUE 				   ISSYS_MOD
---------- ------------------------------ ---------------------------------------- ---------
	 1 filesystemio_options    none					                         FALSE
	 1 control_files		  +DATA/orcl/controlfile/current.260.1070471991   FALSE
	 1 control_files		  +BAK/orcl/controlfile/current.256.1070471991    FALSE
	 1 db_files			      200					                        FALSE
	 1 session_max_open_files  10					                         FALSE
	 2 filesystemio_options    none					                         FALSE
	 2 control_files		  +DATA/orcl/controlfile/current.260.1070471991   FALSE
	 2 control_files		  +BAK/orcl/controlfile/current.256.1070471991    FALSE
	 2 db_files			      200					                        FALSE
	 2 session_max_open_files  10					                         FALSE

10 rows selected.

8、查看非默认值参数

SQL> select name,value from v$parameter where isdefault <> 'TRUE';

NAME			             VALUE
------------------------------ ----------------------------------------
processes		              150
spfile			              +DATA/orcl/spfileorcl.ora
memory_target		          838860800
control_files		          +DATA/orcl/controlfile/current.260.1070471991,
			                 +BAK/orcl/controlfile/current.256.1070471991
db_block_size		          8192
compatible		              11.2.0.4.0
cluster_database	           TRUE
db_create_file_dest	           +DATA
db_recovery_file_dest	       +BAK
db_recovery_file_dest_size     4621074432
thread			              1
undo_tablespace 	           UNDOTBS1
instance_number 	           1
remote_login_passwordfile      EXCLUSIVE
db_domain
dispatchers		              (PROTOCOL=TCP) (SERVICE=orclXDB)
remote_listener 	           rac-scan:1521
audit_file_dest 	           /u01/app/oracle/admin/orcl/adump
audit_trail		               DB
db_name 		               orcl
db_unique_name		           orcl
open_cursors		           200
diagnostic_dest 	           /u01/app/oracle

23 rows selected.

四、设置 Oracle 参数的值

初始化参数的设置方法有以下几种:

-- 值修改内存中的值
ALTER SYSTEM/SESSION SET 参数名=参数值 SCOPE = MEMORY SID='*';

-- 只修改 SPFILE 中的值
ALTER SYSTEM SET 参数名=参数值 SCOPE = SPFILE SID='*';

-- 同时修改 SPFILE 和 MEMORY 中的值(也可以省略 BOTH 关键词)
ALTER SYSTEM/SESSION SET 参数名=参数值 SCOPE = BOTH SID='*';

-- 设置延迟生效,修改只对以后连接到数据库的会话生效,而对当前会话以及其它已经连接到 Oracle 的会话不会生效。
ALTER SYSTEM SET 参数名=参数值 DEFERRED SCOPE = SPFILE  SID='*';

/*
说明:
(1)在 RAC 环境中,要修改所有实例,可以在 ALTER SYSTEM 的最后加上 SID='*',要更改某一个实例, 在命令的结尾加上 SID='实例名'
(2)ALTER SESSION:修改的参数只限于本次会话,退出会话再进入时修改失效
(3)ALTER SYSTEM:修改的参数适用于数据库实例的所有会话,数据库关闭则修改失效
(4)ALTER SYSTEM DEFERRED:修改是延迟修改,退出会话,下次进入会话时生效
(5)scope = spfile:修改只对 spfile 参数文件有效,对于动态参数和静态参数都是数据库重启时有效。
(6)scope = memory:修改只对内存有效,对于动态参数修改后立即生效,数据库重启后失效。静态参数不允许使用该选项。
(7)scope = both:修改对 spfile 参数文件和内存都生效。对于动态参数修改后立即生效,数据库重启后失效。静态参数不允许使用该选项。
*/

1、动态参数修改举例

-- 动态参数 open_cursors 在内存中的取值
SQL> show parameter open_cursor
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 200

-- 动态参数 open_cursors 在 spfile 参数文件中的取值
SQL> show spparameter open_cursors
SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
orcl1	 open_cursors		       integer	   200
orcl2	 open_cursors		       integer	   400
*	     open_cursors		       integer	   600

-- 只修改内存值
SQL> alter system set open_cursors = 250 scope = memory;
System altered.

SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 250

SQL> show spparameter open_cursors
SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
orcl1	 open_cursors		       integer	   200
orcl2	 open_cursors		       integer	   400
*	     open_cursors		       integer	   600

-- 只修改参数文件中的值
SQL> alter system set open_cursors = 350 scope = spfile;
System altered.

SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 250

SQL> show spparameter open_cursors
SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
orcl1	 open_cursors		       integer	   200
*	     open_cursors		       integer	   350
orcl2	 open_cursors		       integer	   400

-- 同时修改内存和参数文件的取值
SQL> alter system set open_cursors = 550 scope = both;
System altered.

SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 550

SQL> show spparameter open_cursors
SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
orcl1	 open_cursors		       integer	   200
orcl2	 open_cursors		       integer	   400
*	     open_cursors		       integer	   550

2、静态参数修改举例

-- 静态参数 db_unique_name 的取值
SQL> show parameter db_unique_name
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			 string	 orcl

-- 静态参数的内存值不允许修改
SQL> alter system set db_unique_name = 'mydb' scope = memory sid = '*';
alter system set db_unique_name = 'mydb' scope = memory sid = '*'
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified

-- 静态参数的内存值不允许使用 both 选项
SQL> alter system set db_unique_name = 'mydb' scope = both sid = '*';
alter system set db_unique_name = 'mydb' scope = both sid = '*'
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified

-- 静态参数只能在 spfile 参数文件中修改,并且重启数据库才生效
SQL> alter system set db_unique_name = 'mydb' scope = spfile sid = '*';
System altered.

-- 内存中的值没有发生变化
SQL> show parameter db_unique_name
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			     string	 orcl

SQL> show spparameter db_unique_name
SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
*	 db_unique_name 	       string	   mydb

-- 重启数据库(静态参数修改后必须重启数据库才能生效)
[oracle@rac1 ~]$ srvctl stop database -d orcl

[oracle@rac1 ~]$ srvctl start database -d orcl

-- 内存中已更改
SQL> show parameter db_unique_name
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			     string	 mydb
SQL> show spparameter db_unique_name
SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
*	 db_unique_name 	       string	   mydb

3、rac 环境下参数值的设置与查看

-- 使用 SHOW PARAMETER 查询,看到的是当前会话的初始化参数
-- 查看当前连接的实例名
SQL> show parameter instance_name
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
instance_name			     string	 orcl2

-- 修改实例 orcl1 的 open_cursors 参数值
SQL> alter system set open_cursors = 220 scope = both sid = 'orcl1';
System altered.

SQL> alter system set open_cursors = 320 scope = both sid = 'orcl2';
System altered.

-- 查看当前实例的 open_cursors 参数值
SQL> select name,value from v$parameter where name like 'open_cursors';
NAME						   VALUE
-------------------------------------------------- ----------------------------------------
open_cursors					   320

-- 查看所有实例的 open_cursors 参数值(好像有问题!!!,看不到 2 号实例的参数值)
SQL> select inst_id,name,value from gv$parameter where name like 'open_cursors';
   INST_ID NAME 					      VALUE
---------- -------------------------------------------------- --------------------------
	 2 open_cursors 				      320
	 1 open_cursors 				      220

-- 节点1
SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 220

-- 节点2
SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 320

-- 参数文件中的取值
SQL> select sid,name,value from v$spparameter where name like 'open_cursors';
SID	   NAME 			  VALUE
---------- ------------------------------ ----------------------------------------
*	       open_cursors 		  550
orcl1	   open_cursors 		  220
orcl2	   open_cursors 		  320

-- 使用 sid = '*' 修改
SQL> alter system set open_cursors = 500 scope = both sid = '*';
System altered.

-- 查看结果
-- 节点1
SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 500

-- 节点2
SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 500

-- 参数文件
SQL> show spparameter open_cursors
SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
orcl1	 open_cursors		       integer	   220
orcl2	 open_cursors		       integer	   320
*	     open_cursors		       integer	   500

五、pfile 和 spfile 的互相创建

-- 根据 spfile 创建 pfile
create pfile[='xxxxx'] from spfile[='xxxx'];

-- 根据内存中的参数值创建 pfile
create pfile[='xxxxx'] from memory;

-- 根据 pfile 创建 spfile
create spfile[='xxxxx'] from pfile[='xxxx'];

举例:

SQL> create pfile = '/home/oracle/pfile001.ora' from spfile;
File created.

SQL> create pfile = '/home/oracle/pfilefrommemory.ora' from memory;
File created.

[oracle@rac1 ~]$ pwd
/home/oracle

[oracle@rac1 ~]$ ll
total 12
-rw-r--r-- 1 oracle asmadmin 1475 Aug  2 04:56 pfile001.ora
-rw-r--r-- 1 oracle asmadmin 7042 Aug  2 04:57 pfilefrommemory.ora

六、使用 pfile 启动实例

使用指定的 pfile 启动实例命令如下:

startup pfile = '/home/oracle/pfile001.ora';

使用指定的 spfile 启动实例:需要使用 pfile 做桥梁,在 pfile 中使用指针指向非默认路径下的 spfile,命令如下:

# 使用 pfile 生成 spfile 文件
create spfile = '/home/oracle/spfile.ora' from pfile = '/home/oracle/pfile001.ora'

# 编辑 pfile 文件,添加指向 spfile 文件的指针
vi /home/oracle/init.ora
# pfile 内容如下:
spfile = '/home/oracle/spfile.ora'

# 使用 pfile 文件启动数据库
startup pfile = '/home/oracle/pfile001.ora'

使用pfile 文件启动的实例具有如下特点:

----------------------------------------------------------------------------------
-- 对动态参数的修改
----------------------------------------------------------------------------------
-- 不能使用 scope 选项,不使用 scope 选项默认修改动态参数在内存中的取值
-- 要修改动态参数在参数文件中的取值,直接使用 vi 编辑器修改 pfile 文件即可
alter system set open_cursor=500;

----------------------------------------------------------------------------------
-- 对静态参数的修改
----------------------------------------------------------------------------------
-- 静态参数不能使用 alter system 命令修改,使用 vi 直接修改 pfile 文件