基於歸檔的冷備份恢復

nathanzhn發表於2014-02-19

基於歸檔的冷備份恢復--離線恢復,可以是完全恢復也可能是不完全恢復。

完全恢復的場景適用於資料檔案和控制檔案丟失或損壞,但是聯機重做日誌檔案均完好,這時可以利用冷備份+重建控制檔案+歸檔+聯機重做日誌檔案進行資料庫的完全恢復。

需要做歸檔模式下的完全恢復:

完全恢復的條件:

有最近的一次資料檔案備份

控制檔案和聯機日誌檔案沒有損壞

從備份時間開始到資料檔案損壞時的所有歸檔日誌檔案完好

 

不完全恢復的場景適用於當前的控制檔案和聯機重做日誌均已損壞或丟失,必須要應用到歸檔日誌的備份來進行不完全恢復,和基於非歸檔的冷備份恢復同樣只能恢復到指定的時間點或SCN。

       下面是基於歸檔的冷備份完全恢復進行實驗。不完全恢復會有單獨的實驗。

1.        初始場景為使用者timmie下的表t1中有一條記錄,在這個基礎上資料庫做了冷備份操作,冷備份的方法不再解釋

SYS@PROD>conn timmie/timmie

Connected.

TIMMIE@PROD>truncate table t1;

 

Table truncated.

 

TIMMIE@PROD>insert into t1 values(1);

 

1 row created.

 

TIMMIE@PROD>commit;

 

Commit complete.

 

TIMMIE@PROD>select * from t1;

 

         A

----------

         1

 

TIMMIE@PROD>conn / as sysdba

Connected.

SYS@PROD>shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

 

cp /u01/app/oracle/oradata/PROD/disk1/system001.dbf /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/undotbs01.dbf /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/sysaux01.dbf /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/example1.dbf /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/indx1.dbf /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/tools1.dbf /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/users1.dbf /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/oltp1.dbf /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/tbs_tommie01.dbf /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/redo101.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk2/redo102.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk3/redo103.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/redo201.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk2/redo202.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk3/redo203.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/redo301.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk2/redo302.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk3/redo303.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk4/redo104.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk4/redo204.log /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk1/control01.ctl /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/oradata/PROD/disk2/control02.ctl /home/oracle/coldbackup/20140125-1

cp /u01/app/oracle/product/10.2.0/db_1/dbs/spfilePROD.ora /home/oracle/coldbackup/20140125-1

2.        冷備份後啟動資料庫,資料庫的正常工作內容包括插入一條新資料後執行歸檔,然後再插入第三條記錄,該記錄留在聯機日誌檔案中

SYS@PROD>startup

ORACLE instance started.

 

Total System Global Area  314572800 bytes

Fixed Size                  1219184 bytes

Variable Size              75498896 bytes

Database Buffers          234881024 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

SYS@PROD>conn timmie/timmie

Connected.

TIMMIE@PROD>select * from t1;

 

         A

----------

         1

 

TIMMIE@PROD>insert into t1 values(2);

 

1 row created.

 

TIMMIE@PROD>commit;

 

Commit complete.

 

TIMMIE@PROD>conn / as sysdba

Connected.

SYS@PROD>alter system switch logfile;

 

System altered.

 

[oracle@odd-oelr4u8 arc_dest_1]$ ll

總用量 304

-rw-r-----  1 oracle oinstall 307200  1 22 13:24 1_33_836833769.dbf

[oracle@odd-oelr4u8 arc_dest_1]$ pwd

/u01/app/oracle/oradata/PROD/arc_dest_1

 

SYS@PROD>conn timmie/timmie

Connected.

TIMMIE@PROD>insert into t1 values(3);

 

1 row created.

 

TIMMIE@PROD>commit;

 

Commit complete.

 

TIMMIE@PROD>select * from t1;

 

         A

----------

         1

         2

             3

此時t1有三條記錄,第一條記錄在冷備份中,第二條記錄在歸檔中,第三條記錄在聯機日誌中

