Oracle資料庫備份與恢復之RMAN2

gjm008發表於2008-12-27

4.4.3  非歸檔模式下的  BACKUP  備份與恢復

    恢復目錄:    開啟目標資料庫:例程啟動,資料庫載入,mount  不能 open因為目標資料庫不在歸檔模式下,所以當進行備份/恢復操作的時候資料庫無法開啟。目標資料庫只能在  MOUNT 狀態不能 Open,所以屬於離線備份。

    非歸檔模式不備份 redo日誌,只有完全備份和 readonly/offline表空間和資料檔案備份是有意義的,所以非歸檔模式最好不用 RMAN進行備份,備份語法與歸檔模式相 同,所以這裡只做簡單介紹。

    4.4.3.1  全庫備份

    例:  使用預設的設定離線全備份的語句

    RMAN> shutdown immediateRMAN> startup mountRMAN> backup databaseRMAN> startup

    例:不使用預設的設定執行離線備份操作  ,在備份命令中指定備份選項

    RMAN> shutdown immediate

    RMAN> startup mount

    RMAN> run { allocate channel c1 type disk format '/xxx/ming_%U'

    allocate channel c2 type disk format '/xxx/ming_%U'

    backup full tag full_db_backup format "/backups/db_t%t_s%s_p%p" database);

    backup current controlfile

    release channel c1

    release channel c2 }

    在這個例子中,我們分配了兩個通道,備份位置是在/xxx.預設情況下,如果備份資料檔案 1 SYSTEM  表空間),控制檔案和引數檔案也會備份。 可以通過下面的命令顯示恢復目錄中記載的備份集資訊: RMAN> list backupset of database

    4.4.3.2  全庫備份的恢復

    $ rman target /

    RMAN> startup mount

    RMAN> restore database

    RMAN> recover database

    RMAN> alter database open resetlogs

    4.4.3.3  表空間備份

    只有 readonly/offline表空間的備份才有意義。

    RMAN> run {

    2> allocate channel dev1 type disk

    3> backup

    4> tag tbs_users_read_only

    5> format "/oracle/backups/tbs_users_t%t_s%s"

    6> tablespace users);

    7> }

    使用下列命令來顯示恢復目錄中該表的備份資訊:RMAN> list backupset of tablespace users

    4.4.3.4  表空間備份的恢復

    RMAN> RUN{

    sql "alter tablespace xx offline immediate"

    restore tablespace xx

    recover tablespace xx

    sql "alter tablespace xx online" }

    4.4.3.5  備份控制檔案

    RMAN> run {

    2> allocate channel dev1 type "SBT_TAPE"

    3> backup

    4> format "cf_t%t_s%s_p%p"

    5> tag cf_monday_night

    6> current controlfile);

    7> release channel dev18> }

    注:資料庫完全備份將自動備份控制檔案。(或者備份時加 include current controlfile

4.4.4  歸檔模式下的BACKUP備份與完全恢復

    要用  RMAN  進行聯機備份操作,資料庫就必須位於  ARCHIVELOG  模式。恢復 目錄必須開啟,目標資料庫例程必須啟動,資料庫載入或者開啟。

    這部分只介紹完全恢復,不完全恢復見下一節。

    4.4.4.1  整庫備份與恢復備份命令:

    只備份資料檔案  (如果 configure controlfile autobackup  on  將自動包括控制元件檔案,SPFILE):RMAN> backup database;同時備份歸檔日誌,然後將備份後的歸檔日誌刪除RMAN> backup database plus archivelog delete input;明確指定同時備份控制元件檔案:

    RMAN> run{

    allocate channel c1 type disk

    sql 'alter system archive log current'

    backup full database include current controlfile tag 'dbfull'

    format '/u06/oracle/rmanback/full_%u_%s_%p'

    sql 'alter system archive log current'

    release channel c1}

    可以用 RMAN plus archvielog 選項簡化資料庫備份:

    RMAN> run {

    2> backup database

    3> format '/xxfull%d_%T_%s'

    4> plus archivelog

    5> format '/xx/arch_%d_%T_%s'

    6> delete all input

    7> }

    完全恢復:目標資料庫必須是 mount狀態$ rman target / RMAN> startup mount RMAN> restore databaseRMAN> recover databaseRMAN> alter database open

    4.4.4.2  表空間的備份與恢復

    備份命令:RMAN> backup tablespace users

    例:RMAN> RUN{

    allocate channel c1 type disk

    backup tablespace users tag 'ts_users' format '/oracle/rmanback/ts_%u_%s_%p'

    release channel c1

    }

   format 'D:Back Updb bakRMAN_BKdb_full_%u_%p_%s.RMN' --------備份片的輸出名稱的格式,%u:8位,備份集號+備份時間;%p:備份片數;%s:備份集數

 

    恢復:如果我們只丟失了特定的表空間的資料檔案,那麼我們可以選擇只恢復這個表空間,而不是恢復整個資料庫。表空間恢復可以在不關閉資料庫的情況下進行,只需要將需要恢復的 表空間 offline.

    RMAN> RUN{

    sql "alter tablespace xx offlineimmediate"

    restore tablespace xx

    recover tablespace xx

    sql "alter tablespace xx online"

    }

    恢復到一個不同的位置:

    RMAN> RUN{

    sql "alter tablespace xx offline immediate"

    SET NEWNAME for datafile 1 to '/xx'

    restore tablespace xx

    switch datafile 1

    recover tablespace xx

    sql "alter tablespace tbs1 online"

    }

    4.4.4.3  資料檔案的備份與恢復

    備份命令:

    RMAN> backup datafile 3

    RMAN> backup datafile 'D\ORAC LE\ORADATA\TEST\TEST.DB'

    恢復命令:數 據檔案 恢復與表空間恢 復類 似 .假設數 據檔案 號 為  5  的檔案丟失 ,文 件名 是:'E\ORACLE\ORADATA\USERS.DBF'  那麼我們恢復的時候可以指定檔案號,也可以指定檔名。

    RMAN> run {

    2> allocate channel dev1 type disk

    3> sql "alter tablespace users offline immediate"

    4> restore datafile 4    ——或者  restore 'E\ORACLE\ORADATA\USERS.DBF'

    5> recover datafile 4

    6> sql "alter tablespace users online"

    7> release channel dev1

    8> }

    恢復到一個不同的位置:

    $ rman target /

    RMAN> startup mount

    RMAN> RUN{

    sql "alter tablespace users offline immediate"

    SET NEWNAME for datafile 9 to '/xx/user01.dbf'

    restore datafile 9

    switch datafile all

    recover datafile 9

    sql "alter tablespace users online"

    }

4.4.4.4  歸檔重做日誌的備份與恢復

    備份:整庫備份的同時,備份所有歸檔  (以及聯機日誌):RMAN> backup database plus archivelog

    備份所有歸檔:RMAN> backup archivelog all

    備份兩天來的歸檔:RMAN> backup archivelog from time='sysdate-2' [to time=‘xxx’]

    備份從 sequence 1  開始的歸檔:RMAN> backup archivelog from sequence 1[to sequence =‘n]

    備份沒有三次備份的歸檔:RMAN> backup archivelog not backed up 3 times

    備份所有歸檔,然後刪除歸檔:RMAN> backup archivelog all delete input

    恢復:顯示恢復目錄中的歸檔日誌:RMAN> list backupset of archivelog all

    一般情況下,在  RMAN  的普通恢復過程中,不必恢復歸檔的重做日誌。不過偶爾也需 要恢復重做日誌,例如我們用 Log Miner  來從歸檔中查詢一些東西。

    RMAN命令舉例:

    RMAN> RESTORE ARCHIVELOG ALL

    RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1UNTIL LOGSEQ=20

    RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1

    可以用  SET命令來指定歸檔日誌的還原位置,例如:RMAN> run{ set archivelog destination to "d\temp"restore archivelog all}需要注意的是,即使新的歸檔日誌目錄不同於預設的歸檔日誌目錄,如果  Oracle 判定日誌已存在,也不會恢復該歸檔日誌檔案。

    4.4.4.5  聯機日誌的備份

    聯機日誌不能用  RMAN  來備份,可以先將其歸檔,再備份。為了實現這點,必須在 RMAN中執行歸檔命令語句:

    RMAN> run {

    2> allocate channel dev1 type disk

    3> sql "alter system archive log current"

    4> backup archivelog from time "sysdate-1" all delete input

    5> "format "/oracle/backups/log_t%t_s%s_p%p"

    6> release channel dev1

    7>

    }

    上面的指令碼可以在執行完一個完整的聯機資料庫備份後執行,確保所有的重做日誌可以將資料庫恢復到一個一致性的狀態。

    當然,也可以在全庫備份時使用  plus archvielog  選項,將自動完成聯機日誌的備份。

    4.4.4.6  控制檔案和伺服器引數檔案的備份與恢復備份:

    //  設定檔名格式RMAN> set controlfile autobackup format for device t ype disk to 'ctl_%F'

    1. RMAN> configure controlfile autobackup on    // backup database 時將自動備份

    2. RMAN> backup current controlfile

    3. RMAN> backup …… include control file

    4. RMAN> backup file 1                // system datafile 自動備份

    恢復SPFILE

    SPFILEPFILE)的丟失/損壞,對資料庫不會產生致命影響,可以從其他方式恢復。不過既然RMAN的備份計劃中包括了SPFILE的備份,那麼就可以使用RMAN來還原SPFILE了。

    $ rman target / catalog "rman/rman@db" RMAN> set dbid=153910023    // SET DBID 這個步驟是不能省略的,否則會報錯。

    RMAN> restore spfile from autobackup [MAXDAYS 100]    //  或者 restore spfile

    RMAN> startup force

    或者從某個備份集恢復:RMAN> restore spfile from backupset bs_num 命令。 使用dbms_backup_restore 包恢復伺服器引數檔案:在一些不常見的情況下,我們可能需要直接使用dbms_backup_restore  包來恢復spfile.當然這個包也可以用來恢復其它資料,是常規辦法都沒有用的時候的一個利器。這個包可以在資料庫  NOMOUNT狀態下使用。 假設我們有一個自動備份檔案C-2600315304-20060829-02,我們需要從這裡恢復資料,那麼可以通過執行下面的指令碼來完成:

    SQL>

    DECLARE

    DEVTYPE VARCHAR2256);

    DONE BOOLEAN

    BEGIN

    DEVTYPE=DBMS_BACKUP_RESTORE.deviceallocateNULL);

    DBMS_BACKUP_RESTORE.restoresetdatafile

    DBMS_BACKUP_RESTORE.restorespfileto'/back/SPFILE.ORA');

    DBMS_BACKUP_RESTORE.restorebackuppiece'/back/C-2600315304-20060829-02'DONE=>done);

    DBMS_BACKUP_RESTORE.devicedeallocateNULL);END

    恢復控制檔案:

    RMAN> startup nomount RMAN> set dbid=153910023

    RMAN> restore controlfile from autobackup

   

    RMAN> restore controlfile from'/arch/ct_c-2347671489-20060630-00'

    聯機狀態:目標資料庫 MOUNT OPEN

    RMAN> restore controlfile to 'd\temp\control01.ctl'

    然後再執行恢復資料庫的其他步驟:RMAN> restore database RMAN> recover databaseRMAN> alter database open resetlogs

    使用  dbms_backup_restore 包恢復控制檔案:

    SQL>

    DECLARE DEVTYPE VARCHAR2256);

    DONE BOOLEAN

    BEGIN

    DEVTYPE=DBMS_BACKUP_RESTORE.deviceallocateNULL);

    DBMS_BACKUP_RESTORE.restoresetdatafile

    DBMS_BACKUP_RESTORE.restorecontrolfileto'/back/CONTROL01.CTL');

    DBMS_BACKUP_RESTORE.restorebackuppiece'/back/C-2600315304-20060829-00'DONE=>done);

    DBMS_BACKUP_RESTORE.devicedeallocateNULL);END/

    4.4.4.7  備份集的備份的備份與恢復

    備份:備份所有備份集:RMAN> backup backupset all;備份指定備份集:RMAN> backup backupset bs_num;恢復:(這種備份只是增加一個映象,不用恢復)

    主要用於改變備份集的位置,或者建立多個映象備份,比如將備份集從硬碟備份到磁帶。

