yassy's note

なんかかきます

pfileからspfileの復旧手順

先日参加したOracleDBA(Bronze)の勉強会にて、初期化パラメータの設定をミスってDBが起動しなくなるトラブルが発生した。
その際の復旧手順をメモしておく。

  • バージョン
    OracleDB 19c

事前準備

まずはOracleDBの初期化パラメータをいじって起動しないようにしておく。
ここでは、SGA_MAX_SIZEを1TBという無茶な値にした。

SQL> startup
ORA-00844: Parameter not taking MEMORY_TARGET into account
ORA-00851: SGA_MAX_SIZE 1099511627776 cannot be set to more than MEMORY_TARGET 771751936.
ORA-01078: failure in processing system parameters

復旧

まずは、現在のSPFILE(バイナリファイル)からPFILE(テキストファイル)を作成する。
PFILEの格納先はどこでも良い。

SQL> create pfile='/u01/app/oracle/oradata/ORCL/controlfile/pfile' from spfile;

File created.

ファイル内容を確認すると、初期化パラメータの一覧がテキスト形式で出力されている。

SQL> host cat /u01/app/oracle/oradata/ORCL/controlfile/pfile
orcl.__data_transfer_cache_size=0
orcl.__db_cache_size=230686720
orcl.__inmemory_ext_roarea=0
orcl.__inmemory_ext_rwarea=0
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=268435456
orcl.__sga_target=503316480
orcl.__shared_io_pool_size=16777216
orcl.__shared_pool_size=234881024
orcl.__streams_pool_size=0
orcl.__unified_pga_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/u01/app/oracle/oradata/ORCL/controlfile/o1_mf_k0hbrgw6_.ctl','/u01/app/oracle/fast_recovery_area/ORCL/controlfile/o1_mf_k0hbrgxm_.ctl'
*.db_block_size=8192
*.db_create_file_dest='/u01/app/oracle/oradata'
*.db_domain='us.oracle.com'
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=8256m
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=734m
*.open_cursors=300
*.pga_aggregate_target=104857600
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_max_size=1099511627776
*.undo_tablespace='UNDOTBS1'

ここで、PFILEの中身を正しいものに修正する。
今回はSGA_MAX_SIZEを元々の736MBに戻す。

SQL> host vi /u01/app/oracle/oradata/ORCL/controlfile/pfile
SQL>
SQL> host cat /u01/app/oracle/oradata/ORCL/controlfile/pfile
(中略)
*.sga_max_size=736M
*.undo_tablespace='UNDOTBS1'

PFILEの修正後はstartupオプションにpfileを指定して起動する。
こうすることで、PFILEが読み込まれて起動する。

SQL> startup pfile='/u01/app/oracle/oradata/ORCL/controlfile/pfile'
ORACLE instance started.

Total System Global Area  771748536 bytes
Fixed Size                  8901304 bytes
Variable Size             511705088 bytes
Database Buffers          247463936 bytes
Redo Buffers                3678208 bytes
Database mounted.
Database opened.

最後に、PFILEからSPFILEを作成すればOK。
こうすることで、再起動時は正しい設定のSPFILEを読み込むため、無事起動する。

SQL> create spfile from pfile='/u01/app/oracle/oradata/ORCL/controlfile/pfile';

File created.