3.        之後資料庫出現問題,某個資料檔案損壞或丟失,控制檔案也全部丟失或損壞,但是聯機日誌檔案都完好,需要執行冷備份+重建控制檔案+歸檔+聯機日誌的完全恢復

4.        實驗恢復前,再做一個關機冷備份,跟恢復無關,只是做測試時的一種保障手段,備份到另一個冷備份目錄裡

5.        下面開始執行完全恢復

                        i.              第一步:以下只恢復資料檔案,不恢復聯機日誌,必須用到當前的聯機日誌才能做完全恢復

TIMMIE@PROD>conn / as sysdba

Connected.

SYS@PROD>shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

cd /u01/app/oracle/oradata/PROD/disk1/

rm -f /u01/app/oracle/oradata/PROD/disk1/system001.dbf

rm -f /u01/app/oracle/oradata/PROD/disk1/undotbs01.dbf

rm -f /u01/app/oracle/oradata/PROD/disk1/sysaux01.dbf

rm -f /u01/app/oracle/oradata/PROD/disk1/example1.dbf

rm -f /u01/app/oracle/oradata/PROD/disk1/indx1.dbf

rm -f /u01/app/oracle/oradata/PROD/disk1/tools1.dbf

rm -f /u01/app/oracle/oradata/PROD/disk1/users1.dbf

rm -f /u01/app/oracle/oradata/PROD/disk1/oltp1.dbf

rm -f /u01/app/oracle/oradata/PROD/disk1/tbs_tommie01.dbf

 

cp /home/oracle/coldbackup/20140125-1/system001.dbf    /u01/app/oracle/oradata/PROD/disk1/system001.dbf

cp /home/oracle/coldbackup/20140125-1/undotbs01.dbf    /u01/app/oracle/oradata/PROD/disk1/undotbs01.dbf

cp /home/oracle/coldbackup/20140125-1/sysaux01.dbf     /u01/app/oracle/oradata/PROD/disk1/sysaux01.dbf

cp /home/oracle/coldbackup/20140125-1/example1.dbf     /u01/app/oracle/oradata/PROD/disk1/example1.dbf

cp /home/oracle/coldbackup/20140125-1/indx1.dbf        /u01/app/oracle/oradata/PROD/disk1/indx1.dbf

cp /home/oracle/coldbackup/20140125-1/tools1.dbf       /u01/app/oracle/oradata/PROD/disk1/tools1.dbf

cp /home/oracle/coldbackup/20140125-1/users1.dbf       /u01/app/oracle/oradata/PROD/disk1/users1.dbf

cp /home/oracle/coldbackup/20140125-1/oltp1.dbf        /u01/app/oracle/oradata/PROD/disk1/oltp1.dbf

cp /home/oracle/coldbackup/20140125-1/tbs_tommie01.dbf /u01/app/oracle/oradata/PROD/disk1/tbs_tommie01.dbf

                      ii.              第二步:嘗試noresetlogs方式建立控制檔案。-- 經過測試,如果原controlfile沒有問題,可以不需要執行該步驟,直接執行第三步的recover database

控制檔案中各個資料檔案的checkpoint cnt來自於online的redolog。重建控制檔案的內容來自trace檔案,alter database backup controlfile to trace; --在user_dump_dest目錄下。

--重建控制檔案有一個主要選項需要理解:NORESETLOGS/RESETLOGS 在跟蹤檔案中包含以下注釋,詳細解釋了這兩個選項和含義:

--Below are two sets of SQL statements, each of which creates a new

--control file and uses it to open the database. The first set opens

--the database with the NORESETLOGS option and should be used only if

--the current versions of all online logs are available. The second

--set opens the database with the RESETLOGS option and should be used

--if online logs are unavailable.

SYS@PROD>STARTUP NOMOUNT

