在数据库启动时需要读取参数文件来分配内存区域并定位控制文件的位置,oracle数据库中的初始化参数传统上是存储在一个文本初始化参数文件中的.为了更好地管理,可以选择使用一个二进制的服务器参数文件来管理初始化参数对它的修改在数据库重启后仍然生效.下面来介绍如何使用这种方法来管理初始化参数.
什么是服务器参数文件
服务器参数文件可以被认为是一个初始化参数档案库它被存储在运行oracle数据库服务器的系统中.它被设计为服务端初始化参数文件.存储在服务器参数文件中的初始化参数是永久生效的.当实例运行时对参数的任何改变在数据库重启之后是仍然有效的.这消除了为了使alter system语句的改变永久生效而要手工修改初始化参数的需要.它也提供了对数据库服务器自动调整的基础.
一个服务器参数文件是通过使用create spfile语句从文本初始化参数文件来初始化创建.(也可以通过DBCA来直接创建).服务器参数文件是一个二进制文件不能使用文本编辑器来修改.oracle数据库提供了其它的接口来查看和修改服务器参数文件中的参数.
注意:虽然你能使用一个文本编辑器来打开一个二进制服务器参数文件但不能手工修改它.如果修改会损坏文件.你将不能重启实例,如果实例正在运行那么它会终止运行.
当执行没有pfile子句的startup命令,oracle实例会在操作系统特定的缺省位置来搜索一个服务器参数文件并从文件中读取初始化参数.如果没有找到服务器参数文件,实例将搜索一个文本初始化参数.如果服务器参数文件存在但你想使用一个文本初始化参数来覆盖那么在执行startup命令时指定pfile子句.
下面来举例说明:
1.执行不带pfile子句的startup命令,从下面的输出可以看出启动时自动搜索了服务器参数文件spfilejycs.ora
SQL> startup ORACLE instance started. Total System Global Area 630501376 bytes Fixed Size 2215984 bytes Variable Size 385880016 bytes Database Buffers 234881024 bytes Redo Buffers 7524352 bytes Database mounted. Database opened. SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string /u01/app/oracle/11.2.0/db/dbs/ spfilejycs.ora
2.删除服务器参数文件spfilejycs.ora,再执行执行不带pfile子句的startup命令,从下面的输出可以看出在启动时
在搜索不到服务器参数文件时就会搜索文本初始化参数文件initjycs.ora
[oracle@jyrac1 dbs]$ mv spfilejycs.ora spfilejycs.ora.bak SQL> startup ORACLE instance started. Total System Global Area 630501376 bytes Fixed Size 2215984 bytes Variable Size 385880016 bytes Database Buffers 234881024 bytes Redo Buffers 7524352 bytes Database mounted. Database opened. SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string
3.删除文本初始化参数文件initjycs.ora,再执行执行不带pfile子句的startup命令,从下面的输出可以看出在启动时
在搜索不到服务器参数文件时就会搜索文本初始化参数文件initjycs.ora,但是因为我们删除了文本初始化参数文件
initjycs.ora所以提示找不到这个文件
[oracle@jyrac1 dbs]$ mv initjycs.ora initjycs.ora.bak SQL> startup ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/u01/app/oracle/11.2.0/db/dbs/initjycs.ora'
4.执行带pfile子句的startup命令,将使用文本初始化参数文件来替代服务器参数文件,可以看到spfile参数值为空说明是使用文本初始化参数来启动的实例
SQL> startup pfile='/u01/app/oracle/11.2.0/db/dbs/initjycs.ora' ORACLE instance started. Total System Global Area 630501376 bytes Fixed Size 2215984 bytes Variable Size 385880016 bytes Database Buffers 234881024 bytes Redo Buffers 7524352 bytes Database mounted. Database opened. SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string
迁移到服务器参数文件
如果你当前正使用一个文本初始化参数文件那么使用下面的步骤来迁移到服务器参数文件:
1.如果初始化参数文件在一个客户端系统中,那么可以使用ftp将这个文件从客户端系统传输到服务器系统.
注意:如果你从一个oracle rac环境中迁移一个服务器参数文件,你必须合并所有实例特定的初始化参数文件为一个单独的初始化参数文件.这样做是为了使用oracle rac中的所有实例共同使用一个服务器参数文件.
2.使用create spfile from pfile命令在缺省位置创建一个服务器参数文件.
这个语句将读取一个文本初始化参数来创建一个服务器参数文件.
3.启动或重启实例
这个实例将会在缺省位置查找一个新的spfile文件来启动
创建服务器参数文件
可以使用create spfile语句来创建一个服务器参数文件.必须有sysdba或sysoper系统权限来执行这个语句.
注意:当使用dbca创建数据库时它会自动的创建一服务器参数文件
create spfile语句可以在实例启动之前或之后执行.然而如果实例已经使用一个服务器参数文件启动了执行这个创建服务器参数文件的语句就会报错.
SQL> create spfile from memory; create spfile from memory * ERROR at line 1: ORA-32002: cannot create SPFILE already being used by the instance
可以从一个存在的文本初始化参数文件或从内存来创建一个服务器参数文件(spfile).从内存来创建服务器参数文件这意味着复制初始化参数的当前值到服务器参数文件中.
下面的例子从一个文本初始化参数文件/u01/oracle/dbs/init.ora来创建服务器参数文件.在这个例子中没有指定spfile文件名所以这个被创建的文件将会使用平台特定的缺省名和位置.
SQL>CREATE SPFILE FROM PFILE='/u01/oracle/dbs/init.ora';
下面的例子在创建服务器参数文件时提供了文件名和存储的位置:
SQL>CREATE SPFILE='/u01/oracle/dbs/test_spfile.ora' FROM PFILE='/u01/oracle/dbs/test_init.ora';
下面的例子将在缺省位置将用内存中的初始化参数的当前值来创建服务器参数文件:
SQL>CREATE SPFILE FROM MEMORY; SQL> create spfile from memory; create spfile from memory * ERROR at line 1: ORA-32002: cannot create SPFILE already being used by the instance SQL> create spfile from memory; File created.
下面将用内存中的初始化参数的当前值来创建文本初始化参数文件将与用spfile文件创建的文本初始化参数文件进行比较可以明显看到从内存来创建的文件中多了以_开头的参数
SQL> create pfile from memory; File created. [oracle@jyrac1 dbs]$ cat initjycs.ora jycs.__db_cache_size=234881024 jycs.__java_pool_size=4194304 jycs.__large_pool_size=4194304 jycs.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment jycs.__pga_aggregate_target=209715200 jycs.__sga_target=633339904 jycs.__shared_io_pool_size=0 jycs.__shared_pool_size=373293056 jycs.__streams_pool_size=4194304 *.audit_file_dest='/u01/app/oracle/admin/jycs/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/u01/app/oracle/oradata/jycs/control01.ctl','/u01/app/oracle/flash_recovery_area/jycs/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='jycs' *.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area' *.db_recovery_file_dest_size=4070572032 *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=jycsXDB)' *.open_cursors=300 *.pga_aggregate_target=209715200 *.processes=150 *.remote_login_passwordfile='exclusive' *.sga_target=631242752 *.undo_tablespace='UNDOTBS1' [oracle@jyrac1 dbs]$ cat initjycs.ora # Oracle init.ora parameter file generated by instance jycs on 04/14/2014 10:33:22 __db_cache_size=224M __java_pool_size=4M __large_pool_size=4M __oracle_base='/u01/app/oracle' # ORACLE_BASE set from environment __pga_aggregate_target=200M __sga_target=604M __shared_io_pool_size=0 __shared_pool_size=356M __streams_pool_size=4M _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.0.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_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=224 _optimizer_fast_access_pred_analysis=TRUE _optimizer_fast_pred_transitivity=TRUE _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_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_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.1' _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_pwg_enabled=TRUE _px_ual_serial_input=TRUE _query_rewrite_setopgrw_enable=TRUE _remove_aggr_subquery=TRUE _replace_virtual_columns=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='/u01/app/oracle/admin/jycs/adump' audit_trail='DB' compatible='11.2.0.0.0' control_files='/u01/app/oracle/oradata/jycs/control01.ctl' control_files='/u01/app/oracle/flash_recovery_area/jycs/control02.ctl' core_dump_dest='/u01/app/oracle/diag/rdbms/jycs/jycs/cdump' db_block_size=8192 db_domain='' db_name='jycs' db_recovery_file_dest='/u01/app/oracle/flash_recovery_area' db_recovery_file_dest_size=3882M diagnostic_dest='/u01/app/oracle' dispatchers='(PROTOCOL=TCP) (SERVICE=jycsXDB)' log_buffer=7192576 # log buffer update open_cursors=300 optimizer_dynamic_sampling=2 optimizer_mode='ALL_ROWS' pga_aggregate_target=200M plsql_warnings='DISABLE:ALL' # PL/SQL warnings at init.ora processes=150 query_rewrite_enabled='TRUE' remote_login_passwordfile='EXCLUSIVE' result_cache_max_size=3104K sga_target=604M skip_unusable_indexes=TRUE undo_tablespace='UNDOTBS1'
如果使用缺省的spfile文件名和缺省位置或者指定一个spfile文件名和位置.如果存在一个同名的spfile文件名它将覆盖这个文件而不会有警告信息.
当从一个文本初始化参数文件创建服务器参数文件spfile时,在初始化参数文件中在相同行的特定注释会作为参数设置在spfile文件中被维护.所有其它的注释会被忽略.
oracle建议你允许数据库给spfile使用缺省名和缺省存储位置.这简化的数据库的管理.比如使用startup命令就会从缺省位置读取spfile文件.
下面的表格显示了在UNIX,Linux和Windows平台上的文本初始化参数文件pfile和服务器参数文件spfile的缺省文件名和存储位置.
PFILE and SPFILE Default Names and Locations on UNIX, LInux, and Windows ------------------------------------------------------------------------------------------------------------- platform pfile default name spfile default name pfile default location spfile default location ------------------------------------------------------------------------------------------------------------- unix,linux initORACLE_SID.ora spfileORACLE_SID.ora ORACLE_HOME/dbs或者 不使用oracle asm: 与数据文件在同一个目录 ORACLE_HOME/dbs或者与 数据文件在同一个目录 使用oracle asm:与数据文件 在同一个磁盘组 windows initORACLE_SID.ora spfileORACLE_SID.ora ORACLE_HOME\database 不使用oracle asm: ORACLE_HOME\database 使用oracle asm:与数据文件 在同一个磁盘组 ---------------------------------------------------------------------------------------------------------------
注意:在启动时,实例首先搜索一个名叫spfileORACLE_SID.ora的spfile文件,如果没有找到就会搜索spfile.ora文件.
使用spfile.ora能让所有的oracle rac实例使用相同的服务器参数文件.
如果spfile没找到实例将搜索文本初始化参数文件initORACLE_SID.ora.
如果你不是在缺省位置创建一个spfile文件那么你必须创建一个缺省的pfile在pfile文件的根部指示这个服务器参数文件.
当使用dbca创建数据库且使用oracle asm时,dbca将会把spfile存储在一个oracle asm磁盘组也会在pfile文件的部指示这个服务器参数文件.
spfile初始化参数
spfile初始化参数包含了当前服务器参数文件的名字.当数据库使用缺省的服务器参数文件时,也就是执行没有pfile参数的startup命令时–这个spfile的值由服务器内部指定.在SQL*Plus中执行show parameter spfile(或任何其它的方法来查询参数的值)来显示当前使用的服务器参数文件名.
改变初始化参数值
使用alter system语句来设置,修改或还原初始化参数值.如果你正使用一个文本初始化参数文件,alter system语句就只能对当前实例改变参数的值.因为没有机制可以自动更新磁盘上的文本初始化参数文件.你必须手工更新.使用服务器参数文件可以克服这个问题.
有两种类型的初始化参数文件
.动态初始化参数对于当前oracle实例是可以修改的.这种改变会立即生效.
.静态初始化参数对于当前实例是不能修改的.必须修改文本初始化参数文件或者服务器参数文件中的参数然后重新启动实例使修改生效
设置或修改初始化参数值
使用有set子句的alter system的语句来设置或修改初始化参数的值.可选scope子句用来指定修改的范围:
---------------------------------------------------------------------------------------------------- scope clause description ---------------------------------------------------------------------------------------------------- scope=spfile 这种修改只应用于服务器参数文件.它的效果如下: .对当前实例不会生效 .对于动态和静态参数只有在重启实例之后才会生效 这是唯一可以修改静态参数的scope范围级别 scope=memory 这种修改只应用于内存.它的效果如下: .这种改变只应用于当前实例且会立即生效 .对于动态参数会立即生效.但是不是永久生效因为没有更新spfile文件 对于静态参灵数不能在这个范围级别进行修改 scope=both 这种修改应用于服务器参数文件和内存,它的效果如下: .对于当前实例这种改变会立即生效 .对于动态参数会永久生效因为修改了服务器参数文件. 对于静态参灵数不能在这个范围级别进行修改 ----------------------------------------------------------------------------------------------------
如果设置scope=spfile或scope=both有错误实例使用服务器参数文件是不能启动的.如果实例是使用服务器参数文件启动的那么缺省的参数修改范围级别为scope=both.如果实例是使用文本初始化参数文件来启动的那么缺省的参数修改范围级别为scope=memory
对于动态参数,还可以指定deferred关键字.当指定这个关键字后改变只对以后的会话生效.
当你设置scope为spfile或both时可以选择comment子句来对参数使用一个文本字符串作为注释.这个注释也会被写入服务器参数文件中.
下面的语句将修改在连接被删除之前允许的登录失败的最大次数.它包含了一注释且明确地指出了修改只对服务器参数文件生效.
SQL>ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=3 COMMENT='Reduce from 10 for tighter security.' SCOPE=SPFILE;
下面的例子介绍了如何对复杂初始化参数进行设置这个参数有一个列表属性.下面的语句可以改变已经存在的设置或者使用一个新的归档目录
SQL>ALTER SYSTEM 2 SET LOG_ARCHIVE_DEST_4='LOCATION=/u02/oracle/rbdb1/',MANDATORY,'REOPEN=2' 3 COMMENT='Add new destination on Nov 29' 4 SCOPE=SPFILE;
当一个参数值是由列表值组成你不能通过位置或者次序数字来统计图单个属性.在每次修改这个参数时必须指定一个完全列表值.新的完全列表可以替换旧的参数列表值.
清除初始化参数值
可以使用alter system reset命令来清除(删除)实例启动时所用的spfile文件中的任何参数设置.scope=memory和scope=both是不被允许的.scope=spfile子句不被要求但可以包含.
你可能想清除spfile文件中的一个参数使其在下次启动时使用缺省参数值.这样做可能有以下几种原因:
.为了诊断列出当前实例的所有参数值.可以使用show parameters命令或者查询v$parameter或v$parameter2视图
.为了修改服务器参数文件首先要将其导出创建成文本初始化参数文件再修改,修改后再使用create spfile命令从文本初始化参数文件来重新创建服务器参数文件.
导出的文本初始化参数文件pfile可以使用startup pfile命令来启动实例.
为了执行create pfile语句必须要有sysdba或sysoper系统权限.导出的文件在数据库服务器端生成.它可能包含了参数的注释并一起作为参数被设置.
下面的语句用来从spfile文件来创建pfile
SQL>create pfile from spfile;
因为没有指定文件名,数据库将使用一个平台特定的文件名来创建一个文本初始化参数文件pfile,而且它是使用平台特定的缺省的服务器参数文件spfile来创建的
下面的语句用来从spfile文件来创建pfile,但是指定了文件名:
SQL>CREATE PFILE='/u01/oracle/dbs/test_init.ora' FROM SPFILE='/u01/oracle/dbs/test_spfile.ora';
注意:可以使用内存中的当前参数值来创建一个pfile文件.例如:
SQL>CREATE PFILE='/u01/oracle/dbs/test_init.ora' FROM MEMORY;
备份服务器参数文件
可以通过导出的形式来备份服务器参数文件.如果你的数据库使用rman来实例备份和恢复策略那么可以使用rman来创建一个spfile文件的备份.当使用rman备份数据库时spfile文件会自动备份,但是rman也能让你指定对当前活动的spfile创建一个备份.
恢复丢失或者损坏的服务器参数文件
如果服务器参数文件(spfile)丢失或者损坏了,那么当前实例可能会出现故障或者在下次启动实例时会失败.有下面几种方法来恢复spfile:
.如果实例正在运行可以使用下面的命令从内存中使用当前参数值来重新创建一个服务器参数文件spfile
SQL>create spfile from memory;
这个命令将在缺省位置使用缺省文件名来创建一个spfile文件.也可以指定新的目录和文件名.
.如果你有一个有效的文本初始化参数文件(pfile),可以使用下面的命令从pfile文件来创建spfile:
SQL>create spfile from pfile;
这个命令将在缺省位置使用缺省文件名来创建一个spfile文件,或者不使用缺省位置的缺省的pfile来创建的语句如下:
SQL>CREATE SPFILE='/u01/oracle/dbs/test_spfile.ora' FROM PFILE='/u01/oracle/dbs/test_init.ora';
.从备份中还原spfile
.如果你的情况以上方法都不能使用,那么执行以下步骤来创建:
1.从告警日志(alert.log)中所列出的参数值来创建一个文本初始化参数文件(pfile)
当实例启动时所使用的初始化参数将会写入告警日志文件中.可以将这些参数信息复制到新的pfile文件中.
2.使用pfile文件来创建spfile
在参数更新时出现读/写错误
在参数被更新时如果读取或者写服务器参数文件出错那么这个错误报告会被写入告警日志文件且后继的对服务器参数文件的
更新将会忽略.这时可以执行下面的操作:
1.关闭实例,恢复服务器参数文件后再重新启动实例.
2.如果不关心后继的参数修改是不是永久生效可以继续运行数据库
查看参数设置
可以使用以下几种方法来查看参数设置
-------------------------------------------------------------------------------------------------------- 方法 描述 -------------------------------------------------------------------------------------------------------- show parameters 这个命令将会显示影响当前会话的初始化参数值 show spparameters 这个命令将会显示服务器参数文件中的初始化参数值 create pfile 这个命令将使用服务器参数文件或者内存中当前参数的值 来创建一个文本初始化参数文件.可以使用任何文本编辑器 来查看pfile v$parameter 这个视图将显示影响当前会话的初始化参数.使用视图更容易 区分列表参数值因为每一个列表参数值显示为一行 v$system_parameter 这个视图显示影响当前实例的初始化参数.一个新的会话会继承 实例级别的参数值 v#system_parameter2 这个视图显示影响当前实例的初始化参数.一个新的会话会继承 实例级别的参数值,使用视图更容易区分列表参数值因为每一个 列表参数值显示为一行 v$spparameter 这个视图显示了spfile的当前内容.如果实例没有使用spfile启动 这个视图在isspecified列返回false. ---------------------------------------------------------------------------------------------------------