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.