天天看點

備份恢複15—— RMAN維護 + 相關的視圖

The views V$RMAN_BACKUP_JOB_DETAILS and V$RMAN_BACKUP_SUBJOB_DETAILS and their corresponding recovery catalog versions provide details of RMAN backup jobs. 

For example, the views show how long a backup took, how many backup jobs have been issued, the status of each backup job (for example, whether it failed or completed), when a job started and finished, and what

type of backup was performed. The SESSION_KEY column is the unique key for the RMAN session in which the backup job occurred.

此備份耗時,多少個backup job被執行過,每個backup job的狀态(比如是否失敗,完成?),一個job何時開始何時結束,何種備份被執行?列SESSION_KEY 是對應了唯一的backup job發生和rman session的關系。

這篇資料主要講到了如下内容:

1. Rman 的維護

2. 恢複目錄的維護

3. 備份恢複目錄

4. RMAN 存儲腳本

5. 删除資料庫

一. RMAN 的維護

1.1 交叉效驗RMAN 備份

在RMAN目錄和實體備份目的地不同步的情況下,我們可以使用crosscheck指令來效驗控制檔案或恢複目錄中的RMAN資訊是否與備份媒體上的實際實體備份集片相同。

使用crosscheck 指令時,我們關心每個備份集或者副本的狀态。 如果使用控制檔案,用于備份集片的v$backup_set 視圖和用于副本的v$databfile_copy 視圖中的status列列出了每個備份集或副本的狀态碼;如果使用恢複目錄,則在備份集片的RC_BACKUP_SET和副本的RC_DATAFILE_COPY中列出了每個備份集或副本的狀态碼。 在不同的備份狀态碼中,我們關心以下兩種狀态:

(1)A(Available:可用):RMAN 認定該項存在于備份媒體上

(2)X(Expired:不可用):這個備份集片或副本上存儲的RMAN目錄(即控制檔案或恢複目錄)中,但是并沒有實體存在于備份媒體上。

使用crosscheck 指令的目的是将RMAN目錄的狀态設定為AVAILABLE或者EXPIRED。 執行crosscheck時,RMAN檢查目錄中列出的每個備份集或副本并且判斷他們是否存在與備份媒體上。 如果備份集或副本不存在與備份媒體上,它就會被标記為expired, 并且不能用于任何還原操作;如果備份集或副本存在與備份媒體上,它就會維持available狀态。 如果以前被标記為expired 的備份集或副本再次存在于備份媒體上,crosscheck 指令就會将它标記回available。

RMAN> crosscheck backup;

使用目标資料庫控制檔案替代恢複目錄

配置設定的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=25 裝置類型=DISK

交叉校驗備份片段: 找到為 'AVAILABLE'

備份片段句柄=F:/BACKUP/BL_01LI7BSC_1_1.BAK RECID=1 STAMP=723758988

備份片段句柄=F:/BACKUP/BL_02LI7BSK_1_1.BAK RECID=2 STAMP=723758997

備份片段句柄=F:/BACKUP/BL_03LI7BVK_1_1.BAK RECID=3 STAMP=723759093

可以交叉效驗資料檔案備份,表空間備份,控制檔案備份以及伺服器參數檔案備份。此外,可以通過識别與備份相關聯的标記來選擇要交叉效驗和特定的備份。 基于使用的裝置或者基于一個時間周期,我們甚至可以交叉效驗所有的備份。 如:

Crosscheck backup of datafile 1;

Crosscheck backup of tablespace users;

Crosscheck backup of controlfile;

Crosscheck backup of spfile;

Crosscheck backup tag='TEST';

Crosscheck backup completed after 'sysdate-2';

Crosscheck backup completed between 'sysdate-5' and 'sysdate-2';

Crosscheck backup device type disk;

交叉驗證歸檔日志示例:

RMAN> crosscheck archivelog all;

通道 ORA_DISK_1: SID=24 裝置類型=DISK

對歸檔日志的驗證成功

歸檔日志檔案名=D:/ARCHIVELOG/BL_ARC0000000005_0723658881.0001 RECID=1 STAMP=723756640

歸檔日志檔案名=D:/ARCHIVELOG/BL_ARC0000000006_0723658881.0001 RECID=2 STAMP=723758988

歸檔日志檔案名=D:/ARCHIVELOG/BL_ARC0000000007_0723658881.0001 RECID=3 STAMP=723759092

我們可以基于一個号碼或标準(包括時間,具體的或指定範圍的SCN或日志序列号)來交叉效驗歸檔的重做日志備份,甚至還可以使用like參數與通配符來交叉效驗特定的歸檔日志備份。 如:

Crosscheck archivelog like 'ARC001.log';

Crosscheck archivelog 'D:/archivelog/arc023.log';

Crosscheck archivelog like '%ARC00012.LOG';

Crosscheck archivelog from time "to_date('2010-7-10','yyyy-mm-dd')";

