控制檔案備份增加、破壞恢復系列實驗(上)

realkid4發表於2011-07-02

 

看了secooler的《Oracle個別控制檔案丟失故障場景模擬及處理方法》(http://space.itpub.net/519536/viewspace-701185),覺得受啟發。擴充下進行試驗,權當仿作吧。

 

控制檔案control fileOracle啟動和執行過程中的重要檔案型別,其中記錄了Oracle執行的動態資訊和核心變數。同引數檔案parameter file不同的是,引數檔案中記錄瞭如SCN、狀態資訊等核心動態引數。控制檔案的丟失、損壞可能會引起很大的資料庫故障。

 

 

一般進行控制檔案管理常常使用多路備份的方法,將檔案分別複製在不同的物理位置上互為備份。如果有一個檔案丟失、損壞或者故障,可以使用其他online control file進行恢復。

 

本文實驗模擬三個場景,包括新備份control_file新增、破損丟失control_file故障處理和control_files列表清理。

 

1、  環境準備

 

我們選擇11g作為實驗環境。與控制檔案有關的重要引數是Control_files,表示系統認可的控制檔案資訊。可以用逗號分隔表示多重control_file資訊。

 

 

SQL> select * from v$version;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE     11.2.0.1.0       Production

 

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 – Production

 

 

SQL> show parameter control;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_file_record_keep_time        integer     7

control_files        string      /u01/oradata/WILSON/controlfile/o1_mf_6bcsqm50_.ctl, /u01/flash_recovery_area/WILSON/controlfile/o1_mf_6bcsqmd8_.ctl

control_management_pack_access       string      DIAGNOSTIC+TUNING

 

SQL> select * from v$controlfile;

 

STATUS  NAME                                                                             IS_RECOVERY_DEST_FILE BLOCK_SIZE FILE_SIZE_BLKS

------- -------------------------------------------------------------------------------- --------------------- ---------- --------------

        /u01/oradata/WILSON/controlfile/o1_mf_6bcsqm50_.ctl                              NO                         16384            594

        /u01/flash_recovery_area/WILSON/controlfile/o1_mf_6bcsqmd8_.ctl                  YES                        16384            594

 

 

此時,系統中已經使用控制檔案多路備份的方法。除了OFA結構中定義的控制檔案位置,作為備份在flash_recovery_area中保留一個備份。

 

 

2、新增加一個控制檔案

 

現在我們要增加一個控制檔案備份,control_files列表中的控制檔案是100%相同的檔案內容。增加檔案可以按照下面步驟完成。

 

ü        spfile可見性範圍內修改control_files初始化引數;

 

Control_files引數是定義在parameter file中的基本引數內容。在系統啟動的時候,不支援memory可見性範圍內修改引數,可以在spfile內進行online修改,讓其重啟後生效。

 

 

//建立副本

SQL> alter system set control_files='/u01/oradata/WILSON/controlfile/o1_mf_6bcsqm50_.ctl','/u01/flash_recovery_area/WILSON/controlfile/o1_mf_6bcsqmd8_.ctl','/u01/oradata/WILSON/controlfile/o2.ctl' scope=spfile;

 

System altered

 

 

標註紅色的o2.ctl控制檔案是新增加的控制檔案備份。之後嘗試關閉資料庫(正常關閉)。

 

 

[oracle@oracle11g ~]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jun 30 15:16:07 2011

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

Connected.

SQL> shutdown normal;

Database closed.

Database dismounted.

ORACLE instance shut down.

 

 

正常關閉,保證日誌、資料檔案、控制檔案等全庫一致。下面到OS檔案系統中進行備份複製。

 

 

[oracle@oracle11g controlfile]$ pwd

/u01/oradata/WILSON/controlfile

[oracle@oracle11g controlfile]$ ls -l

total 9536

-rw-r-----  1 oracle oinstall 9748480 Jun 30 15:16 o1_mf_6bcsqm50_.ctl

 

//複製一個備份控制檔案;

[oracle@oracle11g controlfile]$ cp o1_mf_6bcsqm50_.ctl o2.ctl

[oracle@oracle11g controlfile]$ ls -l

total 19072

-rw-r-----  1 oracle oinstall 9748480 Jun 30 15:16 o1_mf_6bcsqm50_.ctl

-rw-r-----  1 oracle oinstall 9748480 Jun 30 15:17 o2.ctl

 

 

此時,我們重新啟動資料庫。

 

 

//重新啟動

[oracle@oracle11g controlfile]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jun 30 15:17:36 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.

 

Total System Global Area  414298112 bytes

Fixed Size                  1336904 bytes

Variable Size             318769592 bytes

Database Buffers           88080384 bytes

Redo Buffers                6111232 bytes

Database mounted.

Database opened.

 

 

資料庫正常啟動,此時引數control_files也恢復正常。

 

 

SQL> show parameter control_files;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      /u01/oradata/WILSON/controlfile/o1_mf_6bcsqm50_.ctl, /u01/flash_recovery_area/WILSON/controlfile/o1_mf_6bcsqmd8_.ctl, /u01/oradata/WILSON/controlfile/o2.ctl

 

 

控制檔案相關檢視也連帶更新。

 

 

SQL> select * from v$controlfile;

 

STATUS  NAME                 IS_RECOVERY_DEST_FILE BLOCK_SIZE FILE_SIZE_BLKS

------- -------------------- --------------------- ---------- --------------

        /u01/oradata/WILSON/ NO                         16384            594

        controlfile/o1_mf_6b                                 

        csqm50_.ctl                                          

        /u01/flash_recovery_ YES                        16384            594

        area/WILSON/controlf                                 

        ile/o1_mf_6bcsqmd8_.                                 

        ctl                                                  

        /u01/oradata/WILSON/ NO                         16384            594

        controlfile/o2.ctl                                   

 

 

3、資料庫control_file單備份破壞實驗

 

 

下面,我們模擬控制檔案中的一個部分被破壞。

 

 

//破壞檔案

[oracle@oracle11g controlfile]$ pwd

/u01/oradata/WILSON/controlfile

[oracle@oracle11g controlfile]$ mv o2.ctl o2bak.ctl

[oracle@oracle11g controlfile]$ ls -l

total 19072

-rw-r-----  1 oracle oinstall 9748480 Jun 30 15:25 o1_mf_6bcsqm50_.ctl

-rw-r-----  1 oracle oinstall 9748480 Jun 30 15:25 o2bak.ctl

 

 

此時,控制檔案的o2.ctl已經不能夠定位。此時,我們在資料庫層面上進行一些操作。

 

 

SQL> alter system switch logfile;

System altered

 

 

切換日誌成功,注意此處沒有報錯。這時候,我們嘗試進行關閉資料庫。

 

 

[oracle@oracle11g controlfile]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jun 30 15:26:42 2011

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

Connected.

SQL> shutdown normal;

ORA-00210: cannot open the specified control file

ORA-00202: control file: '/u01/oradata/WILSON/controlfile/o2.ctl'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

 

SQL> shutdown immediate

ORA-00210: cannot open the specified control file

ORA-00202: control file: '/u01/oradata/WILSON/controlfile/o2.ctl'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

 

SQL> shutdown abort

ORACLE instance shut down.

 

 

這時候,進行normalimmediate方式關閉資料庫都是以失敗資訊報錯。只能使用abort模式進行強制關閉。在alert_log.log中,也有相應的提示。

 

 

Thu Jun 30 15:26:54 2011

Errors in file /u01/diag/rdbms/wilson/wilson/trace/wilson_m000_6282.trc:

ORA-00210: cannot open the specified control file

ORA-00202: control file: '/u01/oradata/WILSON/controlfile/o2.ctl'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

Thu Jun 30 15:27:24 2011

Shutting down instance (abort)

 

 

當再次進行啟動資料庫時,啟動失敗。

 

 

oracle@oracle11g controlfile]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jun 30 15:27:44 2011

 

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup nomount

