株式会社コーソル

KNOWLEDGE

コーソルの技術情報

コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。

KNOWLEDGE検索人気のキーワード

Oracle DB ベストプラクティス

サーバーパラメータファイル(spfile)の復旧方法

初期化パラメータを格納するファイルの形式として、現在はサーバーパラメータファイル(spfile)を使用することが一般的です。
サーバーパラメータファイルにはいくつかの利点があります。しかし、テキスト形式の初期化パラメータファイルでは簡単にできたことが、すこし工夫が必要で面倒になってしまう状況がいくつかあります。そのうちの1つであるバックアップが存在しない状況において、サーバーパラメータファイルが破損した時の復旧方法について記載します。

01.以前の設定内容でテキスト形式の初期化パラメータファイルを作成する

初期化パラメータの設定内容を把握し、その設定でテキスト形式の初期化パラメータファイルを作成します。
インスタンス起動時にアラートログへ出力される ‘System parameters with non-default values’という箇所に、サーバーパラメータファイルに明示的に設定された設定項目が出力されますので、これを参考にします。

Starting up ORACLE RDBMS Version: 11.1.0.7.0.
Using parameter settings in server-side spfile C:¥ORACLE¥PRODUCT¥11.1.0¥EE2¥DATABASE¥SPFILEORCL.ORA
System parameters with non-default values:
processes                = 150
nls_language             = "JAPANESE"
nls_territory            = "JAPAN"
memory_target            = 300M
control_files            = "C:¥ORACLE¥ORADATA¥ORCL¥CONTROL01.CTL"
control_files            = "C:¥ORACLE¥ORADATA¥ORCL¥CONTROL02.CTL"
control_files            = "D:¥ORADATA¥CONTROL03.CTL"
db_block_size            = 8192
compatible               = "11.1.0.0.0"
db_recovery_file_dest    = "G:¥fra"
db_recovery_file_dest_size= 10G
undo_tablespace          = "UNDOTBS1"
remote_login_passwordfile= "EXCLUSIVE"
db_domain                = ""
dispatchers              = "(PROTOCOL=TCP) (SERVICE=ORCLXDB)"
audit_file_dest          = "C:¥ORACLE¥ADMIN¥ORCL¥ADUMP"
db_name                  = "ORCL"
open_cursors             = 300
aq_tm_processes          = 0
diagnostic_dest          = "C:¥ORACLE"
Mon Apr 27 16:49:26 2009
PMON started with pid=2, OS id=2196

この出力は「初期化パラメータ名 = 設定値」という初期化パラメータファイルでの記載フォーマットになっているため、Oracle Database 11.1 以降ではそのまま初期化パラメータファイルに流用できます。
具体的には、上記出力を例にすると、「processes = 150」の箇所から「diagnostic_dest = “C:¥ORACLE”」までの箇所をcopyして行頭の空白をとりのぞいたテキストを、初期化パラメータファイルとして保存すればOKです。
ただし、Oracle Database 10.2以前では、設定値が数値でない初期化パラメータについては、設定値がダブルクオートで囲まれていないことに注意が必要です。初期化パラメータファイルに設定を記載する場合、設定値に特殊文字(’#’:シャープ記号, ‘(‘:左カッコ, ‘)’:右カッコ, ‘”‘:二重引用符, ”’:一重引用符, ‘=’:等号, ‘,’:カンマ, ‘-‘:マイナス記号, ‘\’:バックスラッシュ)が含まれている場合は、ダブルクオートで囲む必要があります。

System parameters with non-default values:
processes                = 150
nls_language             = JAPANESE
nls_territory            = JAPAN
sga_target               = 268435456
control_files            = C:¥ORACLE¥ORADATA¥O10204¥CONTROL01.CTL, C:¥ORACLE¥ORADATA¥O10204¥CONTROL02.CTL, C:¥ORACLE¥ORADATA¥O10204¥CONTROL03.CTL
db_block_size            = 8192
compatible               = 10.2.0.3.0
db_file_multiblock_read_count= 16
db_recovery_file_dest    = C:¥oracle¥flash_recovery_area
db_recovery_file_dest_size= 6442450944
undo_management          = AUTO
undo_tablespace          = UNDOTBS1
remote_login_passwordfile= EXCLUSIVE
db_domain                =
dispatchers              = (PROTOCOL=TCP) (SERVICE=O10204XDB)
job_queue_processes      = 10
audit_file_dest          = C:¥ORACLE¥ADMIN¥O10204¥ADUMP
background_dump_dest     = C:¥ORACLE¥ADMIN¥O10204¥BDUMP
user_dump_dest           = C:¥ORACLE¥ADMIN¥O10204¥UDUMP
core_dump_dest           = C:¥ORACLE¥ADMIN¥O10204¥CDUMP
db_name                  = O10204
open_cursors             = 300
MMAN started with pid=4, OS id=2916

もちろん、初期化パラメータの設定内容が記載された設計書などのドキュメントがあれば、これも参考にできます。

02.暫定的に作成した初期化パラメータファイルでインスタンスを起動する

上記の手順で作成した初期化パラメータファイルのファイル名を init[ORACLE_SID].ora として、デフォルトの位置(ディレクトリ)に配置します。

  • UNIX/Linux $ORACLE_HOME/db
  • Windows %ORACLE_HOME%¥database

 

デフォルトの位置に、spfile[ORACLE_SID].ora、spfile.ora という名前のファイルがある場合、これが優先して読み込まれてしまい、上記の手順で作成した初期化パラメータファイルが読み込まれません。この場合、spfile[ORACLE_SID].ora、spfile.ora のファイル名を他のファイル名にリネームしておきます。
初期化パラメータファイルを適切に配置したら、startupコマンドでインスタンスを起動します。

03.初期化パラメータファイルからサーバーパラメータファイルを作成します

CREATE SPFILE FROM PFILE コマンドを実行して、初期化パラメータファイルからサーバーパラメータファイルを作成します。

SQL> CREATE SPFILE FROM PFILE;

サーバーパラメータファイルはデフォルトの位置にspfile[ORACLE_SID].ora として作成されます。
インスタンスを再起動すると、インスタンスはサーバーパラメータファイルを読み込みます。
読み込みの優先度が低いため、暫定的に作成した初期化パラメータファイルは以後読み込まれません。しかし、混乱を避けるため、削除するか別のファイル名にリネームすることが良いでしょう。