Crosscheck archivelog until time "to_date('2010-7-10','yyyy-mm-dd')";

Crosscheck archivelog from sequence 12;

Crosscheck archivelog until sequence 522;

使用crosscheck copy指令還可以交叉效驗副本。 包括資料檔案副本,控制檔案副本,歸檔重做日志副本以及磁盤上的歸檔的重做日志。 如:

Crosscheck copy of datafile 5;

Crosscheck datafilecopy 'D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF';

1.2  RMAN 備份的驗證

 RMAN 提供的validate指令允許檢視給定的備份集和進行驗證以確定這個備份集能夠被還原。注意,validate 指令必須要獲得主鍵ID。 這個可以用list backup summary指令擷取。

RMAN> list backup summary;

備份清單

===============

關鍵字     TY LV S 裝置類型 完成時間   段數 副本數 壓縮标記

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

1       B  A  A DISK        07-7月 -10 1       1       NO         TAG20100707T200948

2       B  F  A DISK        07-7月 -10 1       1       NO         TAG20100707T200956

3       B  A  A DISK        07-7月 -10 1       1       NO         TAG20100707T201132

RMAN> validate backupset 1;

啟動 validate 于 10-7月 -10

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始驗證歸檔日志備份集

通道 ORA_DISK_1: 正在讀取備份片段 F:/BACKUP/BL_01LI7BSC_1_1.BAK

通道 ORA_DISK_1: 段句柄 = F:/BACKUP/BL_01LI7BSC_1_1.BAK 标記 = TAG20100707T200948

通道 ORA_DISK_1: 已還原備份片段 1

通道 ORA_DISK_1: 驗證完成, 用時: 00:00:03

完成 validate 于 10-7月 -10

1.3 備份儲存政策

儲存政策(retention policy)是管理備份和副本以及指定他們在備份媒體上儲存時間的一種方法。 我們可以定義兩種基本的儲存政策: 恢複視窗儲存政策(recovery window backup retention policy) 和 備份備援備份儲存政策(backup redundancy backup retention policy)。

每個備援政策将一直保持知道被修改或者删除(或者直到使用create controlfile指令重新建構控制檔案的時候)。 兩個備援政策是互相排斥的。此外,即使使用了備援政策,也隻能在使用帶obsolete參數的delete指令的時候才能删除實體備份片。

1.3.1 恢複視窗備份儲存政策

這種儲存政策是基于想要資料庫恢複到的最近日期定制的。 如:

Configure retention policy to recovery window 7 days;

在這個示例中,我們儲存近7天的備份是有效的,超過7天的備份會被丢棄。

1.3.2 備份備援備份儲存政策

這種備份政策RMAN 會從最新備份開始保留n個資料庫備份。 如:

Configure retention policy to redundancy 3;

這個示例中,我們儲存最後3份有效的備份。

1.3.3 儲存政策的維護

當一個給定的備份或者副本由于備份儲存政策的标準而被丢棄時,RMAN 不會自動删除這個備份或副本,而隻是标記為OBSOLETE.  我們可以使用 report obsolete 指令檢視被RMAN 标記為obsolete 的備份。

RMAN> report obsolete;

RMAN 保留政策将應用于該指令

将 RMAN 保留政策設定為備援 1

已廢棄的備份和副本報表

類型                 關鍵字 完成時間           檔案名/句柄

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

存檔日志          1      07-7月 -10         D:/ARCHIVELOG/BL_ARC0000000005_0723658881.0001

存檔日志          2      07-7月 -10         D:/ARCHIVELOG/BL_ARC0000000006_0723658881.0001

備份集               1      07-7月 -10

備份片段       1      07-7月 -10         F:/BACKUP/BL_01LI7BSC_1_1.BAK

當然,我們也可以使用帶有keep參數的change 指令修改需要保留的已經被丢棄備份的狀态。 使用這個指令時,其狀态被修改的備份或副本被認為是一個長期備份(long-term backup),并且不受相應的儲存政策的影響。

可以使用change指令将一個備份修改為永久備份,也可以為這個備份或副本定義丢棄的日志。此外,還可以定義與這個備份關聯的所有日志都應當被保留,以保證總是能将該備份恢複到目前時間。 我們還可以使用change nokeep指令來手工丢棄一個備份。示例:

RMAN> list backup;

備份集清單

===================

BS 關鍵字  大小       裝置類型占用時間 完成時間

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

1       52.15M     DISK        00:00:04     07-7月 -10

        BP 關鍵字: 1   狀态: AVAILABLE  已壓縮: NO  标記: TAG20100707T200948

段名:F:/BACKUP/BL_01LI7BSC_1_1.BAK

  備份集 1 中的已存檔日志清單

  線程式列     低 SCN    時間下限   下一個 SCN   下一次

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

  1    5       986340     06-7月 -10 1006590    07-7月 -10

  1    6       1006590    07-7月 -10 1008501    07-7月 -10

