spfileでOracleを起動する方法ををおしえて下さい。
こんにちはユキトモです。
データベースを作成するにはdbcaを使って通常「GUI」で作成しますよね。
その場合、諸設定はだいたい自動に設定されています。
「 CREATE DATABASE 」コマンドを使ってデータベースを作成した場合などはほどんど何も設定されていない状態です。
筆者の環境ではOracle起動時に「pfile」で起動しているので「spfile」で起動するように設定変更しましたのでそのやり方などを説明します。
この記事でわかること
・spfileのメリット・デメリット
・pfile、spfileどちらで起動しているのか?
・pfileからspfileを作成する
・メモリーからpfile、spfileを作成する
spfileのメリット・デメリット
Oracle9i以降に追加されたバイナリー形式のパラメータファイルです。
メリット
・パラメータ変更などを再起動なしで変更できる。
デメリット
・バイナリーファイルなのでテキストエディタでは編集できない。
pfile,spfileどちらで起動しているのか?
現在稼働中のインスタンスがpfile、spfileのどちらで起動しているか調べる方法は、
動的パフォーマンスビューのv$spparameterを確認します。
desc v$spparameter
valueに値が入っている場合はspfileで起動しています。
nullの場合はpfileで起動しています。
以下のsqlを実行して、
--pfile,spfileどちらで起動しているか確認する
select count(*) from v$spparameter where value is not null;
・カウントが0件の場合、pfile
・0件でない場合はspfileで起動している
ということが分かります。
pfileを確認
pfileは通常「$ORACLE_HOME/dbs」直下にあります。
--pfileのパスを確認する
SQL> !ls -l $ORACLE_HOME/dbs/
pfileからspfileを作成する
構文
CREATE SPFILE='作成するspfileのフルパス' FROM PFILE='作成する元のpfileのフルパス'
--pfileからspfileを作成する
CREATE SPFILE='/$ORACLE_HOME/dbs/spfileorcl.ora' FROM PFILE='/$ORACLE_HOME/dbs/initorcl.ora';
--作成結果を確認する
SQL> !ls -l $ORACLE_HOME/dbs/
spfileに切り替える
Oralce起動時にパラメーターファイルが複数存在する場合、設定ファイルの優先順位は以下の通り
優先順位
1.起動時に指定したpfile:startup pfile='ファイル'
2.spfile[SID].ora
3.spfile.ora
4.init[SID].ora
5.init.ora
spfileを作成したので、一度Oracleを再起動してspfileで読み込まれるか確認してみます。
--Oracleを停止する
shutdown immediate
--Oracleを起動する
startup
--spfileで起動しているか確認する
select count(*) from v$spparameter where value is not null;
メモリーからpfile、spfileを作成する
Oracle11g以降から現在起動しているOracleのメモリから初期かパラメータファイル
を作成することが可能になりました。
pfileをメモリから作成
実際に作成してみます。
--initorcl.oraがすでにあるので別名で作成してみます。
create pfile='$ORACLE_HOME/dbs/initorcl_mem.ora' from memory;
--ファイルを確認します。
SQL> !ls -l $ORACLE_HOME/dbs
--内容を確認してみます。
SQL> !more $ORACLE_HOME/dbs/initorcl_mem.ora
spfileをメモリから作成
--spfileorcl.oraがすでにあるので別名で作成してみます。
create spfile='$ORACLE_HOME/dbs/spfileorcl_mem.ora' from memory;
--ファイルを確認します。
SQL> !ls -l $ORACLE_HOME/dbs
まとめ
pfileからspfileの作成方法を説明しました。
pfile、spfileを誤って削除してしまっても、Oracleが起動中であれば、作成することも可能であることもわかりました。
+ 実行結果はこちら
command
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Mon Nov 23 17:30:43 2020 from 192.168.200.1
[root@localhost ~]# su - oracle
[oracle@localhost ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 月 11月 23 17:31:40 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL>
SQL> desc v$spparameter
名前 NULL? 型
----------------------------------------- -------- ----------------------------
FAMILY VARCHAR2(80)
SID VARCHAR2(80)
NAME VARCHAR2(80)
TYPE VARCHAR2(11)
VALUE VARCHAR2(255)
DISPLAY_VALUE VARCHAR2(255)
ISSPECIFIED VARCHAR2(6)
ORDINAL NUMBER
UPDATE_COMMENT VARCHAR2(255)
CON_ID NUMBER
SQL>
SQL> --pfile,spfileどちらで起動しているか確認する
SQL> select count(*) from v$spparameter where value is not null;
COUNT(*)
----------
0
SQL>
SQL>
SQL> --pfileのパスを確認する
SQL> !ls -l $ORACLE_HOME/dbs/
合計 16
-rw-rw----. 1 oracle oinstall 1544 11月 23 17:31 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079 5月 14 2015 init.ora
-rw-r--r--. 1 oracle oinstall 694 11月 22 20:36 initorcl.ora
-rw-r-----. 1 oracle oinstall 24 11月 22 20:39 lkORCL
SQL>
SQL> --pfileからspfileを作成する
SQL> CREATE SPFILE='/$ORACLE_HOME/dbs/spfileorcl.ora' FROM PFILE='/$ORACLE_HOME/dbs/initorcl.ora';
ファイルが作成されました。
SQL>
SQL> --作成結果を確認する
SQL> !ls -l $ORACLE_HOME/dbs/
合計 20
-rw-rw----. 1 oracle oinstall 1544 11月 23 17:31 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079 5月 14 2015 init.ora
-rw-r--r--. 1 oracle oinstall 694 11月 22 20:36 initorcl.ora
-rw-r-----. 1 oracle oinstall 24 11月 22 20:39 lkORCL
-rw-r-----. 1 oracle oinstall 2560 11月 23 17:33 spfileorcl.ora
SQL>
SQL> --Oracleを停止する
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL>
SQL> --Oracleを起動する
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 1073738192 bytes
Fixed Size 9142736 bytes
Variable Size 616562688 bytes
Database Buffers 444596224 bytes
Redo Buffers 3436544 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL>
SQL> --spfileで起動しているか確認する
SQL> select count(*) from v$spparameter where value is not null;
COUNT(*)
----------
16
SQL>
SQL>
SQL> --initorcl.oraがすでにあるので別名で作成してみます。
SQL> create pfile='$ORACLE_HOME/dbs/initorcl_mem.ora' from memory;
ファイルが作成されました。
SQL>
SQL> --ファイルを確認します。
SQL> !ls -l $ORACLE_HOME/dbs
合計 24
-rw-rw----. 1 oracle oinstall 1544 11月 23 17:34 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079 5月 14 2015 init.ora
-rw-r--r--. 1 oracle oinstall 694 11月 22 20:36 initorcl.ora
-rw-r--r--. 1 oracle oinstall 3769 11月 23 17:35 initorcl_mem.ora
-rw-r-----. 1 oracle oinstall 24 11月 22 20:39 lkORCL
-rw-r-----. 1 oracle oinstall 3584 11月 23 17:34 spfileorcl.ora
SQL>
SQL> --内容を確認してみます。
SQL> !more $ORACLE_HOME/dbs/initorcl_mem.ora
# Oracle init.ora parameter file generated by instance orcl on 11/23/2020 17:35:19
__data_transfer_cache_size=0
__db_cache_size=424M
__inmemory_ext_roarea=0
__inmemory_ext_rwarea=0
__java_pool_size=4M
__large_pool_size=4M
__oracle_base='/opt/oracle' # ORACLE_BASE set from environment
__pga_aggregate_target=412M
__reload_lsnr='0' # lreg reload listener
__sga_target=612M
__shared_io_pool_size=0
__shared_pool_size=168M
__streams_pool_size=0
__unified_pga_pool_size=0
_always_anti_join='CHOOSE'
_always_semi_join='CHOOSE'
_b_tree_bitmap_plans=TRUE
_bloom_serial_filter='ON'
_complex_view_merging=TRUE
_compression_compatibility='19.0.0'
_diag_adr_trace_dest='/opt/oracle/diag/rdbms/orcl/orcl/trace'
_ds_xt_split_count=1
_eliminate_common_subexpr=TRUE
_fast_full_scan_enabled=TRUE
_generalized_pruning_enabled=TRUE
_gs_anti_semi_join_allowed=TRUE
_hang_resolution_scope='OFF' # _hang_resolution_scope updated by kjznhm
_improved_outerjoin_card=TRUE
_improved_row_length_enabled=TRUE
_index_join_enabled=TRUE
_key_vector_create_pushdown_threshold=20000
_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
_mv_access_compute_fresh_data='ON'
_new_initial_join_orders=TRUE
_new_sort_cost_estimate=TRUE
_nlj_batching_enabled=1
_optim_enhance_nnull_detection=TRUE
_optim_peek_user_binds=TRUE
_optimizer_ads_use_partial_results=TRUE
_optimizer_better_inlist_costing='ALL'
_optimizer_cbqt_or_expansion='ON'
_optimizer_cluster_by_rowid_control=129
_optimizer_control_shard_qry_processing=65528
_optimizer_cost_based_transformation='LINEAR'
_optimizer_cost_model='CHOOSE'
_optimizer_extended_cursor_sharing='UDO'
_optimizer_extended_cursor_sharing_rel='SIMPLE'
_optimizer_extended_stats_usage_control=192
_optimizer_join_order_control=3
_optimizer_max_permutations=2000
_optimizer_mode_force=TRUE
_optimizer_native_full_outer_join='FORCE'
_optimizer_or_expansion='DEPTH'
_optimizer_proc_rate_level='BASIC'
_optimizer_system_stats_usage=TRUE
_optimizer_try_st_before_jppd=TRUE
_optimizer_use_cbqt_star_transformation=TRUE
_or_expand_nvl_predicate=TRUE
_ordered_nested_loop=TRUE
_parallel_broadcast_enabled=TRUE
_pivot_implementation_method='CHOOSE'
_pred_move_around=TRUE
_push_join_predicate=TRUE
_push_join_union_view=TRUE
_push_join_union_view2=TRUE
_px_dist_agg_partial_rollup_pushdown='ADAPTIVE'
_px_groupby_pushdown='FORCE'
_px_partial_rollup_pushdown='ADAPTIVE'
_px_shared_hash_join=FALSE
_px_wif_dfo_declumping='CHOOSE'
_sql_model_unfold_forloops='RUN_TIME'
_sqltune_category_parsed='DEFAULT' # parsed sqltune_category
_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
_xt_sampling_scan_granules='ON'
audit_file_dest='/opt/oracle/admin/orcl/adump'
audit_trail='DB'
connection_brokers='((TYPE=DEDICATED)(BROKERS=1))'
connection_brokers='((TYPE=EMON)(BROKERS=1))' # connection_brokers default value
control_files='/opt/oracle/oradata/orcl/control1'
control_files='/opt/oracle/oradata/orcl/control2'
core_dump_dest='/opt/oracle/diag/rdbms/orcl/orcl/cdump'
cpu_count=1
cpu_min_count='1'
db_block_size=8192
db_domain=''
db_name='orcl'
db_recovery_file_dest='/opt/oracle/oradata/orcl/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/opt/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=orcl)'
enable_pluggable_database=TRUE
log_buffer=3156K # log buffer update
memory_target=1G
open_cursors=300
optimizer_mode='ALL_ROWS'
plsql_warnings='DISABLE:ALL' # PL/SQL warnings at init.ora
processes=150
query_rewrite_enabled='TRUE'
remote_login_passwordfile='EXCLUSIVE'
result_cache_max_size=2624K
undo_tablespace='UNDOTBS1'
SQL>
SQL> --spfileorcl.oraがすでにあるので別名で作成してみます。
SQL> create spfile='$ORACLE_HOME/dbs/spfileorcl_mem.ora' from memory;
ファイルが作成されました。
SQL> --ファイルを確認します。
SQL> !ls -l $ORACLE_HOME/dbs
合計 36
-rw-rw----. 1 oracle oinstall 1544 11月 23 17:34 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 3079 5月 14 2015 init.ora
-rw-r--r--. 1 oracle oinstall 694 11月 22 20:36 initorcl.ora
-rw-r--r--. 1 oracle oinstall 3769 11月 23 17:35 initorcl_mem.ora
-rw-r-----. 1 oracle oinstall 24 11月 22 20:39 lkORCL
-rw-r-----. 1 oracle oinstall 3584 11月 23 17:34 spfileorcl.ora
-rw-r-----. 1 oracle oinstall 9728 11月 23 17:43 spfileorcl_mem.ora
SQL>
以上です。