SYS@PROD>CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 150

    MAXLOGMEMBERS 5

    MAXDATAFILES 200

    MAXINSTANCES 2

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 (

    '/u01/app/oracle/oradata/PROD/disk1/redo101.log',

    '/u01/app/oracle/oradata/PROD/disk2/redo102.log',

    '/u01/app/oracle/oradata/PROD/disk3/redo103.log',

    '/u01/app/oracle/oradata/PROD/disk4/redo104.log'

  ) SIZE 100M,

  GROUP 2 (

    '/u01/app/oracle/oradata/PROD/disk1/redo201.log',

    '/u01/app/oracle/oradata/PROD/disk2/redo202.log',

    '/u01/app/oracle/oradata/PROD/disk3/redo203.log',

    '/u01/app/oracle/oradata/PROD/disk4/redo204.log'

  ) SIZE 100M,

  GROUP 3 (

    '/u01/app/oracle/oradata/PROD/disk1/redo301.log',

    '/u01/app/oracle/oradata/PROD/disk2/redo302.log',

    '/u01/app/oracle/oradata/PROD/disk3/redo303.log',

    '/u01/app/oracle/oradata/PROD/disk4/redo304.log'

  ) SIZE 100M

-- STANDBY LOGFILE

DATAFILE

  '/u01/app/oracle/oradata/PROD/disk1/system001.dbf',

  '/u01/app/oracle/oradata/PROD/disk1/undotbs01.dbf',

  '/u01/app/oracle/oradata/PROD/disk1/sysaux01.dbf',

  '/u01/app/oracle/oradata/PROD/disk1/example1.dbf',

  '/u01/app/oracle/oradata/PROD/disk1/indx1.dbf',

  '/u01/app/oracle/oradata/PROD/disk1/tools1.dbf',

  '/u01/app/oracle/oradata/PROD/disk1/users1.dbf',

  '/u01/app/oracle/oradata/PROD/disk1/oltp1.dbf',

  '/u01/app/oracle/oradata/PROD/disk1/tbs_tommie01.dbf'

CHARACTER SET AL32UTF8

;

 

Control file created.

SYS@PROD>VARIABLE RECNO NUMBER;

SYS@PROD>EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CHANNEL','DEVICE TYPE DISK FORMAT   ''/home/oracle/backup/PROD_%U''');

 

PL/SQL procedure successfully completed.

 

SYS@PROD>VARIABLE RECNO NUMBER;

SYS@PROD>EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');

 

PL/SQL procedure successfully completed.

 

SYS@PROD>VARIABLE RECNO NUMBER;

SYS@PROD>EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE','DISK TO ''/home/oracle/backup/control/controlfile_%F''');

 

PL/SQL procedure successfully completed.

 

SYS@PROD>VARIABLE RECNO NUMBER;

SYS@PROD>EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET');

 

PL/SQL procedure successfully completed.

 

SYS@PROD>VARIABLE RECNO NUMBER;

SYS@PROD>EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('BACKUP OPTIMIZATION','ON');

 

PL/SQL procedure successfully completed.

 

SYS@PROD>VARIABLE RECNO NUMBER;

SYS@PROD>EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('RETENTION POLICY','TO RECOVERY WINDOW OF 30 DAYS');

 

PL/SQL procedure successfully completed.

                    iii.              第三步:RECOVER DATABASE

SYS@PROD>select open_mode from v$database;

OPEN_MODE

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

MOUNTED

SYS@PROD>recover database – 重建控制檔案後,資料庫自動到了mount狀態下,如果不重建控制檔案,則需要先startup mount然後再執行recover database

Media recovery complete.

SYS@PROD>ALTER SYSTEM ARCHIVE LOG ALL;

 

System altered.

 

SYS@PROD>ALTER DATABASE OPEN;

 

Database altered.

 

SYS@PROD>ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp01.dbf' REUSE;

ALTER TABLESPACE TEMP1 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp11.dbf' REUSE;

ALTER TABLESPACE TEMP2 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp22.dbf' REUSE;

 

Tablespace altered.

 

SYS@PROD>

Tablespace altered.

 

SYS@PROD>

Tablespace altered.

                     iv.              第四步:測試

SYS@PROD>conn timmie/timmie

Connected.

TIMMIE@PROD>select * from t1;

 

         A

----------

         1

         2

         3

 

至此,三條記錄全部恢復,完全恢復成功。

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

相關文章