BS 關鍵字  類型 LV 大小       裝置類型 經過時間 完成時間

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

2       Full    974.46M    DISK        00:01:33     07-7月 -10

        BP 關鍵字: 2   狀态: AVAILABLE  已壓縮: NO  标記: TAG20100707T200956

段名:F:/BACKUP/BL_02LI7BSK_1_1.BAK

  備份集 2 中的資料檔案清單

  檔案 LV 類型 Ckp SCN    Ckp 時間   名稱

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

  1       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF

  2       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF

  3       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF

  4       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF

  5       Full 1008510    07-7月 -10

修改一個備份或副本時,必須引用與這個備份關聯的備份集關鍵字。 

另外,keep forever 選項有兩個重要的限制:

(1)隻有在使用恢複目錄時,才可以使用該選項

(2)如果使用FRA,則不能使用該選項

修改備份為永久儲存并将以及該備份的相關的日志儲存下來,保證總能将備份恢複到目前時間點

    change backupset 31 keep forever logs;

設定備份丢棄的新日期,将備份在多儲存7 天,7 天後将删除

    change backupset 32 keep until time 'sysdata + 7' logs;

檢查完報告後,可以使用帶有obsolete 參數的delete 指令訓示Oracle 删除要丢棄的備份,如:

Delete obsolete;

如果要使一個備份不受所選備援政策的影響,可以使用backup指令的keep 參數來為這個備份指定另一個儲存标準。 如:

Backup database keep forever;

Backup database keep until time "to_date('2010-7-10','yyyy-mm-dd')";

Backup database keep 5 days;

1.4 change 指令

Change 指令允許使用者修改備份的狀态。我們可能會遇到備份媒體裝置在某個時間愛你段中無效的情況(如突然斷電)。這時,我們就可以使用change 指令來訓示這個裝置上的備份是不可用的。

解決硬體故障和修複磁盤後,額可以再次執行change 指令,将備份改為可用的狀态。也可以将備份修改為不可用的狀态。在還原和恢複操作期間,不會考慮哪些不可用的備份,但在執行delete expired指令期間這些備份記錄不會被删除。 相關示例:

Change backup of database tag='TEST' unavailable;

Change backup of database like '%TEST%' unavailable;

Change backupset 33 unavailable;

Change backupset 33 available;

Change archivelog 'd:/archivelog/arc0001.log' unavailable;

可以使用change指令修改歸檔的重做日志備份的狀态。如:将已經備份了指定次數的所有歸檔的重做日志備份修改為不可用的狀态,也可以修改特定裝置上的所有備份的狀态。

Change archivelog all backed up 5 times to device type disk unavailable;

Change backup of database device type disk unavailable;

可是使用帶有delete 參數的change 指令删除備份集,即在備份媒體上的實體删除,并且從控制檔案和恢複目錄中删除。 前提是要知道備份集關鍵字,可以使用list backup 或 list copy 指令檢視。

删除備份集1:

RMAN> change backupset 1 delete;

備份片段清單

BP 關鍵字  BS 關鍵字  Pc# Cp# 狀态      裝置類型段名稱

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

1       1       1   1   AVAILABLE   DISK        F:/BACKUP/BL_01LI7BSC_1_1.BAK

是否确定要删除以上對象 (輸入 YES 或 NO)? yes

已删除備份片段

1 對象已删除

在上面的這個示例中,我們删除了備份集和它關聯的備份片。 也可以删除一些備份片。 通過 list backup指令我們可以看到備份片的名稱,比如:段名:F:/BACKUP/BL_01LI7BSC_1_1.BAK。

我們也可以檢視備份片的号碼,用catalog 使用者連接配接資料庫後,檢視rc_backup_piece 表,SQL如下:

SQL> select bs_key,bp_key,piece#,handle from rc_backup_piece;

    BS_KEY     BP_KEY     PIECE#   HANDLE

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

        52         55          1  D:/BACKUP/ORCL_02LI47UA_1_1

        53         56          1  D:/BACKUP/ORCL_03LI47UF_1_1

        75         82          1  D:/BACKUP/ORCL_04LI4816_1_1

删除備份片,我們可以用BP_KEY,也可以直接用段名(handle),如:

RMAN>  Change backuppiece 'F:/BACKUP/BL_02LI7BSK_1_1.BAK' delete;

2       2       1   1   AVAILABLE   DISK        F:/BACKUP/BL_02LI7BSK_1_1.BAK

使用備份集片,如:

Change backuppiece 622 delete;

Change archivelog until logseq=54 delete;

最後,可以使用change backuppiece uncataog指令從目錄中删除備份集片。 如果删除最後剩餘的備份集片,那麼它也将删除備份集記錄。如:

Change backuppiece 'F:/BACKUP/BL_02LI7BSK_1_1.BAK' uncatalog;