4.4.5  歸檔模式下的不完全恢復

    不完全恢復就意味著有資料的丟失。引起不完全恢復的原因有很多,如丟失了聯機日誌或某個歸檔日誌。另外如果出現了嚴重損害資料庫的使用者錯誤,比如某使用者錯誤的刪除了某 個重要的資料,那麼資料庫也要恢復到這個錯誤操作之前。

    不完全恢復會影響整個資料庫,需要在 MOUNT 狀態下進行。在不完全恢復完成之後, 通常需要使用  resetlogs  選項來開啟資料庫。resetlogs  表示一個資料庫邏輯生存期的結束和另一個資料庫邏輯生存期的開始。資料庫的邏輯生存期也被稱為一個對應物(incarnation)。 每次使用  resetlogs  選項來開啟資料庫後都會建立一個新的資料庫對應物,這對於恢復操作 來說非常重要。每次使用  resetlogs  後,SCN計數器不會被重置,但是 Oracle會重置聯機日 志序列號,同時還會重置聯機重做日誌內容。因此執行了  resetlogs  之後,應該立即重新備 份整個資料庫,否則恢復起來相當麻煩。 (注:Oracle 10g 中已經可以在  resetlogs 之後不備 份資料庫,恢復的時候能夠穿越 resetlogs

    使用RMAN執行不完全恢復操作時需要完成的一個工作是建立恢復目標。恢復目標是要終止恢復程式的點,可以是時間點、指定的  SCN  或者一個日誌序列號。我們可以在  run程式碼中使用 set  命令和 until timeuntil scnuntil sequence 引數。

    也可以選擇在RESTORE RECOVER命令中直接使用UNTIL TIMEUNTIL SCN、 或者 UNTIL SEQUENCE 引數,這樣就可以避免使用  run  程式碼。例如;

    startup mount

    restore database "to_date'2005/08/01 130000''yyyy/mm/dd hh24miss'" recover database "to_date'2005/08/01 130000''yyyy/mm/dd hh24miss'" alter database open resetlogs

    4.4.5.1  基於SCN的恢復

    如果知道資料庫出錯前的 SCN,可以將資料庫還原到指定  SCN  狀態。

    $ startup mount

    RMAN> run{

     allocate channel d1 type disk

    restore database until scn 1317011          ——或者  set until scn 1317011

    recover database until scn 1317011

    sql 'alter database open resetlogs'

    release channel d1

    }

    4.4.5.2  基於時間的恢復

    下面使用 set until time  命令為  2005    8    1  日下午  1點的恢復目標:

    $ startup mount

    RMAN> run{

    set until time "to_date'2005/08/01 130000''yyyy/mm/dd hh24miss'"

    restore database

    recover database

    alter database open resetlogs

    }

    執行上面的命令時, RMAN  會查詢與恢復目標時間最近、但是不包含恢復目標時間及以後時間的備份集,並且從這個備份中還原資料庫。如果資料庫非歸檔模式,那麼恢復操作會在備份集的時間點停止;否則  RECOVER  命令會應用恢復目標之前的歸檔重做日誌或需要的增量備份。

    4.4.5.3  基於日誌序列的恢復

    RMAN  允許使用者將資料庫恢復到指定的歸檔重做日誌序列號。如果歸檔的重做日誌中有間隙(某個歸檔日誌檔案或備份損壞或丟失)  ,使用這種方法就很方便。間隙通常意味 著我們只能將資料庫還原到間隙開始的地方。

    SQL> startup mount

    RMAN> restore database until sequence 100 thread 1    ——not include 100 RMAN> recover database until sequence 100 thread 1

    SQL> alter database open resetlogs

    RMAN> RUN {

    2> SET UNTIL SEQUENCE 120 THREAD 1

    4> RESTORE DATABASE

    5> RECOVER DATABASE    ——recovers through log 119 not include 120

    6> ALTER DATABASE OPEN RESESTLOGS

    7> }

4.5. RMAN 檢視資訊List Report

    4.5.1  恢復目錄相關檢視

    恢復目錄本身有一組檢視,用於存放目標資料庫與備份資訊,可

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

相關文章