天天看點

探索ORACLE之RMAN_07 參數檔案丢失恢複

探索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

至此參數檔案已經恢複成功。