1.5 delete 指令

備份集不是永遠存在的。我們可以使用儲存政策标記備份有效性和生存期的結束。但是,備份政策的實施不會從RMAN目錄中删除備份,而隻是将這些備份标記為丢棄狀态。

Delete 指令對備份和副本的影響很大。通過delete指令,可以删除基于儲存标準被标記為丢棄的任何備份,還可以将恢複目錄或控制檔案中的備份從expired狀态變為deleted狀态。 如:

Delete expired;

執行delete指令時,RMAN會請求使用者确認這個删除指令,如果确認了這個删除指令,RMAN 就會完成delete操作。

注意: 如果一個備份被标記為deleted 狀态,就不能恢複這個備份。 如果該備份實體可用,我們仍然可以使用dbms_backup_restore過程來恢複這個備份。

1.6 在RMAN中為其他備份編寫目錄

使用catalog 指令可以在RMAN中記錄資料檔案備份,歸檔日志備份和控制檔案備份,随後還能使用這些備份來還原和恢複資料庫。 Oracle 10g允許使用catalog指令來為控制檔案中已有的備份集片編寫目錄。當使用一個不包含最新的RMAN資訊的較早備份控制檔案還原資料庫時,則可以很友善得使用該功能來完成。

示例:

我們先備份一個表空間,歸檔檔案,控制檔案。 然後通過catalog 把這些資訊添加到恢複目錄裡。

SQL> conn /@bl as sysdba;

已連接配接。

SQL> alter tablespace users begin backup;

表空間已更改。

SQL> select file_name from dba_data_files;

FILE_NAME

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

D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF

D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF

D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF

D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF

D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF

SQL> host copy D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF F:/backup;

已複制         1 個檔案。

SQL> alter tablespace users end backup;

SQL> alter system archive log current;

系統已更改。

SQL> host copy d:/archivelog/BL_ARC0000000017_0723658881.0001 F:/backup

SQL> alter database backup controlfile to 'F:/backup/bl-2010-7-11.ctl';

資料庫已更改。

現在在RMAN中将上面的備份資訊寫入catalog

C:/Users/Administrator.DavidDai>rman target /@bl;

恢複管理器: Release 11.2.0.1.0 - Production on 星期日 7月 11 08:51:50 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

連接配接到目标資料庫: BL (DBID=680066685)

RMAN> catalog datafilecopy 'F:/backup/users01.dbf';

已将資料檔案副本列入目錄

資料檔案副本檔案名=F:/BACKUP/USERS01.DBF RECID=3 STAMP=724063951

RMAN> catalog archivelog 'f:/backup/BL_ARC0000000017_0723658881.0001';

已編目的歸檔日志

歸檔日志檔案名=F:/BACKUP/BL_ARC0000000017_0723658881.0001 RECID=14 STAMP=724063994

RMAN> catalog controlfilecopy 'f:/backup/BL-2010-7-11.CTL';

已列入目錄的控制檔案副本

控制檔案副本檔案名=F:/BACKUP/BL-2010-7-11.CTL RECID=4 STAMP=724064022

Catalog指令允許将與新的備份集相關的資訊輸入到控制檔案或恢複目錄中。 RMAN将重寫與編寫目錄的資訊沖突的已存在的目錄資訊。 如果需要移動備份集片的位置,也可以使用該指令。

檢視備份集資訊

3       7.50K      DISK        00:00:01     07-7月 -10

        BP 關鍵字: 3   狀态: AVAILABLE  已壓縮: NO  标記: TAG20100707T201132

段名:F:/BACKUP/BL_03LI7BVK_1_1.BAK

将備份集移到其他位置,然後用catalog修改控制檔案中每個移動的備份片的正确位置:

RMAN> catalog backuppiece 'f:/BL_03LI7BVK_1_1.BAK';

已将備份片段列入目錄

備份片段句柄=F:/BL_03LI7BVK_1_1.BAK RECID=12 STAMP=724064512

也可以使用帶有start with 選項的catalog指令,該指令允許定義包含将要編寫目錄的RMAN 備份集片的目錄,RMAN 然後對該目錄中的所有備份集片編寫目錄。

RMAN>catalog start with 'f:/backup';

該指令會提示編寫目錄的檔案清單,并詢問是否希望對所列出的檔案編寫目錄,如果确定編寫目錄,RMAN就會對列出的所有備份集片編寫目錄。該指令也允許對一些具有類似名稱的備份集片編寫目錄。

當使用catalog start with指令時,不會局限與特定的檔案編寫目錄;該指令将嘗試對符合參數清單的所有檔案編寫目錄。 然後,在執行catalog過程中,非備份集片的檔案将會使編寫目錄的過程失敗,并且産生一個錯誤,如果作為備份集片檔案被成功編寫目錄,則不管是否會産生其他錯誤。

二. 恢複目錄的維護

