Oracle 11g有一新特性允许从内存(memory)从创建参数文件pfile,以下记录纯做记录。
研究版本为
引用
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Linux: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
打开session跟踪
引用
SQL> alter session set sql_trace=true;
Session altered.
从内存中创建
引用
SQL> create pfile from memory;
File created.
关闭session跟踪
引用
SQL> alter session set sql_trace=false;
打开跟踪文件可以看到Oracle主要通过查询x$表格获得参数
引用
=====================
PARSING IN CURSOR #10 len=53 dep=4 uid=0 oct=3 lid=0 tim=1263198632851008 hv=2195068792 ad='72557fb8' sqlid='asvzxj61dc5vs'
select timestamp, flags from fixed_obj$ where obj#=:1
END OF STMT
PARSE #10:c=0,e=14,p=0,cr=0,cu=0,mis=0,r=0,dep=4,og=4,tim=1263198632851004
EXEC #10:c=0,e=21,p=0,cr=0,cu=0,mis=0,r=0,dep=4,og=4,tim=1263198632851095
FETCH #10:c=0,e=19,p=0,cr=3,cu=0,mis=0,r=1,dep=4,og=4,tim=1263198632851154
STAT #10 id=1 cnt=1 pid=0 pos=1 obj=100 op='TABLE ACCESS BY INDEX ROWID FIXED_OBJ$ (cr=3 pr=0 pw=0 time=0 us cost=2 size=17 card=1)'
STAT #10 id=2 cnt=1 pid=1 pos=1 obj=101 op='INDEX UNIQUE SCAN I_FIXED_OBJ$_OBJ# (cr=2 pr=0 pw=0 time=0 us cost=1 size=0 card=1)'
=====================
PARSING IN CURSOR #12 len=247 dep=3 uid=0 oct=3 lid=0 tim=1263198632852018 hv=3957975603 ad='6aa75df8' sqlid='48x4v2mpymujm'
select x.inst_id,kspftctxsid,kspftctxpn,ksppinm,ksppity,kspftctxdvl, kspftctxvn,kspftctxct from
x$ksppi x, x$ksppsv2 y where ((x.
indx+1) = kspftctxpn) and (bitand(ksppilrmflg,64)!=64) and ((kspftctxdf = 'FALSE') or (bitand(kspftctxvf,8) =
)
END OF STMT
PARSE #12:c=0,e=1744,p=0,cr=6,cu=0,mis=1,r=0,dep=3,og=4,tim=1263198632852014
=====================
PARSING IN CURSOR #13 len=130 dep=2 uid=0 oct=3 lid=0 tim=1263198632852774 hv=1046352901 ad='6aa76568' sqlid='437ya6wz5w505'
select SID, NUM, NAME, TYPE, DISPLAY_VALUE, ORDINAL, UPDATE_COMMENT from GV$SYSTEM_PARAMETER4 where INST_id = USERENV('Instance')
END OF STMT
PARSE #13:c=4000,e=3131,p=0,cr=8,cu=0,mis=1,r=0,dep=2,og=4,tim=1263198632852769
=====================
PARSING IN CURSOR #16 len=104 dep=1 uid=0 oct=3 lid=0 tim=1263198632865557 hv=1470317213 ad='6aa76e58' sqlid='4kvhq1dbu6hnx'
select num,name,type,display_value,update_comment from v$system_parameter4 order by lower(name),ordinal
打开init文件,可以看到包含了很多隐含参数:
引用
__db_cache_size=92M
__java_pool_size=16M
__large_pool_size=4M
__oracle_base='/opt/ora11g/app' # ORACLE_BASE set from environment
__pga_aggregate_target=52M
__sga_target=300M
__shared_io_pool_size=0
__shared_pool_size=180M
__streams_pool_size=0
_always_anti_join='CHOOSE'
_always_semi_join='CHOOSE'
_b_tree_bitmap_plans=TRUE
_bloom_filter_enabled=TRUE
_bloom_pruning_enabled=TRUE
_complex_view_merging=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_complex_pred_selectivity=TRUE
_optimizer_compute_index_stats=TRUE
_optimizer_connect_by_combine_sw=TRUE
_optimizer_connect_by_cost_based=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_elimination=TRUE
_optimizer_enable_density_improvements=TRUE
_optimizer_enable_extended_stats=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=240
_optimizer_filter_pred_pullup=TRUE
_optimizer_fkr_index_cost_bias=10
_optimizer_group_by_placement=TRUE
_optimizer_improve_selectivity=TRUE
_optimizer_join_elimination_enabled=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_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_transitivity_retain=TRUE
_optimizer_undo_cost_change='11.1.0.6'
_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_pwg_enabled=TRUE
_px_ual_serial_input=TRUE
_query_rewrite_setopgrw_enable=TRUE
_remove_aggr_subquery=TRUE
_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='/opt/ora11g/app/admin/db11g/adump'
audit_trail='DB'
compatible='11.1.0.0.0'
control_files='/opt/ora11g/oradata/db11g/control01.ctl'
control_files='/opt/ora11g/oradata/db11g/control02.ctl'
control_files='/opt/ora11g/oradata/db11g/control03.ctl'
core_dump_dest='/opt/ora11g/app/diag/rdbms/db11g/db11g/cdump'
db_block_size=8192
db_domain=''
db_name='db11g'
db_recovery_file_dest='/opt/ora11g/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/opt/ora11g/app'
dispatchers='(PROTOCOL=TCP) (SERVICE=db11gXDB)'
local_listener='LISTENER_DB11G'
log_buffer=4583424 # log buffer update
open_cursors=300
optimizer_dynamic_sampling=2
optimizer_mode='ALL_ROWS'
pga_aggregate_target=50M
plsql_warnings='DISABLE:ALL' # PL/SQL warnings at init.ora
processes=150
query_rewrite_enabled='TRUE'
remote_login_passwordfile='EXCLUSIVE'
result_cache_max_size=1536K
sga_target=300M
skip_unusable_indexes=TRUE
undo_tablespace='UNDOTBS1'
进一步,在Oracle 11g以下版本,我们可以通过以下查询获得当前系统中运行的非缺省参数:
引用
SQL>select name,value from v$parameter where isdefault='FALSE'
我们可以通过explain 观察v$parameter 由哪些基表组成
SQL> set autotrace trace explain
SQL> select * from v$parameter;
Execution Plan
----------------------------------------------------------
Plan hash value: 1128103955
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 926 | 1 (100)| 00:00:01 |
|* 1 | HASH JOIN | | 1 | 926 | 1 (100)| 00:00:01 |
|* 2 | FIXED TABLE FULL| X$KSPPI | 1 | 249 | 0 (0)| 00:00:01 |
| 3 | FIXED TABLE FULL| X$KSPPCV | 100 | 67700 | 0 (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("X"."INDX"="Y"."INDX")
filter(TRANSLATE("KSPPINM",'_','#') NOT LIKE '#%' OR
"KSPPSTDF"='FALSE' OR BITAND("KSPPSTVF",5)>0)
2 - filter("X"."INST_ID"=USERENV('INSTANCE') AND
TRANSLATE("KSPPINM",'_','#') NOT LIKE '##%')