ORACLE instance started.

 

Total System Global Area  414298112 bytes

Fixed Size                  1336904 bytes

Variable Size             318769592 bytes

Database Buffers           88080384 bytes

Redo Buffers                6111232 bytes

SQL> alter database mount

  2  ;

alter database mount

*

ERROR at line 1:

ORA-00205: error in identifying control file, check alert log for more info

 

 

在啟動例項(nomount階段),Oracle啟動成功。在進行mount檔案時,系統報錯。在進行mount過程中,Oracle會根據引數檔案中定義的control_files引數,定位到引數檔案,嘗試開啟引數檔案以獲取到資料庫檔案等更高層面的資訊引數。此時,我們一個控制檔案不存在,必然影響到mount階段的實現。此時,alert_log中資訊。

 

 

Thu Jun 30 15:27:55 2011

MMNL started with pid=16, OS id=6371

starting up 2 shared server(s) ...

ORACLE_BASE from environment = /u01

Thu Jun 30 15:28:01 2011

alter database mount

ORA-00210: cannot open the specified control file

ORA-00202: control file: '/u01/oradata/WILSON/controlfile/o2.ctl'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

Thu Jun 30 15:28:01 2011

Checker run found 1 new persistent data failures

ORA-205 signalled during: alter database mount

...

[oracle@oracle11g trace]$

 

 

 

當控制檔案不完全時,資料庫是無法經過mount階段啟動的。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-701209/,如需轉載,請註明出處,否則將追究法律責任。

相關文章