使用恢複目錄時會涉及到其他一些維護活動,比如在資料庫更新或遷移期間更新恢複目錄,手工配置資料庫對應物以及在某些資料庫操作後在同步恢複目錄。

2.1 在RMAN中取消注冊資料庫

在Oracle 10g 之前,從恢複目錄中取消注冊資料庫是一個手工操作的過程。在10g中,從恢複目錄中删除資料庫隻需要執行 unregister database。如:

RMAN>unregister database orcl;

注意的是: 該指令不會删除該資料庫的備份檔案,而隻是删除這些備份檔案的恢複目錄引用。 同樣需要注意的是,隻需要連接配接恢複目錄就可以執行該指令。

2.2 資料庫的遷移和更新問題

更新資料庫時,必須同僚更新恢複目錄,因為資料庫版本, RMAN 版本和恢複目錄版本之間存在嚴格的格則。

用恢複目錄使用者連接配接資料庫,然後查詢rcver表,就可以看到恢複目錄的版本:

SQL> conn rman/rman@orcl;

SQL> select version from rcver;

VERSION

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

11.02.00.01

   隻要恢複目錄的版本不低于資料庫的版本,就能夠執行各種操作。 是以,如果在同一個恢複目錄中存儲多個資料庫,隻要更新這個恢複目錄中的一個資料庫。

更新恢複目錄很簡單,隻需要在RMAN 裡執行upgrade catalog指令即可。 RMAN 會提示使用者再次輸入upgrade catalog指令,随後将更新恢複目錄。

C:/Users/Administrator.DavidDai>rman target /@bl catalog rman/rman@orcl;

恢複管理器: Release 11.2.0.1.0 - Production on 星期日 7月 11 10:16:20 2010

連接配接到恢複目錄資料庫

RMAN> upgrade catalog;

恢複目錄所有者是RMAN

再輸入一次 UPGRADE CATALOG 指令來确認目錄更新

恢複目錄已更新到版本11.02.00.01

DBMS_RCVMAN 程式包更新為 11.02.00.01 版

DBMS_RCVCAT 程式包更新為 11.02.00.01 版

2.3 手工重置資料庫對應物(reset catalog)

在打開資料庫時,如果使用resetlogs參數,就會建立一個新對應物。 如果這個操作是在RMAN 中進行,則會正确的更新恢複目錄,但是,如果手工執行resetlogs指令(比如:sqlplus),就必須在恢複目錄中重置資料庫對應物。

Rman>reset database to incarnation 5;

2.4 手工再同步恢複目錄(resync catalog)

RMAN使用恢複目錄時,它會使用在同步程序來確定恢複目錄和目标資料庫的控制檔案一緻。通常,Oracle在RMAN操作(備份和恢複)後會再同步資料庫,這樣就不必經常再同步恢複目錄。需要再同步恢複目錄的一個執行個體是有時使用恢複目錄,有時不使用恢複目錄,此時,可以使用resync catalog指令手工使Oracle 再同步恢複目錄。

Rman>resync catalog;

Oracle 同步恢複目錄時,它首先會建立一個快照控制檔案,并比較這個檔案和恢複目錄。 完成比較後,Oracle更新恢複目錄,是恢複目錄與資料庫控制檔案同步。

2.5 恢複目錄記錄的删除

隻有很少的記錄會從恢複目錄中被删除,如果不加以維護,狀态為deleted的就備份會一直駐留在恢複目錄中。為了解決這個問題,Oracle提供了$ORACLE_HOME/rdbms/admin/prgmanc.sql 腳本來删除恢複目錄中狀态為deleted的所有記錄。 建議定期執行這個腳本,以控制檔案恢複目錄的大小。

如果要從恢複目錄中删除舊的對應物記錄,就必須從DBINC表中删除這些對應物。可以使用RC_DATABASE_INCARNATION 視圖來确定要删除的對應物,記錄想删除的每個對應物的DBINC_KEY值。然後在sqlplus中執行delete 指令,如:

SQL> select * from rc_database_incarnation;

    DB_KEY       DBID  DBINC_KEY NAME     RESETLOGS_CHANGE# RESETLOGS_TIME CUR P

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

         2 1247395743          4 ORCL                940976 21-5月 -10     NO  0

         2 1247395743         21 ORCL                     1 02-4月 -10     NO

         2 1247395743        787 ORCL               8554968 06-7月 -10     YES 2

SQL> delete from dbinc where dbinc_key=4;

已删除 1 行。

三. 備份恢複目錄

我們可以使用RMAN來備份資料庫,同樣可以用RMAN 來備份恢複目錄資料庫。 隻要確定設定了合理的恢複政策,就能夠很快的還原恢複目錄。 

丢失恢複目錄并不可怕,即使使用了恢複目錄,在以後也可以不使用恢複目錄就能夠恢複資料庫。關鍵的是,我們需要資料庫控制檔案的備份。

