Oracleデータベースを効率的に運用するためには、初期化パラメータの理解が不可欠です。これらのパラメータはデータベースのパフォーマンスや動作に大きく影響を与えます。この記事では、初期化パラメータの基本、動的パラメータと静的パラメータの違い、PFILEとSPFILEの作成方法、どちらのファイルが使用されているかを確認する方法、そしてファイルを指定してインスタンスを起動する方法について解説します。
1. 初期化パラメータとは?
初期化パラメータは、データベースインスタンスの起動時に読み込まれ、データベースのリソースや動作を管理する設定の集合です。これらのパラメータは、データベースの性能、安定性、および接続数を左右するため、適切な設定が必要です。
1.1 PFILEとSPFILEの違い
- PFILE (Parameter File): テキスト形式で記述され、手動で編集可能なファイルです。変更した内容を有効にするためにはデータベースの再起動が必要です。
- SPFILE (Server Parameter File): バイナリ形式のファイルで、Oracleのコマンドを使って動的に変更できます。SPFILEは、設定を変更後すぐに反映させることができ、再起動なしで変更が可能です。
2. 動的パラメータと静的パラメータ
2.1 動的パラメータ
動的パラメータは、データベースの稼働中に変更可能で、即座にシステムに反映されます。メモリ管理やセッションの動作に関連するパラメータが主に含まれます。
- 例:
MEMORY_TARGET
,SGA_TARGET
,PGA_AGGREGATE_TARGET
変更するパラメータが動的パラメータかどうかはマニュアルで確認が可能です。
以下のように変更可能欄が「ALTER SYSTEM」と記載されていると動的パラメータです。
2.2 静的パラメータ
静的パラメータは、データベースの起動時にのみ読み込まれ、稼働中に変更することはできません。これらのパラメータを変更するには、データベースを停止して再起動する必要があります。
- 例:
PROCESSES
,DB_BLOCK_SIZE
変更するパラメータが静的パラメータかどうかはマニュアルで確認が可能です。
以下のように変更可能欄が「いいえ」と記載されていると静的パラメータです。
3. SPFILEとPFILEの相互作成方法
Oracleデータベースでは、PFILEからSPFILEを作成したり、その逆も可能です。これにより、システム管理者はテキスト形式のPFILEを使って簡単に設定を変更し、その設定をSPFILEに反映させて動的に管理することができます。
3.1 SPFILEからPFILEを作成する方法
SPFILEからPFILEを作成するには、CREATE PFILE
コマンドを使用します。このコマンドにより、現在のSPFILEの内容をテキスト形式のPFILEに書き出すことができます。
CREATE PFILE='<作成するpfileのフルパス>’ FROM SPFILE;
例: CREATE PFILE='/path/to/init.ora' FROM SPFILE;
上記のコマンドでは、SPFILEの内容が/path/to/init.ora
に保存されます。
3.2 PFILEからSPFILEを作成する方法
PFILEからSPFILEを作成する場合は、CREATE SPFILE
コマンドを使用します。これにより、テキスト形式のPFILEからバイナリ形式のSPFILEを生成します。
CREATE SPFILE='<作成するspfileのフルパス>’ FROM PFILE='<元となるpfileのフルパス>’;
例: CREATE SPFILE='/path/to/spfile.ora' FROM PFILE='/path/to/init.ora';
このコマンドにより、/path/to/init.ora
からSPFILEが作成され、指定されたパスに保存されます。
4. 現在のパラメータの設定を確認する方法
以下のコマンドを実行することで現在のパラメータを確認することが可能です。SHOW PARAMETER <初期化パラメータ名>
もしくは SHOW PARAMETER と入力することで全ての初期化パラメータの設定を確認することもできますが、数百にもおよぶパラメータが出力されてしまうため、上記のように初期化パラメータ名を指定して確認した方が良いです。
【初期化パラメータ名を指定した場合】
SQL> show parameter open_cursors
NAME TYPE VALUE
------------------------------------ -------------------- -------------------------------
open_cursors integer 300
【初期化パラメータ名を指定しない場合】
SQL> show parameter
NAME TYPE VALUE
------------------------------------ -------------------- -------------------------------
DBFIPS_140 boolean FALSE
active_instance_count integer
adg_account_info_tracking string LOCAL
adg_redirect_dml boolean FALSE
allow_global_dblinks boolean FALSE
allow_group_access_to_sga boolean FALSE
allow_rowid_column_type boolean FALSE
approx_for_aggregation boolean FALSE
approx_for_count_distinct boolean FALSE
approx_for_percentile string none
aq_tm_processes integer 1
archive_lag_target integer 0
asm_diskstring string
asm_preferred_read_failure_groups string
audit_file_dest string /u01/app/oracle/admin/v19/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB
autotask_max_active_pdbs integer 2
awr_pdb_autoflush_enabled boolean FALSE
awr_pdb_max_parallel_slaves integer 10
awr_snapshot_time_offset integer 0
:
5. 現在のインスタンスがPFILEまたはSPFILEを使用しているかを確認する方法
現在のデータベースインスタンスがPFILEまたはSPFILEを使用して起動されているかを確認するためには、以下のSQLを実行します。SHOW PARAMETER spfile
結果にSPFILEのパスが表示される場合は、データベースがSPFILEを使用していることがわかります。表示されない場合は、PFILEが使用されています。
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ -------------------- ------------------------------
spfile string /u01/app/oracle/product/19.0.0
/dbhome_1/dbs/spfilev19.ora
★spfileが使用されている
6. 初期化パラメータの変更方法
6.1 初期化パラメータの変更方法(spfile)
spfileを使用している場合の初期化パラメータは以下のように変更することができます。
ALTER SYSTEM SET <初期化パラメータ> = <変更する値> SCOPE= [ MEMORY | SPFILE | BOTH ];
※scopeについては後述
6.2 初期化パラメータの変更方法(pfile)
pfileを使用している場合は、pfileを直接編集します。
pfileを編集後、インスタンスを再起動することで変更したパラメータが反映します。
【参考】
以下は自環境でspfileからpfileを作成しpfileを確認した結果です。
pfileを使用してインスタンスを起動している場合、このファイルの値を直接編集し、再起動することで設定が変更されます。
ただしデフォルトの設定のままのパラメータは記載されていないため、変更する場合は追記します。
[oracle@v19single dbs]$ pwd
/u01/app/oracle/product/19.0.0/dbhome_1/dbs
[oracle@v19single dbs]$ cat initv19.ora
v19.__data_transfer_cache_size=0
v19.__db_cache_size=587202560
v19.__inmemory_ext_roarea=0
v19.__inmemory_ext_rwarea=0
v19.__java_pool_size=16777216
v19.__large_pool_size=16777216
v19.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
v19.__pga_aggregate_target=620756992
v19.__sga_target=922746880
v19.__shared_io_pool_size=50331648
v19.__shared_pool_size=234881024
v19.__streams_pool_size=0
v19.__unified_pga_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/v19/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/u01/app/oracle/oradata/V19/control01.ctl','/u01/app/oracle/oradata/V19/control02.ctl'
*.db_block_size=8192
*.db_name='v19'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=v19XDB)'
*.memory_target=1457m
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
[oracle@v19single dbs]$
7. SCOPEオプションについて
初期化パラメータを変更する際には、SCOPE
オプションを使って変更の反映方法を指定できます。SCOPEには次の3つのオプションがあります。
- SCOPE=MEMORY: 変更は現在のメモリ(セッション)にのみ反映され、データベースを再起動すると設定は失われます。
- SCOPE=SPFILE: 変更はSPFILEに保存され、再起動後に有効になります。現在のセッションには影響を与えません。
- SCOPE=BOTH: 変更は現在のセッションにもSPFILEにも反映され、再起動後も設定が保持されます。
7.1 SCOPEオプションの使用例
例えば、SGA_TARGET
を動的に変更し、再起動後もその設定を保持する場合は、次のようにSCOPE=BOTH
を指定します。
ALTER SYSTEM SET SGA_TARGET = 2G SCOPE=BOTH;
このコマンドにより、変更は即座に適用され、次回の再起動後もこの設定が有効になります。
ただし、静的パラメータについては scope=spfile を指定する必要があります。
(パラメータの変更に再起動が必要なため。)
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ -------------------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
gcs_server_processes integer 0
global_txn_processes integer 1
job_queue_processes integer 20
log_archive_max_processes integer 4
processes integer 300 ★
SQL> alter system set processes=400 scope=both;
alter system set processes=400 scope=both
*
行1でエラーが発生しました。:
ORA-02095: 指定した初期化パラメータを変更できません。 ★scope=spfileを指定していないため失敗する
SQL> alter system set processes=400 scope=spfile;
システムが変更されました。
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ -------------------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
gcs_server_processes integer 0
global_txn_processes integer 1
job_queue_processes integer 20
log_archive_max_processes integer 4
processes integer 300 ★変更されていない
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 1543500120 bytes
Fixed Size 8925528 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7847936 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ -------------------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
gcs_server_processes integer 0
global_txn_processes integer 1
job_queue_processes integer 20
log_archive_max_processes integer 4
processes integer 400 ★再起動後変更されている
8. SPFILEまたはPFILEを指定してデータベースを起動する方法
データベースを起動する際に、明示的にSPFILEまたはPFILEを指定してインスタンスを起動することができます。
8.1 PFILEを指定して起動する方法
PFILEを使用してデータベースを起動する場合は、STARTUP
コマンドにPFILE
オプションを指定します。
STARTUP PFILE='<pfileのフルパス>’;
例: STARTUP PFILE='/path/to/init.ora';
このコマンドでは、指定されたPFILEを使用してインスタンスが起動されます。
8.2 SPFILEを指定して起動する方法
SPFILEは通常自動的に使用されますが、特定のSPFILEを明示的に指定して起動することも可能です。これは、環境に応じて異なる設定を適用する必要がある場合などに有用です。STARTUP SPFILE='<spfileのフルパス>';
例: STARTUP SPFILE='/path/to/spfile.ora';
このコマンドでは、指定したSPFILEを使用してデータベースインスタンスが起動されます。
明示的にspfileやpfileを指定しない場合は以下の優先順位でファイルを読み込みます。
1. $ORACLE_HOME/dbs/spfile<SID>.ora
2. $ORACLE_HOME/dbs/spfile.ora
3. $ORACLE_HOME/dbs/init<SID>.ora
4. $ORACLE_HOME/dbs/init.ora
※Windowsの場合は %ORACLE_HOME%\database 配下のファイル
9. よく使われる初期化パラメータの例
ここでは、よく使用される初期化パラメータの一部を紹介します。
9.1 MEMORY_TARGET
MEMORY_TARGETは、Oracleのメモリ使用量を自動的に管理するためのパラメータです。これを設定することで、データベースが必要に応じて自動的にメモリの配分を調整してくれます。
- 設定例:
MEMORY_TARGET = 4G
9.2 SGA_TARGETとPGA_AGGREGATE_TARGET
- SGA_TARGET: システムグローバル領域 (SGA) のサイズを決定します。SGAはデータベースのキャッシュやバッファ、各種データ構造を管理するための領域です。
- PGA_AGGREGATE_TARGET: プログラムグローバル領域 (PGA) の合計サイズを指定します。PGAは各セッションで個別に使用されるメモリです。
9.3 PROCESSES
PROCESSESは、Oracleデータベースに接続できるプロセスの最大数を指定します。接続数が多い環境では、このパラメータを適切に設定することでリソースの不足を防げます。
- 設定例:
PROCESSES = 300
9.4 OPEN_CURSORS
OPEN_CURSORSは、各セッションで同時に開けるカーソル(SQL文)の数を制限するパラメータです。カーソル数が不足するとエラーが発生するため、アプリケーションに応じて設定を調整します。
- 設定例:
OPEN_CURSORS = 1000
10. まとめ
初期化パラメータは、Oracleデータベースの運用において非常に重要です。動的パラメータと静的パラメータの違いや、SPFILEとPFILEの相互作成方法を理解することで、システムを柔軟に管理できるようになります。さらに、SCOPEオプションを使って設定を即座に反映させたり、PFILEやSPFILEを指定してデータベースを起動する方法を身につけることで、データベース管理の幅が広がるでしょう。
コメント