探索ORACLE之RMAN_07 參數檔案丢失恢複
作者:吳偉龍 Name:Prodence Woo
QQ:286507175 msn:[email protected]
Oracle資料庫的參數檔案有兩種一種是pfile(初始化參數檔案),還有一種是spfile(伺服器初始化參數檔案);實際上spfile是pfile衍生過來的一新參數檔案,應用9i以後的版本,在9i之前的版本都不支援,隻支援pfile;而且pfile是不能通過oracle指令來進行備份的,隻有spfile才支援備份。
通過RMAN的備份來實作參數檔案的恢複,僅适用于9i以後
1、通過rman備份參數檔案:
RMAN> backupspfile;
Starting backupat 05-JUL-12
using channelORA_DISK_1
channelORA_DISK_1: starting full datafile backupset
channelORA_DISK_1: specifying datafile(s) in backupset
including currentSPFILE in backupset
channelORA_DISK_1: starting piece 1 at 05-JUL-12
channelORA_DISK_1: finished piece 1 at 05-JUL-12
piecehandle=/DBBak/bak_WWL_07_05_03nfbi5c_1_1 tag=TAG20120705T175348 comment=NONE
channelORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backupat 05-JUL-12
Starting ControlFile and SPFILE Autobackup at 05-JUL-12
piecehandle=/DBSoft/product/10.2.0/db_1/dbs/c-5520179-20120705-01 comment=NONE
Finished ControlFile and SPFILE Autobackup at 05-JUL-12
RMAN>
2、備份完之後,我們可以看到如下備份資訊:
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- ------------ ----------- ------------ ---------------
3 Full 80.00K DISK 00:00:01 05-JUL-12
BP Key: 3 Status: AVAILABLE Compressed: NO Tag: TAG20120705T175348
Piece Name:/DBBak/bak_WWL_07_05_03nfbi5c_1_1
SPFILE Included: Modification time: 05-JUL-12
3、模拟參數檔案丢失:
SQL> showparameter spfile;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
spfile string /DBSoft/product/10.2.0/db_1/db
s/spfileWWL.ora
SQL>
删除參數檔案:
[oracle@wwldb ~]$ rm /DBSoft/product/10.2.0/db_1/dbs/spfileWWL.ora
[oracle@wwldb ~]$ ls /DBSoft/product/10.2.0/db_1/dbs/spfileWWL.ora
ls: /DBSoft/product/10.2.0/db_1/dbs/spfileWWL.ora: No such file ordirectory
[oracle@wwldb dbs]$ ll
total 7240
drwxr-xr-x 2 oracle oinstall 4096 Jul 5 18:25 bak
-rw-rw---- 1 oracle oinstall 1544 May 16 16:44 hc_WWL.dat
-rw-rw---- 1 oracle oinstall
24 May 23 15:52 lkDUMMY
-rw-rw---- 1 oracle oinstall 24 May 16 16:47 lkWWL
-rw-r----- 1 oracle oinstall 1536 May 21 15:05 orapwWWL
drwxr-xr-x 2 oracle oinstall 4096 Jul 5 18:25 pfilebak
-rw-r----- 1 oracle oinstall 7389184 Jul
5 17:53 snapcf_WWL.f
[oracle@wwldb dbs]$
我們可以看到這裡面pfile和spfile都沒有了,那麼資料庫肯定是起不來的,這個時候需要資料庫起來肯定需要恢複spfile或手工寫一個pfile來供資料庫的啟動。
4、重新開機資料庫
SQL> startup
ORA-01078:failure in processing system parameters
LRM-00109: couldnot open parameter file '/DBSoft/product/10.2.0/db_1/dbs/initWWL.ora'
報錯:沒有找到參數檔案,資料庫無法啟動,甚至無法到達nomount狀态,這個時候我們是不能使用rman的,那麼我們必須手工寫一個非常簡單的pfile,将資料庫啟動到nomount狀态下,這個時候就可以通過rman來進行對資料庫的spfile進行恢複了。
5、開始恢複參數檔案:
編輯一個pfile檔案在/DBSoft/product/10.2.0/db_1/dbs/目錄下,執行添加如下一行内容即可,檔案名稱為initWWL.ora:
db_name=wwl
6、再次啟動資料庫,現在資料庫已經能啟動到nomount狀态了:
SQL> conn / assysdba
Connected to anidle instance.
ORACLE instancestarted.
Total SystemGlobal Area 117440512 bytes
Fixed Size 1218004 bytes
VariableSize 58722860 bytes
Database Buffers 50331648 bytes
Redo Buffers 7168000 bytes
ORA-00205: errorin identifying control file, check alert log for more info
SQL> selectinstance_name,status from v$instance;
INSTANCE_NAME STATUS
----------------------------
WWL STARTED
7、這個時候我們就能通過rman來對spfile伺服器參數檔案進行恢複了。
RMAN> restore spfile;
Starting restore at 05-JUL-12
using target database control file insteadof recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=36 devtype=DISK
RMAN-00571:===========================================================
RMAN-00569: =============== ERROR MESSAGESTACK FOLLOWS ===============
RMAN-03002: failure of restore command at07/05/2012 18:44:06
RMAN-06563: control file or SPFILE must berestored using FROM AUTOBACKUP
恢複的時候報錯,說控制檔案和spfile檔案的恢複必須是來自于自動備份,但是我們沒有做自動備份呀,怎麼辦,我們剛才是手工備份的參數檔案。那麼我們将用如下的指定備份路徑來進行參數檔案的恢複。
RMAN> restore spfile from'/DBBak/bak_WWL_07_05_03nfbi5c_1_1';
using channel ORA_DISK_1
channel ORA_DISK_1: autobackup found:/DBBak/bak_WWL_07_05_03nfbi5c_1_1
channel ORA_DISK_1: SPFILE restore fromautobackup complete
Finished restore at 05-JUL-12
OK了,恢複成功。
8、檢視spfile是否恢複成功;
[oracle@wwldb dbs]$ ll
total 7248
drwxr-xr-x 2 oracle oinstall 4096 Jul 5 18:25 bak
-rw-rw---- 1 oracle oinstall 1544 May 16 16:44 hc_WWL.dat
-rw-r--r-- 1 oracle oinstall 12 Jul 5 18:36 initWWL.ora
-rw-rw---- 1 oracle oinstall 24 May 23 15:52 lkDUMMY
-rw-rw---- 1 oracle oinstall 24 May 16 16:47 lkWWL
-rw-r----- 1 oracle oinstall 1536 May 21 15:05 orapwWWL
drwxr-xr-x 2 oracle oinstall 4096 Jul 5 18:25 pfilebak
-rw-r----- 1 oracle oinstall 7389184Jul 5 17:53 snapcf_WWL.f
-rw-r----- 1 oracleoinstall
2560 Jul 5 18:47 spfileWWL.ora
我們可以看到,現在spfile已經恢複成功了。
9、再次啟動資料庫:
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218968 bytes
Variable Size 79693416 bytes
Database Buffers 197132288 bytes
Database mounted.
Database opened.
我們可以看到,資料庫現在是已經起來了。
通過手工重建來實作參數檔案的恢複,适用于所有版本
1、我們可以參考建庫後生成的init.ora檔案來進行修改,隻需保留以下即可
[oracle@wwldb dbs]$ cat init.ora |grep -v ^# |grep -v ^$ >initWWL.ora
[oracle@wwldb dbs]$ ls
bak hc_WWL.dat init.ora initWWL.ora lkDUMMY lkWWL orapwWWL pfilebak snapcf_WWL.f
2、編輯initWWL.ora檔案,修改db_name和control_files的值為實際值即可。
db_name=WWL
db_files = 80 # SMALL
db_file_multiblock_read_count = 8 # SMALL
db_block_buffers = 100 # SMALL
shared_pool_size = 62198988 #SMALL
log_checkpoint_interval = 10000
processes = 50 # SMALL
parallel_max_servers = 5 #SMALL
log_buffer = 32768 # SMALL
max_dump_file_size = 10240 # limit trace file size to 5 Meg each
global_names = TRUE
control_files ='/DBSoft/oradata/WWL/control01.ctl','/DBData/oradata/WWL/control02.ctl','/DBData/oradata/WWL/control03.ctl'
3、啟動資料庫:
Total System Global Area 100663296 bytes
Fixed Size
1217884 bytes
Variable Size 88083108 bytes
Database Buffers
8388608 bytes
Redo Buffers
2973696 bytes
至此參數檔案已經恢複成功。