四. RMAN 存儲的腳本

在RMAN中,我們可以建立一個指令檔案,裡面包含rman指令,然後在RMAN的中調用這個檔案。如:

Rman target usr/pwd cmdfile=backup.cmd

或者,也可以直接在RMAN 中直接運作

@@backup.cmd

此外,RMAN 還提供了恢複目錄中的存儲腳本, 這些操作必須使用恢複目錄。

4.1 建立存儲的腳本

使用create script RMAN 指令可以在恢複目錄中存儲腳本。 建立每個存儲的腳本時,都要為腳本指定一個名稱。 可以建立執行資料庫備份,恢複和維護操作的腳本。在腳本中,RMAN 允許使用comment 參數存儲與存儲腳本相關的注釋。 注意: 必須連接配接到恢複目錄。 如:

RMAN> create script my_backup_script

2> comment 'dave'

3> {

4> backup database plus archivelog;

5> }

已建立腳本 my_backup_script

4.2 修改存儲腳本

使用replace script 指令可以替換恢複目錄中的存儲腳本。

RMAN> replace script my_backup_script

2> comment 'bl'

4> backup database plus archivelog delete input;

已替換腳本 my_backup_script

4.3 删除存儲腳本

使用delete script指令可以删除一個存儲腳本。

RMAN>   Delete script my_backup_script;

已删除腳本: my_backup_script

4.4 使用存儲腳本

建立一些存儲過程腳本後,可以執行execute script指令來使用這些腳本。如:

Run { execute script my_backup_script; }

4.5 列印存儲的腳本

RMAN> Print script my_backup_script;

正在列印存儲的腳本: my_backup_script

{backup database plus archivelog;}

還可以使用RC_STORED_SCRIPT_LINE恢複目錄視圖來顯示存儲的腳本的内容,如:

SQL> select script_name,text from rc_stored_script_line order by script_name,line;

SCRIPT_NAME                    TEXT

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

my_backup_script               {

my_backup_script               backup database plus archivelog delete input;

my_backup_script               }

五. 删除資料庫

如果無法采取其他方法來處理資料庫的問題,則可以使用RMAN 的drop database。 隻需要将資料庫置于受限制的會話模式,在使用RMAN連接配接到目标資料庫,執行drop database指令,就可以安靜的删除資料庫。 如果添加inculding backups參數,則在删除同時删除RMAN相關的備份。 執行該指令時,RMAN 首先會确認操作,然後繼續删除資料庫。 如果希望不回顯提示,可以使用noprompt參數。 示例:

DROP DATABASE;

DROP DATABASE NOPROMPT;

DROP DATABASE INCLUDING BACKUPS;

DROP DATABASE INCLUDING BACKUPS NOPROMPT;

The “DROP DATABASE” command deletes the

Datafiles

Logfiles

Controlfiles

Spfile

The ” DROP DATABASE INCLUDING BACKUPS ” command in addition to the above files also removes

Archivelogs

Backup pieces generated by RMAN

SQL> startup mount;

ORACLE 例程已經啟動。

Total System Global Area  636100608 bytes

Fixed Size                  1376464 bytes

Variable Size             457183024 bytes

Database Buffers          171966464 bytes

Redo Buffers                5574656 bytes

資料庫裝載完畢。

SQL> alter system enable restricted session;

alter system disable restricted session.

C:/Users/Administrator.DavidDai>rman target /;

恢複管理器: Release 11.2.0.1.0 - Production on 星期日 7月 11 14:23:48 2010

已連接配接到目标資料庫: BL (DBID=680066685, 未打開)

RMAN> DROP DATABASE INCLUDING BACKUPS;

資料庫名為 "BL" 且 DBID 為 680066685

是否确實要删除所有備份和資料庫 (輸入 YES 或 NO)? yes

通道 ORA_DISK_1: SID=10 裝置類型=DISK

......

補充一點,windows 下,不會删除服務,要删除服務,需要手工的運作ormdim 指令。如:

C:/Users/Administrator.DavidDai>oradim -delete -sid bl

Unable to stop service, OS Error = 1062

執行個體已删除。

一. List 指令

RMAN的list指令是一種在資料庫控制檔案或恢複目錄中查詢備份的曆史資訊的方法。清單提供了一組資訊,包括從資料庫對應物的清單到備份集和歸檔日志的備份的清單的所有資訊。

1.1 列出對應物

List incarnation 指令為使用者提供了目标資料庫的每個資料庫對應物清單。 如果有必要,可以使用這個清單的資訊将資料庫恢複到執行最後一條resetlogs指令前的某個時間點。

RMAN> list incarnation;

資料庫原型清單

DB 關鍵字  Inc 關鍵字 DB 名  DB ID            STATUS  重置 SCN  重置時間

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

1       1       ORCL     1247395743       PARENT  1          02-4月 -10

