Oracle11g數據庫參數文件誤刪除恢復
本文測試了誤刪除spfile,pfile,init.ora等文件后的恢復方法,考慮多種場景,在不同場景下進行參數文件恢復。
第一步:連上數據庫,查看spfile文件所在路徑
-
[oracle@ora11g ~]$ sqlplus / as sysdba
-
-
SQL*Plus: Release 11.2.0.4.0 Production on Wed Aug 2 11:37:08 2017
-
-
Copyright (c) 1982, 2013, Oracle. All rights reserved.
-
-
Connected to an idle instance.
-
-
SYS@cams>startup;
-
ORACLE instance started.
-
-
Total System Global Area 776646656 bytes
-
Fixed Size 2257272 bytes
-
Variable Size 478154376 bytes
-
Database Buffers 289406976 bytes
-
Redo Buffers 6828032 bytes
-
Database mounted.
-
Database opened.
-
SYS@cams>show parameter pfile;
-
-
NAME TYPE VALUE
-
------------------------------------ ----------- ------------------------------
-
spfile string /u01/app/oracle/product/11.2.0
-
/db_1/dbs/spfilecams.ora
第二步:查看參數文件路徑下文件信息
-
[oracle@ora11g ~]$ cd $ORACLE_HOME/dbs
-
[oracle@ora11g dbs]$ ls
-
hc_cams.dat init.ora lkCAMS orapwcams spfilecams.ora
第三步:為了便于測試,這里創建一個pfile文件
-
SYS@cams>create pfile from spfile;
-
-
File created.
查看新創建的pfile文件
-
[oracle@ora11g dbs]$ ls
-
hc_cams.dat initcams.ora init.ora lkCAMS orapwcams spfilecams.ora
查看每個參數文件的內容
第四步:模擬參數文件被誤刪除
-
[oracle@ora11g dbs]$ mkdir backup
-
[oracle@ora11g dbs]$ mv initcams.ora init.ora spfilecams.ora backup/
-
[oracle@ora11g dbs]$ ls
-
backup hc_cams.dat lkCAMS orapwcams
-
[oracle@ora11g dbs]$ ls backup/
-
initcams.ora init.ora spfilecams.ora
第五步:檢查數據庫是否還能正常工作
-
SYS@cams>select name,open_mode from v$database;
-
-
NAME OPEN_MODE
-
--------- --------------------
-
CAMS READ WRITE
顯然,現在數據庫是可以正常工作的,因為數據庫啟動過程中已經將spfile參數文件的信息讀到內存中。
第六步:這里模擬在數據庫運行時,及時發現參數文件被誤刪除,進行恢復。
這里需要用到Oracle11gR2的新特性,對于Oracle官方文檔的路徑為:
Home / Database / Oracle Database Online Documentation 11g?Release 2 (11.2) / Database Administration/SQL Language Reference/What's New in the SQL Language Reference?
可以找到
CREATE PFILE has new syntax that lets you create a parameter file from current system-wide parameter settings.
CREATE SPFILE has new syntax that lets you create a system parameter file from current system-wide parameter settings.
點擊create pfile或者create spfile進入鏈接頁面,可以找到SQL命令:
CREATE PFILE [= 'pfile_name' ]
FROM { SPFILE [= 'spfile_name']
| MEMORY
} ;
CREATE SPFILE [= 'spfile_name' ]
FROM { PFILE [= 'pfile_name' ]
| MEMORY
} ;
這里執行恢復語句:
-
SYS@cams>create spfile from memory;
-
create spfile from memory
-
*
-
ERROR at line 1:
-
ORA-32002: cannot create SPFILE already being used by the instance
-
-
-
SYS@cams>create pfile from memory;
-
-
File created.
-
-
SYS@cams>create spfile='spfilecams1.ora' from memory;
-
-
File created.
查看恢復后的spfile和pfile文件:
第七步:重啟數據庫,檢查恢復后的參數文件能否正常使用,并進行分析
-
SYS@cams>shutdown immediate;
-
Database closed.
-
Database dismounted.
-
ORACLE instance shut down.
-
SYS@cams>host mv /u01/app/oracle/product/11.2.0/db_1/dbs/spfilecams1.ora /u01/app/oracle/product/11.2.0/db_1/dbs/spfilecams.ora
-
-
SYS@cams>startup;
-
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
-
ORACLE instance started.
-
-
Total System Global Area 776646656 bytes
-
Fixed Size 2257272 bytes
-
Variable Size 482348680 bytes
-
Database Buffers 285212672 bytes
-
Redo Buffers 6828032 bytes
-
Database mounted.
-
Database opened.
這里出現ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance的問題,是因為background_dump_dest和user_dump_dest兩個參數在11gR1中廢棄了,在alert日志中可以看到明確提示:
對于兩個廢棄參數信息,可以查看官方文檔
Home / Database / Oracle Database Online Documentation 11g?Release 1 (11.1) / Database Administration/Reference/1?Initialization Parameters
在BACKGROUND_DUMP_DEST目錄下看到:
Note:
This parameter is ignored by the new diagnosability infrastructure introduced in Oracle Database 11g Release 1, which places trace and core files in a location controlled by the DIAGNOSTIC_DEST initialization parameter.
在USER_DUMP_DEST目錄下看到:
Note:
This parameter is ignored by the new diagnosability infrastructure introduced in Oracle Database 11g Release 1, which places trace and core files in a location controlled by the DIAGNOSTIC_DEST initialization parameter.
第八步:調整pfile參數文件,并創建spfile文件后啟動
打開pfile文件,可以看到兩個棄用的參數后面都有注釋“#Deprecate parameter”
將兩個廢棄的參數注釋,然后生成spfile文件后啟動
-
SYS@cams>create spfile from pfile;
-
-
File created.
-
-
SYS@cams>startup;
-
ORACLE instance started.
-
-
Total System Global Area 776646656 bytes
-
Fixed Size 2257272 bytes
-
Variable Size 482348680 bytes
-
Database Buffers 285212672 bytes
-
Redo Buffers 6828032 bytes
-
Database mounted.
-
Database opened.
第九步:模擬在第六步的時候未能及時發現參數文件被誤刪除,然后數據庫關閉了,啟動的時候報錯。
-
[oracle@ora11g dbs]$ ls
-
backup hc_cams.dat initcams.ora lkCAMS orapwcams spfilecams.ora
-
[oracle@ora11g dbs]$ mkdir backup1
-
[oracle@ora11g dbs]$ mv initcams.ora spfilecams.ora backup1/
-
[oracle@ora11g dbs]$ ls backup1/
-
initcams.ora spfilecams.ora
-
[oracle@ora11g dbs]$ ls
-
backup backup1 hc_cams.dat lkCAMS orapwcams
-
SYS@cams>shutdown immediate;
-
Database closed.
-
Database dismounted.
-
ORACLE instance shut down.
-
SYS@cams>startup;
-
ORA-01078: failure in processing system parameters
-
LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initcams.ora'
第十步:找到alert日志,通過alert日志中的啟動信息恢復pfile參數文件。
-
[oracle@ora11g dbs]$ cd /u01/app/oracle/diag/rdbms/cams/cams/trace/
-
[oracle@ora11g trace]$ ls | grep alert
-
alert_cams.log
找到最近幾次成功的日志信息,選取其中正確無誤的一條日志信息:
創建pfile文件initcams.ora,將alert日志中的參數信息填入:
-
[oracle@ora11g trace]$ cd $ORACLE_HOME/dbs
-
[oracle@ora11g dbs]$ ls
-
backup backup1 hc_cams.dat lkCAMS orapwcams
-
[oracle@ora11g dbs]$ vi initcams.ora
-
[oracle@ora11g dbs]$ cat initcams.ora
-
processes = 150
-
memory_target = 744M
-
control_files = "/u01/app/oracle/oradata/cams/control01.ctl"
-
control_files = "/u01/app/oracle/fast_recovery_area/cams/control02.ctl"
-
db_block_size = 8192
-
compatible = "11.2.0.4.0"
-
db_recovery_file_dest = "/u01/app/oracle/fast_recovery_area"
-
db_recovery_file_dest_size= 4182M
-
undo_tablespace = "UNDOTBS1"
-
remote_login_passwordfile= "EXCLUSIVE"
-
db_domain = ""
-
dispatchers = "(PROTOCOL=TCP) (SERVICE=camsXDB)"
-
job_queue_processes = 1000
-
audit_file_dest = "/u01/app/oracle/admin/cams/adump"
-
audit_trail = "DB"
-
db_name = "cams"
-
open_cursors = 300
-
diagnostic_dest = "/u01/app/oracle"
直接使用pfile文件啟動數據庫:
-
SYS@cams>startup pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initcams.ora';
-
ORACLE instance started.
-
-
Total System Global Area 776646656 bytes
-
Fixed Size 2257272 bytes
-
Variable Size 511708808 bytes
-
Database Buffers 255852544 bytes
-
Redo Buffers 6828032 bytes
-
Database mounted.
-
Database opened.
第十一步:這里假設第十步的alert日志中沒找到參數信息,需要進行恢復,假設init.ora還能找到。
-
[oracle@ora11g backup]$ ls
-
initcams.ora init.ora spfilecams.ora
-
[oracle@ora11g backup]$ cat init.ora | grep -v ^# | grep -v ^$ > initcams.ora
-
[oracle@ora11g backup]$ cat initcams.ora
-
db_name='ORCL'
-
memory_target=1G
-
processes = 150
-
audit_file_dest='<ORACLE_BASE>/admin/orcl/adump'
-
audit_trail ='db'
-
db_block_size=8192
-
db_domain=''
-
db_recovery_file_dest='<ORACLE_BASE>/flash_recovery_area'
-
db_recovery_file_dest_size=2G
-
diagnostic_dest='<ORACLE_BASE>'
-
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
-
open_cursors=300
-
remote_login_passwordfile='EXCLUSIVE'
-
undo_tablespace='UNDOTBS1'
-
control_files = (ora_control1, ora_control2)
-
compatible ='11.2.0'
然后根據實際環境情況修改initcams.ora,啟動數據庫,不過可能會出現部分參數的值與原數據庫不一致,需要DBA進行調整。
第十二步:這里假設第十步的alert日志中沒找到參數信息,需要進行恢復,假設init.ora不能找到。
-
[oracle@ora11g dbs]$ vi initcams.ora
-
[oracle@ora11g dbs]$ cat initcams.ora
-
db_name='cams'
使用pfile啟動數據庫:
-
SYS@cams>shutdown immediate;
-
Database closed.
-
Database dismounted.
-
ORACLE instance shut down.
-
SYS@cams>startup pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initcams.ora';
-
ORACLE instance started.
-
-
Total System Global Area 263090176 bytes
-
Fixed Size 2252256 bytes
-
Variable Size 205521440 bytes
-
Database Buffers 50331648 bytes
-
Redo Buffers 4984832 bytes
-
ORA-00205: error in identifying control file, check alert log for more info
檢查alert日志
-
[oracle@ora11g trace]$ tail -n 20 alert_cams.log
-
CKPT started with pid=12, OS id=5722
-
Wed Aug 02 14:38:15 2017
-
SMON started with pid=13, OS id=5724
-
Wed Aug 02 14:38:15 2017
-
RECO started with pid=14, OS id=5726
-
Wed Aug 02 14:38:15 2017
-
MMON started with pid=15, OS id=5728
-
Wed Aug 02 14:38:15 2017
-
MMNL started with pid=16, OS id=5730
-
ORACLE_BASE from environment = /u01/app/oracle
-
Wed Aug 02 14:38:15 2017
-
ALTER DATABASE MOUNT
-
ORA-00210: cannot open the specified control file
-
ORA-00202: control file: '/u01/app/oracle/product/11.2.0/db_1/dbs/cntrlcams.dbf'
-
ORA-27037: unable to obtain file status
-
Linux-x86_64 Error: 2: No such file or directory
-
Additional information: 3
-
ORA-205 signalled during: ALTER DATABASE MOUNT...
-
Wed Aug 02 14:38:15 2017
-
Checker run found 1 new persistent data failures
修改pfile文件,指定control_files參數(如果真的忘了,可以用linux命令查找)
-
[oracle@ora11g dbs]$ find $ORACLE_BASE -name control*
-
/u01/app/oracle/product/11.2.0/db_1/oc4j/j2ee/oc4j_applications/applications/em/em/images/database/storage/controlfile.gif
-
/u01/app/oracle/product/11.2.0/db_1/apex/images/fck/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
-
/u01/app/oracle/product/11.2.0/db_1/apex/images/fck/editor/dialog/fck_spellerpages/spellerpages/controls.html
-
/u01/app/oracle/fast_recovery_area/cams/control02.ctl
-
/u01/app/oracle/oradata/cams/control01.ctl
-
[oracle@ora11g dbs]$ vi initcams.ora
-
[oracle@ora11g dbs]$ cat initcams.ora
-
db_name='cams'
-
control_files='/u01/app/oracle/oradata/cams/control01.ctl','/u01/app/oracle/fast_recovery_area/cams/control02.ctl'
再次使用pfile啟動數據庫
-
SYS@cams>shutdown immediate;
-
ORA-01507: database not mounted
-
-
-
ORACLE instance shut down.
-
SYS@cams>startup;
-
ORACLE instance started.
-
-
Total System Global Area 263090176 bytes
-
Fixed Size 2252256 bytes
-
Variable Size 205521440 bytes
-
Database Buffers 50331648 bytes
-
Redo Buffers 4984832 bytes
-
ORA-00201: control file version 11.2.0.4.0 incompatible with ORACLE version
-
11.2.0.0.0
-
ORA-00202: control file: '/u01/app/oracle/oradata/cams/control01.ctl'
查看錯誤信息
-
[oracle@ora11g dbs]$ oerr ORA 00201
-
00201, 00000, "control file version %s incompatible with ORACLE version %s"
-
// *Cause: The control file was created by incompatible software.
-
// *Action: Either restart with a compatible software release or use
-
// CREATE CONTROLFILE to create a new control file that is
-
// compatible with this release.
這里需要在參數文件配置一個compatible參數
-
[oracle@ora11g dbs]$ vi initcams.ora
-
[oracle@ora11g dbs]$ cat initcams.ora
-
db_name='cams'
-
control_files='/u01/app/oracle/oradata/cams/control01.ctl','/u01/app/oracle/fast_recovery_area/cams/control02.ctl'
-
compatible="11.2.0.4.0"
再次使用pfile啟動數據庫
-
SYS@cams>shutdown immediate;
-
ORA-01507: database not mounted
-
-
-
ORACLE instance shut down.
-
SYS@cams>startup;
-
ORACLE instance started.
-
-
Total System Global Area 263090176 bytes
-
Fixed Size 2252256 bytes
-
Variable Size 205521440 bytes
-
Database Buffers 50331648 bytes
-
Redo Buffers 4984832 bytes
-
Database mounted.
-
Database opened.
數據庫啟動成功。同時,我們也從測試過程中知道,參數文件至少需要配置db_name,control_files和compatible等3個參數信息,可以讓數據庫成功啟動。不過啟動之后也需要DBA對數據庫參數進行調整。