Oracle資料庫:從alert log恢復spfile
阿新 • • 發佈:2020-02-20
今天做實驗,改了幾個系統引數,結果資料庫無法啟動,報錯:
SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/opt/oracle/product/19c/dbhome_1/dbs/initORCLCDB.ora'
在$ORACLE_HOME/dbs
目錄下找不到spfile,也找不到pfile。
但controlfile還在:
$ ls -l $ORACLE_BASE/oradata/ORCLCDB/*.ctl -rw-r-----. 1 oracle oinstall 18759680 Feb 20 17:40 /opt/oracle/oradata/ORCLCDB/control01.ctl -rw-r-----. 1 oracle oinstall 18759680 Feb 20 17:40 /opt/oracle/oradata/ORCLCDB/control02.ctl
controlfile在就比較好。因為資料檔案的位置都在這裡。
關於恢復的思路,參考了這篇文章:How to Recover From Lost or Missing Database Parameter Files (PFILE or SPFILE。
選擇從alert log恢復spfile。alert log位置在$ORACLE_BASE/diag/rdbms/<sid>/<sid>/trace
:
$ cat /opt/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/alert_ORCLCDB.log ... processes = 300 sga_max_size = 2000M nls_language = "AMERICAN" nls_territory = "AMERICA" filesystemio_options = "setall" resource_manager_plan = "low_prio_apps" _exadata_feature_on = TRUE sga_target = 1500M control_files = "/opt/oracle/oradata/ORCLCDB/control01.ctl" control_files = "/opt/oracle/oradata/ORCLCDB/control02.ctl" db_block_size = 8192 compatible = "19.0.0" db_create_file_dest = "/opt/oracle/oradata" undo_tablespace = "UNDOTBS1" heat_map = "OFF" inmemory_size = 700M inmemory_automatic_level = "OFF" remote_login_passwordfile= "EXCLUSIVE" audit_sys_operations = FALSE dispatchers = "(PROTOCOL=TCP) (SERVICE=ORCLCDBXDB)" local_listener = "LISTENER_ORCLCDB" audit_file_dest = "/opt/oracle/admin/ORCLCDB/adump" commit_wait = "nowait" commit_logging = "batch" audit_trail = "NONE" db_name = "ORCLCDB" open_cursors = 300 pga_aggregate_target = 384M diagnostic_dest = "/opt/oracle" enable_pluggable_database= TRUE ...
將以上部分存為檔案/tmp/pfile。
然後:
$ sqlplus / as sysdba
SQL> create spfile from pfile='/tmp/pfile'
SQL> startup
或者:
$ sqlplus / as sysdba
SQL> startup pfile='/tmp/pfile'
SQL> create spfile from memory