2       2       ORCL     1247395743       PARENT  940976     21-5月 -10

3       3       ORCL     1247395743       ORPHAN  8426617    06-7月 -10

4       4       ORCL     1247395743       CURRENT 8554968    06-7月 -10

Oracle 10g中新增的列是status,該列列出的是對應物的狀态,該狀态表明對應物是就的對應物(parent),目前對應物(current),和孤立的對應物(ORPHAN,即在resetlogs指令之後進行恢複)。 

重置SCN(Reset SCN)和重置時間(Reset Time)主要說明建立資料庫對應物的時間,這也是第一個條目的Reset SCN為1的原因。 該列對使用resetlogs指令進行恢複有用,并使得能較容易的恢複到前面的對應物。

注意一點,使用恢複目錄和不使用恢複目錄輸出是有差異的。 在Inc Key 上有出入。

1.2 列出備份

List指令提供了許多不同的選項來報告資料庫備份和副本的狀态。

1.2.1 概述可用的備份

113     B  F  A SBT_TAPE    18-6月 -10 1       1       NO         TAG20100618T085926

138     B  F  A DISK        21-6月 -10 1       1       YES        TAG20100621T233122

219     B  F  A DISK        22-6月 -10 1       1       NO         TAG20100622T212749

231     B  1  A DISK        23-6月 -10 1       1       NO         ORCL

1072    B  F  A DISK        06-7月 -10 1       1       NO         TAG20100706T134705

在這個示例中我們可以得到一下資訊:

KEY(關鍵字): 表示備份集鍵

TY(類型)和LV清單示列的備份類型:

B[Backup] 表示備份

F[Full] 表示完全備份

A[Archivelog]

0和1 表示增量備份[Incremental backup]

S 列說明備份的狀态: A 表示Available,X 表示Expired.

Device Type:  說明備份的裝置是錄音帶還是磁盤

大多數list指令都可以在末尾使用summary參數,如:

List backup of database summary;

List expired backup of archivelog all summary;

List backup of tablespace users summary;

1.2.2 按備份類型列出備份

可以使用list backup by file 指令列出每個備份集和備份集片。它可以按資料檔案備份,歸檔日志備份,控制檔案和spfile檔案備份列出備份資訊。 如:

RMAN> list backup by file;

控制檔案備份清單

============================

CF Ckp SCN Ckp 時間   BS 關鍵字  S 段數 副本數 壓縮标記

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

8625387    06-7月 -10 1072    A 1       1       NO         TAG20100706T134705

8555238    06-7月 -10 1000    A 1       1       NO         TAG20100706T091808

SPFILE 備份的清單

======================

修改時間   BS 關鍵字  S 段數 副本數 壓縮标記

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

06-7月 -10 1072    A 1       1       NO         TAG20100706T134705

06-7月 -10 1000    A 1       1       NO         TAG20100706T091808

27-6月 -10 732     A 1       1       NO         TAG20100628T110902

21-6月 -10 231     A 1       1       NO         ORCL

21-6月 -10 219     A 1       1       NO         TAG20100622T212749

21-6月 -10 138     A 1       1       YES        TAG20100621T233122

17-6月 -10 113     A 1       1       NO         TAG20100618T085926

1.2.3 其他備份資訊

如果想要檢視RMAN 更多的資訊,可以使用list backup指令。該指令可以提供所生成備份(包括備份集,歸檔的重做日志備份,控制檔案備份以及伺服器參數檔案備份)的詳細資訊。 

113     Full    16.00M     SBT_TAPE    00:00:05     18-6月 -10

        BP 關鍵字: 116   狀态: AVAILABLE  已壓縮: NO  标記: TAG20100618T085926

        句柄: 07lghd6e_1_1   媒體: /,07lghd6e_1_1

  包含的 SPFILE: 修改時間: 17-6月 -10

  SPFILE db_unique_name: ORCL

138     Full    1.03M      DISK        00:00:02     21-6月 -10

        BP 關鍵字: 142   狀态: AVAILABLE  已壓縮: YES  标記: TAG20100621T233122

段名:D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/BACKUPSET/2010_06_21/O1_MF_NC

SNF_TAG20100621T233122_61Z1KVPK_.BKP

  包含的 SPFILE: 修改時間: 21-6月 -10

1.2.4 列出适合恢複的備份

如果需要檢視能夠用于還原和恢複資料庫的所有資料檔案備份或副本,則可以使用list recoverable指令。 List 指令提供了狀态為Available的,可用于還原資料庫的所有備份清單(該清單值用于目前的對應物),其中包括備份,映像副本和增量備份。 如果增量備份沒有有效的父備份,它就不會包含在備份中。

RMAN> list recoverable backup of database;

1.2.5 列出到期的備份

執行list expired backup指令可以列出到期的備份,該指令也可以獲得到期的表空間和資料檔案的備份清單,如果插入正确的關鍵字(如: list expired backup of datafile 3 或者 list expired backup of archivelog all),則可以獲得到期的歸檔日志備份和控制檔案/spfile檔案的自動備份清單。

RMAN> list expired backup;

1.2.6 按表空間名和資料檔案号列出備份

執行list backup of tablespace 或者list backup of datafile 指令可以列出指定表空間或資料檔案的輸出:

RMAN> list backup of tablespace users;

RMAN> list backup of datafile 3;

1.2.7 列出歸檔日志備份

RMAN 提供了列出歸檔日志備份的幾種選項。 如果要得到目前存在的歸檔日志(并不意味着它們已經備份)的完整概述,可以使用list archivelog all指令:

RMAN> list archivelog all;

如果想要得到更詳細的報告,可以使用: list backup of archivelog all

RMAN> list backup of archivelog all;

如果隻想檢視到期的備份集,可以執行list expired backup of archivelog all;

RMAN> list expired backup of archivelog all;

還可以設定時間或日志序列号來限制報告中顯示的内容,如:

RMAN> list expired backup of archivelog until sequence 3;

RMAN> list expired backup of archivelog until time "to_date('2010-7-6','yyyy-mm-dd')";

1.2.8 列出控制檔案和伺服器參數檔案備份

List backup of controlfile指令可以向使用者提供控制檔案備份的清單,list backup of spfile 可以提供伺服器參數檔案備份的清單。

RMAN> list backup of controlfile;

RMAN> list backup of spfile;

1.3  列出映像副本

List 指令也可以用來判斷資料庫映像副本的狀态,如:

RMAN> list copy;

1.3.1 列出資料檔案副本

可以使用list copy of database指令生成所有資料檔案副本的概述清單:

RMAN> list copy of database;

也可以使用list copy of tablespace 或者list copy of datafile 指令來顯示表空間或資料檔案的副本。

RMAN> list copy of tablespace users;

RMAN> list copy of datafile 1;

1.3.2 列出歸檔的重做日志副本

可以用list copy of archivelog copies指令檢視歸檔的重做日志副本,如:

RMAN> list copy of archivelog all;

也可以按照時間,序列或者資料庫的SCN 列出特定的歸檔的重做日志副本,如:

RMAN> list copy of archivelog from sequence 1;

RMAN> list copy of archivelog from sequence 1 until sequence 22;

1.3.3 列出控制檔案副本

RMAN 可以通過執行list controlfile copy指令來顯示控制檔案副本。

RMAN> list copy of controlfile;

二. Report 指令

RMAN的report指令可以使用者判斷資料庫的目前可恢複狀态和提供資料庫備份的特定資訊。

2.1 指定最近沒有備份的資料檔案

查詢3天内沒有備份過的表空間,可以用如下指令:

RMAN> report need backup days=3;

也可以根據需要應用的增量備份數生成報告:

RMAN> report need backup incremental =3;

2.2 報告備份備援或恢複視窗

可以用report need backup redundancy 指令來确定為滿足備份備援政策而需要備份的資料檔案。 如:

RMAN> report need backup redundancy =2;

檔案備援備份少于2個

檔案 #bkps 名稱

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

1    0     D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF

2    0     D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF

3    0     D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF

4    0     D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF

也可以用report need backup recovery window days指令為備份建立一個時間值最小的恢複視窗,并且報告備份時間長于這個恢複視窗的資料檔案。

RMAN> report need backup recovery window of 2 days;

必須備份以滿足 2 天恢複視窗所需的檔案報表

檔案天資料 名稱

1    100   D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF

2    100   D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF

3    18    D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF

4    100   D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF

2.3  報告資料檔案的不可用恢複操作

對于表空間中對象群組成這些表空間的資料檔案執行的不可恢複操作會導緻某些可恢複性問題。我們可以使用report unrecoverable指令檢視unrecoverable 的對象。

RMAN> report unrecoverable;

2.4 報告資料庫模式(Schema)

這裡的Schema指的是資料庫的實體結構,模式包括資料檔案名,資料檔案号,為這些資料檔案指派的表空間,資料檔案的大小,以及資料檔案是否含有復原段。 我們可以檢視目前的模式,也可以檢視過去時間點的模式。

RMAN> report schema;

2. 5 報告丢失的備份

如果使用了儲存政策,備份有可能被标記為丢失狀态(obsolete),可以執行report obsolete指令檢視這些資訊。

備份集               112    18-6月 -10

備份片段       115    18-6月 -10         06lghd3f_1_1

備份集               113    18-6月 -10

備份片段       116    18-6月 -10         07lghd6e_1_1

備份集               137    21-6月 -10

備份片段       141    21-6月 -10         D:/APP/ADMINISTRATOR/FLASH_RECOVERY_ARE

A/ORCL/BACKUPSET/2010_06_21/O1_MF_NNNDF_TAG20100621T233122_61Z1GD2R_.BKP