Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)

RMAN是ORACLE提供的一個備份與恢復的工具,可以用來備份和還原數據庫文件、 歸檔日誌和控制文件。它也可以用來執行完全或不完全的數據庫恢復。

    RMAN可以由命令行接口或者 OEM的 Backup Manager GUI 來控制。

    4.1 基本知識

    4.1.1 RMAN的組件、概念

    1.  RMAN  主要包括以下組件:

    Target Database:(目標數據庫)

    就是需要RMAN對其進行備份與恢復的數據庫,RMAN  可以備份數據文件,控制文件,歸檔日誌,spfile.(注意:RMAN不能用於備份聯機日誌、初始化參數文件和口令文件)

    Server Session:(服務器會話)

    RMAN啓動數據庫上的Oracle服務器進程,將建立一個與目標數據庫的會話。由目標數據庫上的服務器進程進行備份、還原、恢復的實際操作。

    服務器進程

    RMAN的服務進程是一個後臺進程,用於與RMAN工具與數據庫之間的通信,也用於RMAN工具與磁盤/磁帶等I/O設置之間的通信,服務進程負責備份與恢復的所有工作,在如下情況將產生一個服務進程:當連接到目標數據庫分配一個新的通道

    Channel:    (通道)

    一個通道是 RMAN和目標數據庫之間的一個連接,"allocate channel"命令在目標數據庫啓動一個服務器進程,同時必須定義服務器進程執行備份或者恢復操作使用的 I/O類型。

    通道控制命令可以用來:

    控制 RMAN使用的 O/S資源,影響並行度

    指定 I/O帶寬的限制值(設置 limit read rate 參數)

     定義備份片大小的限制(設置 limit kbytes)

     指定當前打開文件的限制值(設置 limit maxopenfiles)

    recovery catalog: (恢復目錄)

    用來保存備份與恢復信息的一個數據庫,不建議創建在目標數據庫上。RMAN  利用恢 複目錄記載的信息去判斷如何執行需要的備份恢復操作。

    如果不採用恢復目錄,備份信息可以存在於目標數

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第2部分:

據庫的 control file 中。

 

    如果存放在目標數據庫的  control  file  中,控件文件會不斷增長,不能保存  RMAN  的Script. CONTROL_FILE_RECORD_KEEP_TIME  (default=7):控件文件中  RMAN  信息保存的最短時間。

    使用恢復目錄的優勢:  可以存儲腳本,記載較長時間的備份恢復操作。

    RMAN Repository:    (RMAN  恢復目錄數據庫)

    存放 recovery catalog(恢復目錄)的數據庫。建議爲恢復目錄數據庫創建一個單獨的數據庫。

    MML: (媒體管理庫)

    Media Management Layer (MML)是第三方工具或軟件,用於管理對磁帶的讀寫與文件的 跟蹤管理。如果你想直接通過  RMAN  備份到磁帶上,就必須配置媒體管理層,媒體管理層 的工具如備份軟件可以調用 RMAN來進行備份與恢復。

   2.概念述語

    Backup Sets (備份集合)

    備份集合的特性:包括一個或多個數據文件或歸檔日誌,以oracle專有的格式保存,有一個完全的所有的備份片集合構成,構成一個完全備份或增量備份。

    Backup Pieces (備份片)

    一個備份集由若干個備份片組成。每個備份片是一個單獨的輸出文件。一個備份片的大 小是有限制的;如果沒有大小的限制,  備份集就只由一個備份片構成。備份片的大小不能 大於使用的文件系統所支持的文件長度的最大值。

    Image Copies 鏡像備份

    鏡像備份是獨立文件(數據文件、歸檔日誌、控制文件)的備份。它很類似操作系統級 的文件備份。它不是備份集或備份片,也沒有被壓縮。

    Full backup Sets 全備份集合

    全備份是一個或多個數據文件中使用過的數據塊的的備份。沒有使用過的數據塊是不被備份的,也就是說,oracle  進行備份集合的壓縮。

    Incremental backup sets 增量備份集合

    增量備份是指備份一個或多個數據文件的自從上一次同一級別的或更低級別的備份以來被修改過的數據塊。  與完全備份相同,增量備份也進行壓縮。

    File multiple

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第3部分:

xing

 

    多個數據文件可以在一個備份集中。

    Recovery catalog resyncing  恢復目錄同步

    使用恢復管理器執行 backup、copy、restore 或者 switch 命令時,恢復目錄自動進行更 新,但是有關日誌與歸檔日誌信息沒有自動記入恢復目錄。需要進行目錄同步。使用 resync catalog命令進行同步。

    RMAN> resync catalog;

    Incarnation  對應物

    在不完全恢復完成之後,通常需要使用  resetlogs  選項來打開數據庫。resetlogs  表示一個 數據庫邏輯生存期的結束和另一個數據庫邏輯生存期的開始。數據庫的邏輯生存期也被稱爲 一個對應物(incarnation)。每次使用  resetlogs  選項來打開數據庫後都會創建一個新的數據庫 對應物。

    4.1.2 RMAN的使用:命令行接口與腳本

    數據庫狀態:RMAN恢復目錄數據庫:  必須OPEN目標數據庫:  根據不同情況,必須MOUNT或OPEN

    1.  使用不帶恢復目錄的 RMAN

    設置目標數據庫的  ORACLE_SID  ,執行:$ rman nocatalog RMAN> connect target RMAN> connect target user/pwd>@db

    2.  使用帶恢復目錄的RMAN

    $ rman catalogrman/rman RMAN> connecttarget    //連接本地數據庫作爲目標數據庫RMAN> connecttarget user/pwd>@db //連接遠程數據庫或$ rman catalogrman/rman targetuser/pwd>@db

 

 

 

   3.  命令行接口

    1、單個執行

    RMAN> backup database;

    2、運行一個命令塊

    RMAN> RUN { 2> copy datafile 10 to 3> '/oracle/prod/backup/prod_10.dbf';4> }

  &nb

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第4部分:

sp; 3、運行存儲在恢復目錄中的腳本:

 

    RMAN> RUN    { EXECUTE SCRIPT backup_whole_db };

    4、運行外部腳本:

    $ rman catalog rman/rman target / @backup_db.rman

    $ rman cmdfile=backup.rman msglog=backup.log

    RMAN> @backup_db.rman ]

    RMAN> RUN    { @backup_db.rman }

    如果在cron中執行,注意在腳本中設置正確的環境變量,例:

    #set env export ORACLE_HOME=/opt/oracle/product/9.2

    export ORACLE_SID=test

    export NLS_LANG="AMERICAN_AMERICA.zhs16gbk"

    export PATH=$PATH:$ORACLE_HOME/bin rman cmdfile=backup_db.rman

    4.  使用腳本

    創建或者取代腳本:

    RMAN> create script alloc_disk {

    2> # Allocates one disk

    3> allocate channel dev1 type disk;

    4> setlimit channel dev1 kbytes 2097150 maxopenfiles 32 readrate 200;

    5> } RMAN> replace script rel_disk { 2> # releases disk 3> release channel dev1;5> }

    刪除腳本:RMAN> DELETE SCRIPT Level0Backup;

    查看腳本:RMAN> PRINT SCRIPT Level0Backup;

    運行腳本:RMAN> RUN { EXECUTE SCRIPT

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第5部分:

backup_whole_db };

 

    5.  運行OS命令

    RMAN支持通過執行 host命令暫時退出 RMAN的命令提示符而進入到操作系統的命令環境。

    6.  執行SQL語句

    在  RMAN  的命令提示符後輸入  SQL  命令,然後在一對單引號(雙引號亦可)中輸入要執行的  SQL  語句,例如:RMAN> SQL 'ALTER SYSTEM CHECKPOINT';對於 SELECT語句,無法得到結果。可以先執行 host再用 SQLPLUS.

   4.2 RMAN 的配置

    4.2.1  建立Recovery Catalog恢復目錄

    (1)  在目錄數據庫中創建恢復目錄所用表空間:

    SQL> create tablespace rman_ts datafile '/xxx/rman_ts.dbf' size 20M;

    (2)  在目錄數據庫中創建RMAN  用戶並授權:

    SQL>  create  user  rman  identified  by  rman  default  tablespace  rman_ts  temporary tablespace temp quota unlimited on rman_ts;SQL> grant connect, resource, recovery_catalog_ownerto rman;

    (3)  在目錄數據庫中創建恢復目錄

    $ rman catalog rman/rman RMAN> create catalog tablespace rman_ts;

    (4)  登記目標數據庫:

    一個恢復目錄可以註冊多個目標數據庫,註冊目標數據庫的命令爲:$ RMAN catalog rman/rman target user/pwd @rcdb; RMAN> register database;

    4.2.2  查看RMAN的默認設置SHOW命令

    必須連接目標數據庫RMAN> show all

 

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第6部分:

    RMAN> show channel;                              //  通道分配 RMAN> show device type;    // IO 設備類型

 

    RMAN> show retention policy;               //  保存策略

    RMAN> show datafile backup copies;     //  多個備份的拷貝數目

    RMAN> show maxsetsize; //  備份集大小的最大值

    RMAN> show exclude;    //  不必備份的表空間

    RMAN> show backup optimization;                                                 //  備份的優化

    4.2.3  配置RMAN的默認設置

    1.  配置備份集文件的格式  (format)

    RMAN> configure channel device type disk format'/u05/oracle/rmanback/%U';備份文件可以自定義各種各樣的格式,如下%c  備份片的拷貝數%d  數據庫名稱%D  位於該月中的第幾天  (DD)

    %M  位於該年中的第幾月  (MM)

    %F  一個基於  DBI

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第7部分:

D  唯一的名稱,這個格式的形式爲  c-IIIIIIIIII-YYYYMMDD-QQ,其中 IIIIIIIIII  爲該數據庫的 DBID,YYYYMMDD  爲日期,QQ  是一個  1-256  的

 

    序列%n  數據庫名稱,向右填補到最大八個字符%u  一個八個字符的名稱代表備份集與創建時間%p  該備份集中的備份片號,從 1  開始到創建的文件數%U  一個唯一的文件名,代表%u_%p_%c %s  備份集的號%t  備份集時間戳%T  年月日格式(YYYYMMDD)

    2.  配置默認 IO設備類型         ( device type )

    IO  設備類型可以是磁盤或者磁帶,在默認的情況下是磁盤,可以通過如下的命令 進行重新配置。

    RMAN> configure default device t ype to disk; RMAN> configure default device t ype to sbt;注意,如果換了一種 IO  設備,相應的配置也需要做修改,如RMAN> configure device type sbt parallelism 2;

    3.  配置自動分配的通道    ( Chanel )

    RMAN> configure channel device type disk format

    '/U01/ORACLE/BACKUP/%U在運行塊中,手工指定通道分配,這樣的話,將取代默認的通道分配。

    RMAN> Run { allocate channel cq type disk format='/u01/backup/%u.bak';…

    }

    通道的一些特性:讀的速率限制                                     Allocate channel ……rate = integer 最大備份片大小限制         Allocate channel &hel

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第8部分:

lip;… maxpiecesize = integer 最大併發打開文件數(默認 16)  Allocate channel …… maxopenfile = integer

 

    4.  配置默認的保存策略  ( Retention Policy)

    保存策略是管理備份與副本有效期或者是否有效的一種方法。恢復數據庫的時候Oracle  不 考 慮 失效 的 備 份。我們可以定義兩種保存策略:

    恢復窗口備份保存策略(recovery window  backup  retention policy  )和冗餘備份保存策略(redundancy backup retention policy  )

    備份策略保持    

    分爲兩個保持策略:

    一個是時間策略,決定至少有一個備份能恢復到指定的日期

    一個冗餘策略,規定至少有幾個冗餘的備份。 恢復窗口備份保存策略這種保存策略類型的使用基於數據庫可能恢復到的最早的日期。  例如,假設今天 是星期一,此前存在 3 個備份。第一個備份在昨天生成的,第二個備份是上星期四生 成的,而最後一個備份是  10  天前備份的。假如恢復窗口是  7  天,那麼昨天和上星期 四的備份是有效備份,而  10  天前的備份會成爲廢棄備份。下面的命令將恢復窗口配置爲 7 天:RMAN> configure retention policy to recovery window of 7 days;冗餘備份保存策略使用這種保存策略,RMAN    會從最新備份開是保留  N  個數據備份,其餘的廢棄。 例如,如果有四個備份,而冗餘數是 3,那麼最早的那個備份將被廢棄。下面的命令將 備份策略設置爲  3:RMAN> configure retention policy to redundancy3;設置 NONE可以把使備份保持策略失效,Clear  將恢復默認的保持策略RMAN> configure retention policy to none;例:保 證 至 少有一 個 備份 能 恢復 到  Sysdate-5     的時 間點 上, 之 前 的備份將 標 記 爲Obsolete RMAN> configure retention policy to recovery window of 5 days;至少需要有三個冗餘的備份存在,如果多餘三個備份以上的備份將標記爲冗餘RMAN> configure retention policy to redundancy 5;

    5.  配置多個備份

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第9部分:

的拷貝數目( backup copies )

 

    如果覺得單個備份集不放心,可以設置多個備份集的拷貝,如:

    RMAN> configure datafile backup copies for device type disk to 2;

    RMAN> configure archivelogbackup copies for device type disk to 2;

    如果指定了多個拷貝,可以在通道配置或者備份配置中指定多個拷貝地點:

    RMAN> configure channel device type disk format

    '/u01/backup/%U', '/u02/backup/%U';

    RMAN> backup datafile n format '/u01/backup/%U', '/u02/backup/%U';

    6.  設置並行備份( ARALLELISM )

    RMAN支持並行備份與恢復,也可以在配置中指定默認的並行程度。如:RMAN> configure device type disk parallelism 4;指定在以後的備份與恢復中,將採用並行度爲 4,同時開啓 4個通道進行備份與恢 復,當然也可以在 RUN的運行塊中手工分配多個通道來決定備份與恢復的並行程度。 並行的數目決定了開啓通道的個數。如果指定了通道配置,將採用指定的通道,如果沒 有指定通道,將採用默認通道配置。

    還可以在 BACKUP命令中使用指定 FILESPERSET 或者指定(datafile  1,4,5  channel c1 tag=DF1)(datafile 2,3,6 channel c2 tag=DF2)

    7.  設置控制文件自動備份  (autobackup on)

    通過如下的命令,可以設置控制文件的自動備份RMAN> configure controlfile autobackup on;對於沒有恢復目錄的備份策略來說,這個特性是特別有效的,控制文件的自動備份發生在任何 backup  或者 copy  命令之後,或者任何數據庫的結構改變之後。

    可以用如下的配置指定控制文件的備份路徑與格式RMAN> configure controlfile autobackup format for type disk to '%f';

    在備份期間,將產生一個控制文件的快照,用於控制文件的讀一致性,如下配置:

    RMAN> config

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第10部分:

ure snapshot controlfile name to

 

    '/u01/app/oracle/product/9.0.2/dbs/snapcf_U02.f';

    8.  設置備份優化選項  ( optimization )

    可以在配置中設置備份的優化,如RMAN> configure backup optimization on;如果優化設置打開,將對備份的數據文件、歸檔日誌或備份集運行一個優化算法。

    4.2.4 RMAN  會話的設置

    set 命令與configure命令很相似,但是set命令設置不是永久的。set  命令定義只應用於當前 RMAN會話的設置。

    可以用於RUN代碼之外的命令有:set echo on | off             //  顯示或關閉  RMAN顯示set DBID dbidn            //  指定一個數據庫的數據庫標識符。

    下面的set 命令只能在 RUN代碼中使用:set newname:用於TSPITR或者數據庫複製操作,指定新的數據庫文件名,將數據庫移動到新的系統中並且文件名不同的時候可以用此命令。

    set maxcorrupt for datafile:用於定義  RMAN操作失敗之前允許的數據塊訛誤的數量set archivelog destination:可以修改存儲歸檔的重做日誌  archive_log_dest_1 的目的地。

    set命令和until  子句:可以定義數據庫時間點恢復操作所使用的具體的時間點、SCN或者日誌序列號,例:

    set until time "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')";

    set backup copies:

    使用該命令可以定義爲備份集的每個備份片創建的鏡像副本數。

    例:

    RMAN> RUN{

    set maxcorrupt for datafile 3 to 10;

    set backup copies = 2;

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第12部分:

>

    backup database;

    }

 

 

 

   4.3 Copy 鏡像拷貝與恢復

    Copy鏡像拷貝命令可以創建數據庫數據文件、歸檔重做日誌或者控制文件的精確副本。 RMAN  副本與這些文件的區別僅在於名稱和(或)位置的區別。功能相當於用戶管理的備 份恢復中的熱備份。備份副本的好處是恢復比較快,恢復時可以不用拷貝,指定新位置即可。

    Copy鏡像拷貝至少要在mount 狀態下運行。

    Copy鏡像拷貝可作爲增量備份的  Level 0

    Oracle10g開始,允許使用單條命令"backup as copy"進行數據庫拷貝。

    4.3.1  備份

    生成數據文件副本:

    RMAN> copy datafile 3 to 'd:/backup/datafilecopy/users01.dbf.bak';

    RMAN> copy datafile 'd:/oracle/oradata/ora9i/users01.dbf' to

    'd:/backup/datafilecop y/users01.dbf.bak';

    生成控制文件副本:

    RMAN> copy current controlfile to … ;

    RMAN> CONFIGURE CONTROLFILE AUTOBACKUP is ON;

    備份 ARCHIVELOG  副本:

    //  只能一個一個的來備份,而不能指定一個範圍

    RMAN> copy archivelog 'd:/oracle/oradata/arc/ming_351.arc' to

    'd:/oracle/orabackup/arc/ming_351.arc';

    並行設置:

    1. RMAN> configure device type …… parallelism = 3;//only 2 channel, one for writting data to d

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第4部分:

isk

 

    2.  手工分配多個通道

    3.  在命令中指定多個文件RMAN> cop y datafile 'xx' to 'xx2', datafile 'yy' to 'yy2', ……;

    塊檢查:CHECK LOGICAL  選項MAXCORRUPT參數 V$COPY_CORRUPTION在複製操作中,Oracle 服務器進程對每個塊執行校驗和計算以檢測是否有塊損壞。 RMAN 在還原副本時也要覈對校驗和. 該過程稱爲物理損壞檢測. 可以使用NOCHECKSUM  選項取消校驗和操作,從而加快複製進程。如果數據庫已在維護塊校驗和,則此選項無效。缺省情況下,禁用邏輯損壞的錯誤檢查。

    可以使用  CHECK LOGICAL  選項測試通過了物理損壞檢查的數據和索引塊,查看 它們是否存在邏輯損壞,如行片或索引條目損壞。如果檢測到任何塊存在邏輯損壞,則 將該塊記錄到服務器進程的警報日誌和跟蹤文件中。

    可以使用  MAXCORRUPT  參數設置邏輯和物理損壞的閾值。只要在某個文件中檢 測到的邏輯和物理損壞總和低於該值,則  RMAN  命令完成,同時  Oracle 將損壞塊的 範圍植入到  V$COPY_CORRUPTION  視圖。如果超出  MAXCORRUPT,則該命令終 止,並且不植入視圖。  當並行度比較高時,佔用的計算機資源較多,但備份操作完成 速度較快。缺省情況下將啓用對物理損壞的錯誤檢查。有關在備份過程中遇到的損壞數 據文件塊的信息將記錄在控制文件和警報日誌中。

    4.3.2  恢復

    查看所有的 Copy鏡像拷貝:RMAN> list copy;數據文件副本還原:還原時可以 offline 數據文件所屬表空間,然後利用 OS拷貝命令恢復副本。

    還可以用  restore  (datafile  num)  from  datafilecop y  命令來從數據文件副本中還原數 據文件,然後再用  recover  命令來恢復。例如:RMAN> sql "alter database datafile 5 offline"; RMAN> restore (datafile 5) from datafilecop y; RMAN> recover datafile 5;RMAN> sql "alter database   datafile 5 online";注意,上面的圓括號很重要,如果沒有,restore 命令就會執行失敗。

   4.4 Backup 備份

 

    Backup  備份命令生成 Backup sets (備份集合),以 oracle 專有的格式保存,由一個完全的所有的備份片集合構成,構成一個完全備份或增量備份。

    4.4.1 BACKUP  備份命令選項

    設置標記(TAG)

    RMAN> backup database tag='test backup';

    限制備份集大小

    RMAN> backup database maxsetsize=100M;

    只備份新增部分

    RMAN> backup incremental level 0 database;

    備份控制文件    同時備份SPFILE

    RMAN> backup current controlfile;

    RMAN> configure controlfile autobackup on;    //  默認是 off

    也可以在備份數據庫或者文件的時候加上 include current controlfile 選項。例如:

    RMAN> backup database include current controlfile;

    備份時如果包含了 SYSTEM表空間,將自動備份控件文件和 SPFILE RMAN> backup file 1;

    使用自動備份進行恢復:

    RMAN> restore spfile/controlfile to '/xx/xx' from autobackup;

    備份歸檔日誌(9i)

    RMAN> backup archivelog all;

    RMAN> backup …… plus archivelog; //  在備份其他時同時備份歸檔日誌

    plus archivelog 隱含如下步驟:

    運行一個 ALTER SYSTEM ARCHIVELOG CURRENT 命令

    運行  BACKUP  ARCHIVELOG  A

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第6部分:

LL  命令。注意如果備份優化被啓用,RMAN只會備份未備份過的日誌

 

    備份 BACKUP命令中定義的文件

    運行 ALTER SYSTEM ARCHIVE LOG CURRENT 命令   

    備份所有的剩下的歸檔日誌

    備份完後刪除歸檔日誌RMAN> backup …… ARCHIVELOG all delete all input;修改備份集的保存策略例如:將備份設置爲永久有效RMAN> backup database keep forever logs|nologs;設置爲有效期  180  天RMAN> backup database keep until time='sysdate+180';重寫configure exclude / noexclude通過  configure  exclude 可以配置  RMAN  不備份上次備份以來沒有發生變化的數據文件。如果要確保 RMAN備份這些數據文件,可以在 backup命令中添加  noexclude  選項。 例如:RMAN> backup database noexclude;

    跳過脫機的、不可存取的或者只讀的數據文件

    RMAN> backup database skip offline skipinaccessible skipreadonly;

    強制備份只讀的數據文件

    RMAN> backup database force;

    備份指定週期內沒有備份的數據文件

    RMAN> backup database not backed up;

    RMAN> backup database not backed up since time='sysdate-2';

    在備份操作期間檢查邏輯訛誤

    RMAN> backup check logical database;    //在檢查邏輯錯誤的同時進行備份RMAN> backup validate check logical database;    //只檢查建立壓縮備份集RMAN> backup as compressed backupset tablespace users FORMAT='D:/BACKUP/%d_%s.dbf';

    4.4.2 RESTORE/RECOVER恢復命令選項

 

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第7部分:

    數據庫恢復

 

    RMAN> restore/revover database ;

    表空間恢復

    RMAN> restore/revover tablespace xx ;

    只讀表空間的恢復

    默認情況下,即使丟失了只讀的數據文件,RMAN  也不會在執行完全數據庫還原 操作時 候還原只讀的數據文件。要 在完全恢復期間還 原只讀的 數據文件,就必須在 RESTORE 命令中使用 CHECK READONLY 參數:RMAN> RESTORE DATABASE CHECK READONLY;

    恢復SPFILE/控制文件

    使用自動備份恢復 SPFILE/控制文件

    RMAN> startup nomount;

    RMAN> set dbid=153910023

    RMAN> restore controlfile from autobackup

    RMAN> restore spfile/controlfile to '/xx/xx' from autobackup ;

    或

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

    聯機狀態:目標數據庫 MOUNT 或 OPEN

    RMAN> restore controlfile to 'd:/temp/control01.ctl';

    歸檔重做日誌的還原

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

    也可以用  SET命令來指定歸檔日誌的還原位置,例如:

    RMAN> run

    {

    set archivelog destination to "d:/temp";

    restore archivelog all;

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第8部分:

>

    }

    數據文件副本還原

    RMAN> sql "alter datafile 5 offline";RMAN> restore (datafile 5) from datafilecop y; RMAN> recover datafile 5;RMAN> sql "alter datafile 5 online";請注意,上面的圓括號很重要

    還原檢查與恢復測試

    與備份檢查一樣,還原操作也可以檢查是否能正常  restore  或者是否該備份集是否有效。如::

    RMAN> RESTORE DATABASE VALIDATE;RMAN>VALIDATEBACKUPSET 218;RMAN> RESTORE DATABASE VALIDATE CHECK LOGICAL ;

    從指定的tag恢復:

    RMAN> RESTORE FROM tag=‘xxxx’;

    不完全恢復的還原:

    1.set until time/SCN/ 2.RMAN> restore database until scn 1000;RMAN>restore database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')"; RMAN> restore database until sequence 100 thread 1;

    塊級別的恢復

    塊恢復 Block Media Recovery (BMR),塊是恢復的最小單元,通過塊可以減少恢復 時間,而且數據文件可以在線。恢復塊的時候,必須指定具體的塊號,如:RMAN> blockrecoverdatafile 6 block 3;具體請見  4.7.4  塊媒體恢復  Block Media Recovery (BMR)

 

 

 

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

    恢復目錄:    打開目標數據庫:例程啓動,數據庫加載,mount  不能 open因爲目標數據庫不在歸檔模式下,所以當進行備份/恢復操作的時候數據庫無法打開。目標數據庫只能在  MOUNT 狀態不能 Open,所以屬於脫機備份。

    非歸檔模

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第9部分:

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

 

    4.4.3.1  全庫備份

    例:  使用默認的設置脫機全備份的語句

    RMAN> shutdown immediate;RMAN> startup mount;RMAN> backup database;RMAN> 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 dev1;8> }

    注:數據庫完全備份將自動備份控制文件。(或者備份時加 include current controlfile)

  

 

    要用  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 database;RMAN> recover d

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第12部分:

atabase;RMAN> 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;

    }

    恢復:如果我們只丟失了特定的表空間的數據文件,那麼我們可以選擇只恢復這個表空間,而 不是恢復整個數據庫。表空間恢復可以在不關閉數據庫的情況下進行,只需要將需要恢復的 表空間 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  數據文件的備份與恢復

    備份命令:

 &n

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第14部分:

bsp;  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 {

  &

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第5部分:

nbsp; 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:

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

    $ rman target / catalog "rman/rman@db

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第6部分:

" 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 VARCHAR2(256);

    DONE BOOLEAN;

    BEGIN

    DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);

    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.devicedeallocate(NULL);END;

    恢復控制文件:

    RMAN> startup nomount; RMAN> set dbid=153910023

    RMAN> restore controlfile from autobackup

    或

    RMAN> restore controlfile from'/arch/ct_c-2347671489-2006

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第7部分:

0630-00';

 

    聯機狀態:目標數據庫 MOUNT 或 OPEN

    RMAN> restore controlfile to 'd:/temp/control01.ctl';

    然後再執行恢復數據庫的其他步驟:RMAN> restore database; RMAN> recover database;RMAN> alter database open resetlogs;

    使用  dbms_backup_restore 包恢復控制文件:

    SQL>

    DECLARE DEVTYPE VARCHAR2(256);

    DONE BOOLEAN;

    BEGIN

    DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);

    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.devicedeallocate(NULL);END;/

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

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

    主要用於改變備份集的位置,或者創建多個鏡像備份,比如將備份集從硬盤備份到磁帶。

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

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

    不完全恢復會影響整個數據庫,需要在 MOUNT 狀態下進行。在不完全恢復完成之後, 通常需要使用  resetlo

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第8部分:

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

 

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

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

    startup mount;

    restore database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')"; recover database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')"; 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;

  &

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第9部分:

nbsp; 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 13:00:00','yyyy/mm/dd hh24:mi:ss')";

    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;

  

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第10部分:

;  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  恢復目錄相關視圖

    恢復目錄本身有一組視圖,用於存放目標數據庫與備份信息,可以用 RMAN用戶登錄數 據庫進行查看,例:RC_DATABASE

    RC_DATAFILE RC_STORED_SCRIPT RC_STORED_SCRIPT_LINE RC_TABLESPACE 4.5.2 RMAN  動態性能視圖

    以下是目標數據庫上與  RMAN  備份有關係的一些動態性能視圖,可以用 SYS用戶進行 查詢。

    V$ARCHIVED_LOG V$BACKUP_CORRUPTION V$COPY_CORRUPTION V$BACKUP_DEVICE V$CONTROLFILE_RECORD_SECTION V$BACKUP_DATAFILE      用於通過確 定各數 據文件中 的塊數來創建大小 相同的備份集。通過它也可以找出數據文件中已損壞的塊數。 V$BACKUP_REDOLOG    顯示在備份集中存儲的歸檔日誌。 V$BACKUP_SET    顯示已經創建的備份集。 V$BACKUP_PIECE      顯示爲備份集創建的備份片。

    這裏還有一個視圖,可以大致的監控到  RMAN  備份進行的程度。如通過如下的  SQL腳本,將獲得備份的進度。

    SQL> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,

    2 ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"

    3 FROM V$SESSION_LONGOPS

    4 WHERE OPNAME LIKE 'RMAN%'

    5 AND OPN

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第11部分:

AME NOT LIKE '%aggregate%'

 

    6 AND TOTALWORK != 0

    7 AND SOFAR <> TOTALWORK;

    要在備份過程中將某一進程與一個通道關聯起來,請:

    1.啓動恢復管理器並連接到目標數據庫和恢復目錄(與後者的連接是可選的)。

    rmantarget / catalog rman/rman@rcat

    2.在分配通道後,設置 COMMAND ID 參數,然後複製所需的對象。

    run {

    allocate channel t1 type disk;

    set command id to 'rman';

    copydatafile 1 to '/u01/backup/df1.cpy';

    release channel t1;}

    3.查詢 V$SESSION_LONGOPS 視圖以獲得複製的狀態。

    SELECT sid, serial#, context, sofar, totalwork

    round(sofar/totalwork*100,2) "% Complete",

    FROM v$session_longops

    WHERE opname LIKE 'RMAN:%'

    AND opname NOT LIKE 'RMAN: aggregate%';

    4.使用 SQL*Plus 並查詢 V$PROCESS 和 V$SESSION 以獲得 SID 和 SPID.然 後,       使用操作系統實用程序來監視進程或線程。

    SELECT sid, spid, client_info FROM v$process p, v$session s WHERE p.addr = s.paddr

    AND client_info LIKE '%id=rman%';

    4.5.3 List

    List  命令是一種在數據庫控制文件 或者恢復目錄中查詢備份的歷史信息的方

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第12部分:

法。 List提供了一組信息,可以提供各種備份的信息,如對應物、備份集、歸檔日誌備份、控 制文件備份等等。

 

    列出對應物:RMAN> list incarnation;

    列出備份概要信息:RMAN> list backup summary;

    按備份類型列出備份:RMAN> list backup by file;

    獲得備份的詳細信息,包括備份片的物理文件名:RMAN> list backup; RMAN> list backupset bs#;

    或者按照TAG  來查:RMAN> list backup tag=tab_number;

    列出過期的備份:RMAN> list expired backup;

    按照表空間和數據文件來列出備份:列出USERS 表空間的備份:RMAN> list backup of tablespace USERS;

    列出文件5的備份:RMAN> list backup of datafile 5;

    列出文件  E:/ORACLE/USERS.DB  的備份:RMAN> list backup of datafile ' E:/ORAC LE/USERS.DB ';

    列出控制文件的備份:RMAN> list backup of controlfile;

    列出歸檔日誌的備份:RMAN> list archivelog all;RMAN> list backup of archivelog all;

    列出副本:

    RMAN> list copy                                  列出所有的副本。

    RMAN> list copy of controlfile       列出控制文件副本

    RMAN> list copy of archivelog all   列出所有歸檔日誌副本

    RMAN> list copy of

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第14部分:

database           列出數據庫所有數據文件的副本

 

    4.5.4 Report

    Report  命令被用於判斷數據庫的當前可恢復狀態和提供數據庫備份的特定信息,可 以檢測哪些文件需要備份,哪些備份能被刪除以及那些文件能不能獲得的信息。可以報 告數據庫的所有能備份數據文件對象,包括數據文件名、文件號、表空間、文件大小、 是否含有回滾段等。

    RMAN> report schema或者RMAN> REPORT SCHEMA AT TIME 'SYSDATE-14'; RMAN> REPORT SCHEMA AT SCN 1000;RMAN> REPORT SCHEMA AT SEQUENCE 100 THREAD 1;

    報告需要備份的數據文件RMAN> report need backup [ redundancy | days | incremental n];報告過期了的數據文件或者不可用的備份與拷貝RMAN> Report obsolete [orphan]報告最近沒有備份的數據文件RMAN> report need backup days=10;        //  恢復需要超過 10天的歸檔日誌RMAN> report need backup incremental=3; //  恢復時需要超過 3  增量的文件報表文件  增量 名稱8 15 E:/ORACLE/ORADATA/MING_RECOVER/MINGDICT.DB 9 15 E:/ORACLE/ORADATA/MING_RECOVER/MINGLOB.DB

    這個報告中,列出的數據文件,在進行恢復的時候,需要從 3  個以上的增量備份文件中恢復。我們知道如果需要從很多文件中恢復,會影響恢復速度,可以根據情況來重新備份這些文件。

    報告備份冗餘或恢復窗口我們可以執行 report need backup redundancy  來確定爲滿足冗餘備份策略而需要備份的 文件。例如:RMAN> report need backup redundancy=2;    //  文件冗餘備份少於 2  個我們也可以按照恢復窗口來查找需要備份的文件。比如我們要求恢復窗口小於 2  天,那 麼用下面的命令:RMAN> report need backup recovery window of 2 days;    //文件報表的恢復需要超過 2天的歸檔日誌

    這個命令等同於:report need backup days=2;

   4.6 RMA

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第4部分:

N 的管理與維護

 

    如果數據庫做了  alter database open resetlogs;  就需 reset database,如果有庫結構變化,就需 要  resync catalog

    4.6.1  加入目錄數據庫

    如果存在以前創建的備份數據想註冊到目標數據庫,可以採用如下手工方式加入到恢復目錄中,

    RMAN> CATALOGdatafilecopy '/oracle/ …… /system01.dbf';RMAN> CATALOG controlfilecopy    '/oracle/CONTROL01.CTL.BCK';

    RMAN> CATALOG archivelog    '/oracle/arc001.log';

    10g新特性:1.可以手工加入手工加入備份片,所以,只要你的備份還在,歸檔還在,即使 catalog database 崩潰,控制文件重建,照樣可以用這些備份來做恢復。

    RMAN> CATALOG backupiece '/oracle/xxxx';2.掃描整個目錄,如果備份片或者歸檔日誌文件太多,可以放到一個目錄中,一次性掃描就行。

    RMAN> CATALOG START WITH '/xxx/arch_logs';

    4.6.2  恢復目錄的建立、升級與刪除

    恢復目錄的建立請見:4.2.1  建立 Recovery Catalog 恢復目錄 當恢復目錄管理的某個數據庫進行了升級,只要版本不高於恢復目錄就沒有問題,下面的命令查詢恢復目錄的版本  (RMAN用戶):SQL> select version from rcver;如果要高於恢復目錄,那麼恢復目錄就必須進行升級。用下面的命令即可:RMAN> upgrade catalog;恢復目錄可以採用如下命令刪除RMAN> DROP CATALOG;

    4.6.3  同步或重置  CROSSCHECK命令(交叉校驗)

    如果目標數據庫物理對象發生了變化,如添加了一個數據文件,需要用如下命令同步:RMAN> resync catalog;如果目標數據庫 reset 了數據庫,需要用如下命令同步RMAN> resetdatabase;

    (必須使用 catalog數據庫)

    打開數據庫

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第5部分:

的時候,每次使用  resetlogs  參數都會創建數據庫的一個新對應物。如 果這個操作是在  rman  中完成的,rman  會自動更新恢復目錄。如果是在  rman  之外完 成,如  sql*plus,那麼就必須手工重置對應物。如:RMAN> reset database;另外有的時候,我們需要改成之前的某個對應物,可以用 list incarnation  來顯示出對應物列表之後用下面的命令:RMAN> reset database to incarnation incarnation_num;

 

    當手工刪除了數據庫的歸檔文件後,要執行以下腳本同步 RMAN> allocate channel for maintenance type disk; RMAN> change archivelog all crosscheck;RMAN> release channel;當手工刪除了數據庫的 RMAN備份後,要執行以下腳本來同步RMAN> allocate channel for maintenance type disk; RMAN> crosscheck backup;RMAN> delete expire backup; RMAN> release channel;

    關於CROSSCHECK 交叉校驗命令

    該命令用於覈對磁盤和磁帶上的備份文件,以確保RMAN資料庫與備份文件保持同步。該命令只會檢查RMAN資料庫所記載的備份文件。當執行 CROSSCHECK命令時,如果資料庫記錄不匹配於備份文件的物理狀態,那麼該命令會更新資料庫記錄的狀態信息。 當使用CROSSCHECK  命令 覈對備份文件之後,備份文件的狀態會包括 AVALIABLE、UNAVALIABLE和 EXPIRED 三種, 如果備份文件處於EXPIRED 狀態, 則說明物理文件已經被手工刪除或者損壞。注意,如果備份文件處於 EXPIRED 狀態, 應該使用DELETE命令刪除該備份文件。

    覈對所有備份集 RMAN>CROSSCHECK BACKUP;

    覈對所有數據文件的備份集 RMAN> CROSSCHECK BACKUP OF DATABASE;

    覈對特定表空間的備份集 RMAN>CROSSCHECK BACKUP OF TABLESPACE SYSTEM;

    覈對特定數據文件的備份集 RMAN>CROSSCHECK BACKUP OF DATAFILE 4;

    覈對控制文件的備份集 RMAN>CROSSCHECK BACKUP OF CONTROLFILE;

    覈對SPFILE 的備份集 RMAN> CROSSCHECK BACKUP OF SPFILE;

  &n

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第6部分:

bsp; 覈對歸檔日誌的備份集 RMAN> CROSSCHECK BACKUP OF ARCHIVELOG SEQUENCE 3;

 

    覈對所有映像副本 RMAN> CROSSCHECK COPY;

    覈對所有數據文件的映像副本 RMAN> CROSSCHECK COPY OF DATABASE;

    覈對特定表空間的映像副本 RMAN> CROSSCHECK COPY OF TABLESPACE USERS;

    覈對特定數據文件的映像副本 RMAN> CROSSCHECK COPY OF DATAFILE 4;

    覈對控制文件的映像副本 RMAN> CROSSCHECK COPY OF CONTROLFILE;

    覈對歸檔日誌的映像副本 RMAN> CROSSCHECK COPY OF ARCHIVELOG SEQUENCE 4;

    4.6.4  修改備份的可用狀態、保存策略  Change命令

    Change  命令可以修改備份的狀態是可用(available)還是不可用(unavailable)。對 於不可用的備份,還原與恢復期間不會被考慮到,不過執行 delete  expired 命令期間也不 會刪除這些記錄。

    例如:

    RMAN> change backup of database tag='GOLD' unavailable;

    RMAN> change copy of database like '%GOLD%' available;

    RMAN> change archivelog 'd:/arc/arch_001.arc' unavailable;

    RMAN> change backupset 4981 available;RMAN> change backup of database available;RMAN> change archivelog all available;

    RMAN> change archivelog all backed up 5 times unavailable;

    當一個給定的備份或者副本根據備份的保存策略的標準而被廢棄的時候,RMAN 並不會自動刪除這個備份或者副本,而只是標記這個備份爲廢棄。我們可以用  report obsolete  命令來查看標記爲廢棄的備份。可以使用  change  命令來將一個備份修改爲永 久

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第7部分:

保留的備份,也可以修改爲要保存多少天的備份。還可以使用  change … nokeep 來手 工丟棄一個備份。

 

    舉例:將 4421備份集標記爲廢棄RMAN> change backupset 4421 nokeep;將 4421備份集標記爲 7  天內有效RMAN> change backupset 4421 keep until time 'sysdate+7' logs;將 4421備份集標記爲永久有效RMAN> change backupset 4421 keep forever logs;廢棄的備份集並不真正的刪除,如果需要物理刪除,則可以用下面的命令:RMAN> delete obsolete;

    4.6.5  查看與刪除過時的備份信息

    列出已經過時的備份:RMAN> report obsolete;

    定義 delete 通道:RMAN> allocate channel for delete/maintenance t ype disk;刪除過時的備份信息RMAN> allocate channel for maintenance type disk; RMAN> change backupset id delete;RMAN> release channel;當手工刪除了數據庫的 RMAN備份文件後,要執行以下腳本進行同步:RMAN> allocate channel for maintenance type disk; RMAN> crosscheck backup;RMAN> delete expired backup;     ——  刪除過期的備份RMAN> delete obsolete;                   ——  刪除廢棄的備份RMAN> release channel;在  8i  和  8i  之前的版本只能用 change…delete命令來刪除物理備份。

    RMAN> change archivelog until logseq=500 delete;

    4.6.6  恢復目錄記錄的刪除

    如果不加以維護,具有  DELETE  狀態的舊備份會一直駐留在恢復目錄中。爲了解決 這個問題,Oracle  提供了?/rdbms/admin/prgrmanc.sql,這個腳本可以刪除恢復目錄中具有 DELETE  狀態的記錄。如果想刪除舊的對應物,那麼我們

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第8部分:

可以刪除  dbinc 表的記錄。例 如,如果要刪除對應物是 2  的記錄,則可以執行下面的語句:SQL> delete from dbinc where dbinc_key=2;

 

    4.6.7  備份RMAN數據庫

    RMAN  自己的數據庫也需要備份,但是本身很小,而且不是經常發生變化,所以在每次 RMAN備份完成後,可以對 RMAN數據庫備份。

    $ EXP RMAN/RMAN  OWNER=RMAN  FILE=RMAN.DMP ROWS=Y GRANTS=Y COMPRESS=Y CONSISTENT=Y 4.6.8  備份檢查    驗證備份的可恢復性

    我們可以通過  Validate  命令來檢查是否能備份,如數據文件是否存在,是否存在壞 塊不能被備份,通過使用  RESTORE DATABASE VALIDATE;  和  RESTORE DATABASE VALIDATE CHECK LOGICAL;  可以檢查最新的備份是否可恢復。這些命令並不真正的執 行恢復,而是檢查備份中是否有訛誤。如果使用  CHECK  LOGICAL  選項,還將檢查數 據和索引段中是否存在邏輯訛誤。

    RMAN> RESTORE DATABASE VALIDATE;

    RMAN> RESTORE DATABASE VALIDATE CHECK LOGICAL ;

    RMAN> VALIDATE BACKUPSET 218;

    RMAN> VALIDATE BACKUPSET bs CHECK LOGICAL ;

    RMAN> BACKUP VALIDATE DATABASE ARCHIVELOG ALL;

    對於數據庫與數據文件,可以從指定的  tag  恢復:RMAN> RESTORE DATAFILE 1 FROM TAG=‘tag name’ ;

    4.6.9  登記目標數據庫:

    一個恢復目錄可以註冊多個目標數據庫,註冊目標數據庫的命令爲:$ RMAN catalog rman/rman target user/pwd @db; RMAN> register database

    4.6.10  註銷數據庫

    註銷數據庫不

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第9部分:

是簡單的在 RMAN提示下反註冊就可以了,需要運行一個程序包,過程如下:

 

    1.  連接目標數據庫,獲得目標數據庫 ID $ RMAN target internal/password catalog rman/rman@rcdb;

    2.  以 RMAN用戶登錄,查詢恢復目錄,得到更詳細的信息SQL> SELECT db_key, db_id FROM db WHERE db_id = 1231209694; DB_KEY         DB_ID

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

    1                        1237603294 1 row selected.

    3.  運行過程 dbms_rcvcat.unregisterdatabase 註銷數據庫,如

    SQL> EXECUTE dbms_rcvcat.unregisterdatabase(1 , 1237603294)

    4.6.11  重新啓動備份

    對於異常結束了的備份,很多人可能不想再重新開始備份了吧,特別是備份到  90% 以上,因爲異常原因終止了該備份,那怎麼辦呢?RMAN提供一個重新開始備份的方法, 通過簡單的命令,你就可以只備份那不到 1%的數據了。

    RMAN> backup not backed up since time 'sysdate-14' database plus archivelog;

    4.6.12  腳本及自動運行

    腳本的自動/定時運行可以通過  Windows  計劃任務,UNIX/Linux的 Crontab/at命令,或者第三方軟件實現,詳細介紹有待補充。

    (未完成)

    1、 編寫  rman批處理文件2、 編寫 Shell腳本set ORACLE_SID =xxxx  或  export $ORACLE_SID rman target / msglog    /xxx.log cmdfile=/xxx/backup.rman

    3

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第10部分:

、 設定執行計劃

 

 

 

 

   4.7 高級主題

    4.7.1  使用RMAN備份集恢復DB到其他機器  (1常規方法)

    用途:利用生產 DB的備份集建立測試環境或備用數據庫(  設置成相同的 DBID,不需要連接原始 DB,只需要利用 Catalog)

    步驟:

    1.準備工作,配置目標DB環境

    在目標 DB上設置 ORACLE相關的環境變量:記下生產 DB的 ORACLE_SID,DBID $set ORACLE_SID=ming?      在目標 DB創建與生產 DB相同的目錄,將生產 DB的  pfile 文件 FTP到目標DB,或者,在第二步中可以從備份集中進行恢復得到 PFILE.?      在目標  DB  上創建生產  DB  的  RMAN  備份集存放的目錄,沒有使用  catalog情況時這點必然保持一樣?      移植備份集(確定包含控制文件,數據文件,歸檔文件)到目標  DB?      配置網絡連接

    2.目標DB在nomount狀態下恢復pfile 和controlfile

    連接恢復目錄和目標數據庫:$ RMAN target / catalog rman/rman@rcdb RMAN > set DBID= 3324789823 RMAN > startup nomount RMAN> restore spfile to pfile ‘/home/oracle/pfile’ [from ‘backupset name’]; RMAN> restore controlfile [to    'xx '] from '/xx/ ORADB_ctl_20070111_c-xx';(控制文件的恢復可以參考 4.4.4.6  中其他方法)

    3.啓動目標DB  到  mount,在目標DB上Restore 和Recover

    RMAN> alter database mount; ——可能會提示找不到密碼文件,不用理會 如果備份集的位置改變了,需要先進行交叉校驗:RMAN> catalog start with '/newdir'; RMAN> cr

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第11部分:

osscheck backup; RMAN> report schema;然後 restore / recover  :RMAN> run { allocate channel ch_disk_db_1 device type disk;restore database;recover database until sequence=2412 thread=1;——最後一個 arachivelog的 sequence release channel ch_disk_db_1;

 

    }

    4.Resetlogs  打開目標  DB

    聯機日誌文件並沒有恢復,所以需要  resetlogs SQL> alter database open resetlogs;

    5.重建臨時表空間,重建密碼文件,立即備份數據庫

    重建臨時表空間:因爲備份時不備份臨時文件,v$tempfile 中查詢爲空,所以可以增加一個文件即可:SQL>  alter  tablespace  temp  add  tempfile  '/u05/oracle/oradata/crm/temp01.dbf'  size 10M;重建密碼文件可以通過 orapwd命令重建密碼文件

    備註:恢復時有時遇到的一個問題RMAN-03002    ORA-27064 錯誤解決辦法:  把數據文件 resize 到 oracle 的 block size 的整數倍SQL> alter database datafile 'xxx' resize n MB;

    4.7.2  使用RMAN備份集恢復DB到其他機器  (2複製方法)

    使用  RMAN  DUPLICATE  命令可 以在保 留目 標數 據庫 的基礎上 依靠目標 數 據庫(Target  Database)的備份創建一個副本數據庫(Duplicate  Database)  .該副本即可與目標數 據庫完全相同,也可僅包含目標數據庫表空間的一部子集。目標站點(Target  Site)以及副 本站點(Duplicate Site)甚至可以在同一臺機器上。

    (  生成新的唯一的 DBID,如果控制文件中仍保存有備份信息,可以不連接 Catalog  )

    步驟:

    1.準備工作,配置副本DB環境

    1.  備份主數據庫(包括數據文件、控制文件以及所有歸檔),並把該備份集拷貝

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第12部分:

到副本 數據庫機器同樣的目錄下。

 

    2.  拷貝主數據庫的初始化參數文件 pfile 到副本數據庫機器上,並根據需要作相應修改,創建密碼文件。

    3.  配置主數據庫到副本數據庫的連接。

    2.啓動副本數據庫到  nomount下,目錄數據庫必須MOUNT (或OPEN)

    $ sqlplus /nolog SQL> conn / as sysdba SQL> startup nomount

    3.運行RMAN,分別連接主數據庫與副本數據庫實例

    控制文件中保存有備份信息,可以不連接 Catalog

    在副本數據庫上:$ rman target sys/change_on_install@MING auxiliary /

    4.運行復制命令

    如果沒有配置自動分配通道的話,需要手工指定至少  1  條輔助通道。

    DUPLICATE命令將自動完成:將還原所有數據文件,重新創建控制文件,並利 用新的參數文件啓動恢復數據庫到一致狀態,最後用  resetlog  方式打開數據庫,並 重建  redolog

    RMAN> RUN { ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;duplicate target database tocrmnofilenamecheck; RELEASE CHANNEL aux1;}

    5.重建臨時表空間,立即備份數據庫

    SQL>  alter  tablespace  temp  add  tempfile  '/u05/oracle/oradata/crm/temp01.dbf'  size 10M;

    附:Duplicate 複製命令的一些高級用法:

    1.NOFILENAMECHECK異機恢復需要指定  NOFILENAMECHECK,可以跳過文件名檢測,避免  oracle  錯 誤的領會你的操作意圖。

    2.指定PFILE如果輔助實例不是用 SPFILE啓動,需要指定  PFILE  參數,PFILE文件必須放在運行  RMAN  的客戶端上。

    3.跳過不需要複製的表空間要跳過只讀表空間,

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第14部分:

在執行 duplicate 命令時指定  SKIP READONLY 子句即可。

 

    要跳過離線表空間,在執行 duplicate 命令之前將其置爲  OFFLINE NORMAL 狀態即可,RMAN  複製時會跳過只讀或離線表空間的數據文件。

    要跳過正常的表空間,指定 SKIP TABLESPACE ts_name, …

    4.恢復到以前的時間點要恢復到以前的時間點,在 duplicate 命令中指定  UNTIL TIME 'SYSDATE-1' 5.創建過程中重命名控制文件可以使用 restore controlfile from …;或者 dbms_backup_restore 包恢復出控件文件,然後在初始化參數文件 PFILE 中進行正確的設置。

    6.創建過程中重命名在線日誌文件1.執行  duplicate 命名時指定 LOGFILE子句,手工設置 redo logs 文件名。 例:LOGFILE GROUP 1 ('?/oradata/newdb/redo01_1.log',

    '?/oradata/newdb/redo01_2. log') SIZE 200K,)

    2.副本數據庫初始化參數文件 PFILE中設置 LOG_FILE_NAME_CONVERT LOG_FILE_NAME_CONVERT = 'string1' , 'string2' , 'string3' , 'string4' , ……;將  strin1 替換爲 string2,string3 替換爲 string4 7.創建過程中重命名數據文件,或改變數據庫文件的新的路徑1.在初始化參數中重命名:DB_FILE_NAME_CONVERT=‘xxxx’,‘yyyy’2.在 Duplicate Duplicate Duplicate 命令中重命名數據文件: duplicate target database to newdb DB_FILE_NAME_CONVERT=('xxxx', 'yyyyy ');3.使用 SET NEWNAME  命令重命名數據文件SET NEWNAME FOR DATAFILE 1 TO '/xxx/xxx.dbf';4.使用  CONFIGURE AUXNAME  命令重命名數據文件CONFIGURE AUXNAME FOR DATAFILE 1 TO '/xxxx/xxx.dbf';5.重命名臨時文件路徑SET NEWNAME FOR TEMPFILE '/xxx/xxx.dbf' TO '/yyy/xxx.dbf';

    例:一個比較複雜的複製命令如下:

    RMAN> RUN {

    allocate auxiliary channel newdb1 device type

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第4部分:

sbt;

 

    duplicate target database to newdb

    DB_FILE_NAME_CONVERT=('/h1/oracle/dbs/trgt/','/h2/oracle/oradata/newdb/')

    UNTIL TIME 'SYSDATE-1'       # specifies incomplete recovery

    SKIP TABLESPACE cmwlite, drsys, example        # skip desired tablespaces

    PFILE = ?/dbs/initNEWDB.ora

    LOGFILE

    GROUP 1 ('?/oradata/newdb/redo01_1.log',

    '?/oradata/newdb/redo01_2. log') SIZE 200K,

    GROUP 2 ('?/oradata/newdb/redo02_1. log'',

    '?/oradata/newdb/redo02_2. log'') SIZE 200K

    GROUP 3 ('?/oradata/newdb/redo03_1. log'',

    '?/oradata/newdb/redo03_2. log'') SIZE 200K REUSE;

    }

    4.7.3  表空間時間點恢復(TSPITR)

    用戶可能錯誤的刪除了幾個表,而且還截斷了幾個表,如果進行整庫恢復可能代價比較

    高,這時,我們可以執行表空間時間點恢復(tablespace point-in-time recovery,  TSPITR)。

    爲了掌握如何執行 TSPITR,應該理解下面這些術語:輔助實例(auxiliary  instance):  這是我們創建的臨時實例,RMAN  使用這個實例執行TSPITR.完成 TSPITR  後,這個實例可以刪除。

    輔助集(auxiliary  set):  輔助實例上的文件集。包括控制文件、回滾段或者重做段的表 空間、系統表空間、聯機日誌文件等,還可以選擇輔助實例的臨時表空間。

&n

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第5部分:

bsp;   恢復集(recovery set):    要執行 TSPITR  的表空間/數據文件集目標數據庫:    實際執行 TSPITR  的數據庫

 

    TSPITR  的本質是,RMAN  將要進行時間點恢復的表空間按照設定的條件恢復到輔助 實例上,然後再從輔助實例將表空間傳到目標數據庫,從而避免整個數據庫的恢復,減少恢 復時間,而且這期間其他表空間仍然可用。(  用戶管理的備份與恢復也可以使用 TSPITR)

    檢查TSPITR之後丟失的對象,被丟失對象信息的獲取:SQL> Select owner, name From TS_PITR_OBJECTS_TO_BE_DROPPED Where tablespace_name = 'USER01' And creation_time > to_date( '2004-09-27 11:25:21', 'yyyy-mm-dd hh24:mi:ss' );進行TSPITR  的基本步驟是(與有些書上的步驟略有不同):(0)  檢查需要恢復的表空間的數據文件備份和控制文件備份是否存在(1)  驗證表空間的可傳輸性(2)  準備輔助實例(3)  執行實際的 TSPITR(4)  在目標數據庫上執行 TSPITR  後的操作。

    1.驗證表空間的可傳輸性

    RMAN  使用 Oracle  可傳送的表空間特性來執行 TSPITR,因此表空間本身必須是可傳送的。許多因素都導致表空間不可傳送。

    TSPITR  限制不能還原包含  SYS  用戶對象不能執行 TSPITR  恢復具有複製主表的表空間 不支持使用快照日誌的表空間 不能還原含有回滾段的表空間不能還原含有分區對象(該對象的分區跨越多個表空間)的表空間 表空間中不能含有 VARRAY、嵌套表、外部表對象TSPITR  不能用於恢復刪除的表空間。

    可以通過  TS_PITR_CHECK  視圖來判斷表空間是否可傳送。如果表空間不可傳送,那 麼執行  TSPITR    時就會失敗。下面是查詢 USERS  表空間是否可傳送的語句:SQL> SELECT OBJ1_NAME "Object Owner",obj1_name "Object Name", obj1_type "Object Type",ts1_name "Tablespace Name",reason FROM TS_PITR_CHECK   WHERE ts1_name='USERS';如果未選定行,說明 USERS  表空間可傳輸。

    2.準備TSPITR&nb

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第6部分:

sp; 的輔助實例  (AUXILIARY INSTANCE)

 

    啓動 TSPITR 之前,需要準備輔助實例。這是一個不需要  RMAN  參與的手工過程。執行下面的步驟來創建輔助實例:u    創建口令文件u    創建輔助實例的參數文件: 編輯輔助實例參數文件的一個簡單方法是把目標數據庫的參數文件改一下即 可。如果目標數據庫用的是 SPFILE,那麼在  SQLPLUS  中執行 CREATE PFILE FROM SPFILE  就可以生成參數文件。

    注意:control_files  設置爲輔助實例上的文件名db_name = 目標實例lock_name_space 如果輔助實例與目標數據庫同一主機,必須設置 instance_name service_names    取一新名,如 AUX db_file_name_convert    數據文件名的轉換log_file_name_convert    日誌文件名的轉換註釋掉 log_archive_start  參數u    如果在 Windows NT  上運行 Oracle,需要使用 oradim  來添加數據庫服務u    啓動輔助實例,如有必要,配置 tnsnames.ora,測試是否連通。

    3.執行實際的TSPITR

    例子: 恢復用戶誤刪除的某個重要的表。將實例 MING  的 USERS  表空間恢復到 SCN是 3818161  的時候。

    啓動輔助實例:C:/>SET ORACLE_SID=AUX1 C:/>SQLPLUS /NOLOG SQL> CONNECT / AS SYSDBA SQL> STARTUP NOMOUNT;請注意,SET ORACLE_SID=AUX1  很重要,這樣就可以不用配置 TNSNAMES.ORA執行實際的TSPITR 首先要連到目標數據庫和輔助實例。可以聯到恢復目錄,也可以不連到恢復目錄: C:/> SET ORACLE_SID=AUX1 C:/> RMAN TARGET /@MING CATALOG RMAN/RMAN@RECO AUXILIARY / RMAN> RECOVER TAB LESPACE USERS UNTIL SCN 233646;…

    等待完成表空間的恢復。當然也可以用 UNTIL TIME  或者 UNTIL SEQUENCE 子 句,例:RMAN> run { allocate auxiliary channel c1 device type disk;recover tablespace user02 until logseq

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第7部分:

9;}

 

    (  這裏有些版本有一個 ORACLE的 BUG,執行到最後可能會報錯,需要打補丁  ?? )

    可以改變輔助集/恢復集數據文件的位置和名稱:set newname for datafile 5 to 'c:/demo/user01.dbf';configure auxname for datafile 1 to '/backup/xxx.dbf‘;在初始化參數文件中用 DB_FILE_NAME_CONVERT 進行轉換

    10g  中增加了auxiliary destination    ,更方便RMAN> recover tablespace user01 until logseq 19 auxiliary destination 'd:/auxiliary';

    4.執行TSPITR  後的操作首先應該重新連接 RMAN與目標數據庫,並且備份剛恢復的表空間。完成備份後, 需要將表空間聯機(RMAN  在  TSPITR  後使表空間脫機)。最後,我們還要關閉或刪除輔 助數據庫。

    4.7.4  塊媒體恢復  Block Media Recovery (BMR)

    產生塊損壞的原因一般是間斷或隨機的  I/O  錯誤或者是內存的塊錯誤。要恢復的壞塊 信息可以從報警與跟蹤文件,表與索引的分析,DBV  工具或第三方媒體管理工具以及具體 的查詢語句中獲得。

    1. DBV 工具    dbv file=EYGLE.DBF blocksize=8192 2. RMAN> backup validatedatafile 4;    ——  或者 BACKUP VALIDATE DATABASE備份的 壞 塊 信息 保存 在  V$BACKUP_CORRUPTION 、 V$COPY_CORRUPTION  和V$DATABASE_BLOCK_CORRUPTION 視圖中。

    V$BACKUP_CORRUPTION                           顯示歷史訛誤的視圖 V$DATABASE_BLOCK_CORRUPTION    顯示當前數據塊訛誤的視圖。 一旦修正了數據庫的塊訛誤,就需要重新運行  BACKUP VALIDATE DATABASE  命令,然後確認 V$DATABASE_BLO

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第8部分:

CK_CORRUPTION 中沒有其他訛誤。

 

    RMAN  可以備份包含損壞數據塊的數據文件,通過設置  set maxcorrupt  可以跳過指定個數的壞塊來避免備份失敗。

    RMAN> set maxcorrupt for datafile 1 to 0;在 Oracle9i中可以用  RMAN來執行塊級的恢復,而且恢復期間數據文件可以是聯機狀 態。RMAN通過  Block Media Recovery(簡稱 BMR)來執行塊級恢復操作。假設我們在查 詢一個  Oracle  表的時候接收到下面的錯誤:ERROR  位於第  1    行:ORA-01578: ORACLE  數據塊損壞(文件號  5,塊號  97)

    ORA-01110:    數據文件  5:    'E:/xxxx.dbf'那麼我們就可以在  RMAN中用  BLOCKRECOVER 命令來修復:RMAN> BLOCKRECOVER DATAFILE 5 BLOCK97; 啓動  blockrecover  於  03-9月  -06 正在啓動全部恢復目錄的  resync完成全部  resync使用通道  ORA_DISK_1通道  ORA_DISK_1:    正在從數據文件副本 E:/xxxx.bak 恢復塊

    正在開始介質的恢復完成介質的恢復完成  blockrecover  於  03-9月  -06

    恢復V$DATABASE_BLOCK_CORRUPTION 視圖中列出的壞塊:RMAN> blockrecover corruption list [ restore until time 'sysdate - 10' ];恢復指定壞塊:RMAN> blockrecover datafile 2 block 12,13 datafile 9 block 19;RMAN> blockrecover tablespace system dba 44404,44405 from tag "weekly_backup"; RMAN> blockrecover tablespace system dba 44404,44405 restore until time 'sysdate-2';

    4.7.5  使用恢復目錄恢復前一個對應物

    在不完全恢復完成之後,通常需要使用  resetlogs  選項來打開數據庫。resetlogs  表示 一個數據庫邏輯生存期的結束和另一個數據庫邏輯生存期的開始。

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第9部分:

數據庫的邏輯生存期 也被稱爲一個對應物(incarnation)。每次使用  resetlogs  選項來打開數據庫後都會創建一個 新的數據庫對應物。

 

    使用 RMAN可以進行穿越  resetlogs 的恢復,即可以恢復到前一個對應物。10g 版本 增強了這方面的功能。

    (1)  使用恢復目錄的情況使用恢復目錄的情況下,恢復前一個對應物是非常簡單的。 首先,用list    incarnation;來顯示有哪些對應物:RMAN> list incarnation;

數據庫    Incarnations  列表 DB    關鍵字    Inc                關鍵字                               DB        名    DB ID CUR          重置 SCN    重置時間

1 2 MING 2600315304 NO 1 20-4  月 -06

 

1 854 MING 2600315304

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第10部分:

NO 3407561 19-8  月 -06 1 4368 MING 2600315304 NO 3794049 29-8  月 -06 1 4437 MING 2600315304 NO 3794728 29-8  月 -06 1 4639 MING 2600315304 YES 3794935 29-8  月 -06

 

    接下來,決定恢復到哪個對應物比如,決定恢復到上面的 4437,方法:在 NOMOUNT 狀態下用下面的命令:RMAN> reset dat

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第11部分:

abase to incarnation 4437; 下面是具體的恢復步驟的一個演示(輸出略去): RMAN> shutdown immediate;RMAN> startup nomount;RMAN> reset database to incarnation 4437; RMAN> restore controlfile;RMAN> alter database mount;RMAN> restore database until scn 3794934;RMAN> recover database until scn 3794934;RMAN> alter database open resetlogs;上面的例子中,我們最大可恢復到的  SCN  就是 3794934,因爲 4437  的下一個對應物的重置  SCN  是 3794935.(2)  不使用恢復目錄的情況不使用恢復目錄的情況下,要恢復前一個對應物就必須要能恢復到前一對應物的控 制文件。不使用恢復目錄,我們就無法使用  RESET DATABASE TO incarnation_num  命 令。

 

    首先看看有哪些對應物:RMAN> list incarnation;

數據庫    Incarnations    列表 DB    關鍵字    Inc                                   關鍵字    DB                           名           DB ID CUR    重置 SCN 重置時間 ------- ------- -------- ---------------- --- ---------- ---------- 1         1               MING          &n

 

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第12部分:

bsp;  2600315304                NO         3501920        20-8  月   -06

2 2 MING 2600315304 NO 3785052 29-8  月 -06 3 3 MING 2600315304 NO 3794049 29-8  月 -06 4 4 MING 2600315304 NO 3794728 29-8  月 -06 5

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第14部分:

5 MING 2600315304 NO 3794935 29-8  月 -06

 

  6         6               MING             2600315304                YES       3976301             03-9  月    -06 假設我們要恢復到 5,6之間,那麼就要看看有沒有控制文件的備份的  SCN  在  3794935 到 3976301。我們使用下面的命令: RMAN> LIST BACKUP OF CONTROLFILE BY FILE; 控制文件備份列表 =========================== CF Ckp SCN Ckp      時間           BS Key      S  段數  副本數  標記 ---------- ---------- ------- - -------    ------- ---

3976095 03-9  月 -06 34 A 2 1

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第4部分:

TAG20060903T170136 3959239 03-9  月 -06 30 A 1 1   3959170 03-9  月 -06 29 A 1 1   3958983 03-9  月 -06 28 A 1 1   3958937 03-9  月 -06 27 A 1 1  

 

 

3816575 30-8  月 -06 11

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第5部分:

A 2 1 TAG20060830T064447

 

可以看出,上面的列表中,控制文件都是可以用的。接下來找到一個具體的含有控制文件的備份: RMAN> LIST BACKUP OF CONTROLFILE; 備份集列表 =================== …… 段名:E:/TEST/C-2600315304-20060830-07 控制文件包括: Ckp SCN: 3818213                            Ckp    時間:30-8  月    -06 …… 假 設 我 們 使 用  E:/TEST/C-2600315304-20060830-07 , 那 麼 接 下 來 我 們 需 要 用 DBMS_BACKUP_RESTORE  包來從這個文件中恢復控制文件。(在 SQLPLUS  中運行)     SQL>SHUTDOWN IMMEDIATE; SQL>STARTUP NOMOUNT; SQL>DECLARE DEVTYPE VARCHAR2(256); DONE BOOLEAN; BEGIN DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL); DBMS_BACKUP_RESTORE.restoresetdatafile; DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL01.CTL'); DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D ONE=>done); DBMS_BACKUP_RESTORE.restoresetdatafile; DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL02.CTL'); DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D ONE=>done); DBMS_BACKUP_RESTORE.restoresetdatafile; DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL03.CTL'); DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-2006

 

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第6部分:

0830-07',D ONE=>done); DBMS_BACKUP_RESTORE.devicedeallocate(NULL); END; / SQL>ALTER DATABASE MOUNT;   重新聯到 RMAN  後    再來運行一下 LIST INCARNATION; $ RMAN TARGET /@MING NOCATALOG; RMAN> LIST INCARNATION; 數據庫     Incarnations  列表 DB    關鍵字     Inc         關鍵字    DB          名     DB  ID                              CUR     重置    SCN 重置時間 ------- ------- -------- ---------------- --- ---------- ----------

1 1 MING 2600315304 NO 3501920 20-8  月 -06 2 2 MING 2600315304 NO 3785052

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第7部分:

29-8  月 -06 3 3 MING 2600315304 NO 3794049 29-8  月 -06 4 4 MING 2600315304 NO 3794728 29-8  月 -06 5 5 MING 2600315304 YES 3794935 29-8  月 -06

 

  可以看出來,我們已經恢復到想要的對應物上了。接下來: RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE; RMAN> ALTER DATABASE OPEN RESETLOGS;

    4.7.6 RMAN增量備份

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第8部分:

 

    通過增量備份,RMAN  允許用戶只備份上次增量備份操作以來被修改過的數據塊。

    N  級別增量備份備份從最近的  N  級別或者更小級別以來的所有更改過的數據塊內容。0 級備份與全備份的不同就是  0  級備份可以作爲其它增量備份的基礎備份而全備份是不可 以的。

    增量備份的優點:  節約備份時間節省備份磁帶或者磁盤空間    降低網絡帶寬要求增量備份的缺點:  恢復時間可能要長。

    增量備份分爲兩種,一種是累積增量備份,一種是非累積增量備份。

    差異增量備份(Differential Incremental Backup)

    差異備份是默認的增量備份類型,備份上一次在同級或者更低級別進行備份以來所有有變化的數據塊。

    RMAN>backup incremental level n (incremental) database;累積增量備份(Cumulative Incremental Backup)

    包括上一次低級備份以來所有有變化的數據塊。累計增量備份增加了備份的時間, 但是因爲恢復的時候,需要從更少的備份集中恢復數據,所以,爲了減少恢復的時候, 累計增量備份將比差異增量備份更有效。

    RMAN>backup incremental level n (cumulative) database;

    9i  :  不管怎麼樣增量備份,還是需要比較數據庫中全部的數據塊,這個過程其實是一個漫 長的過程,而且由於增量備份形成多個不同的備份集,使得恢復變的更加不可靠而且速度慢, 所以增量備份在版本 9中仍然是雞肋,除非是很大型的數據倉庫系統,沒有必要選擇增量備 份。

    10g  :  在增量備份上做了很大的改進,可以使增量備份變成真正意義的增量,因爲通過特有的增量日誌,使得 RMAN  沒有必要去比較數據庫的每一個數據塊,當然,代價就是日誌的 IO與磁盤空間付出。另外,10g 通過備份的合併,使增量備份的結果可以合併在一起,而完全的減少了恢復時間。

    1.  基本備份(0  級備份)

    Level  0  是增量備份策略的基礎(注意與 Full備份區別)。執行增量備份操作時,首先需 要的是基本備份(incremental base backup),增量備份必須有一個基本備份。基本備份的增量 級別是  0,如果沒有  0  級備份,那麼其它級別的備份會自動轉成基本備份。

    0&nbs

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第9部分:

p; 級備份舉例:

 

    RMAN> run { 2> allocate channel dev1 type disk;3> backup 4> incremental level 0 5> filesperset 4    #定義每個 backupset  的最大文件數6> format "/oracle/backups/sunday_level0_%t" 7> (database);8> release channel dev1;

    使用 LIST語句查看,數據庫備份集的列表顯示中, "type"  將顯示  "Incremental","LV"列將顯示"0"  . 2.  N  級備份

    RMAN> run { 2> allocate channel dev1 type disk;3> backup 4> incremental level 1/2/3/4 5> filesperset 4    #定義每個 backupset  的最大文件數6> format "/oracle/backups/sunday_level0_%t" 7> (database);8> release channel dev1;9> }

    3.  N 級備份的規劃根據業務需求、數據量、恢復所需要的時間等方面考慮,制定合理的備份計劃。 例:  一個典型的增量備份案例如下:星期天晚上  - level 0 backup performed 星期一晚上  - level 2 backup performed 星期二晚上  - level 2 backup performed 星期三晚上  - level 1 backup performed 星期四晚上  - level 2 backup performed 星期五晚上  - level 1 backup performed 星期六晚上  - level 2 backup performed 星期天晚上  - level 0 backup performed 4.  增量備份的恢復同普通的完全恢復:  restore    recover RMAN自動確定和使用需要的備份集。

    4.7.7 RMAN備份的優化

    可以在 RMAN配置中設置備份的優化,如RMAN> CONFIGURE BACKUP OPTIMIZATION ON;如果優化設置打開,將對備份的數據文件、歸檔日誌或備份集運行一個優化算法。

    RMAN備份操作主要是完

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第10部分:

成以下三個步驟1、從磁盤上讀取數據2、在內存中處理數據塊3、寫入數據到磁盤或磁帶以上的讀寫操作可以同步或異步的完成,在同步 I/O操作中,一個時間只允許有一個IO 操作,但是在異步 I/O操作中,一個時間允許有多個IO操作。因此,備份與恢復的調優主 要集中在以下幾個方面:1、  提高同步或異步 I/O操作能力在支持異步操作的操作系統上, 可以通過設置TAPE_AYSNCH_IO,DISK_ASYNCH_IO 和 BACKUP_TYPE_IO_SLAVES 來支持異步操作,提高寫的能力。

 

    2、  提高磁盤讀能力可以在  backup命令後通過設置  DISKRATIO來保證從多個磁盤上讀取數據,保證 連續的數據流。

    3、  正確設置緩衝區與參數值設置LARGE_POOL_SIZE , 使備份可以使用連續的緩衝池 , 通過設置DB_FIL_DIRECT_IO_COUNT  可以提高緩衝區的利用。如果使用磁帶備份,還可以設置 BACKUP_TYPE_IO_SLAVES 來提高磁帶的寫能力。

    4、  採用並行備份開闢多個通道,可以實現並行備份與恢復

    4.7.8 DBMS_BACKUP_RESTORE 包

    這個包是  RMAN  備份與恢復的核心,在調試模式下,RMAN  會輸出它調用的每一條命令:C:/> rman debug target /@tlgaxz catalog rman/rman@reco trace=debug.txt

    常用命令:restoreSetDataFile               指示還原操作的開始(但是不會執行實際的還原操作)

    restoreSetDataFileTo     定義要還原的數據文件和該文件的還原位置

    restoreControlFileTo 定義控制文件的還原位置

    restoreSpfileTo                     定義要還原的  spfile 的位置

    restorebackuppiece             執行實際的還原操作,這個函數的一個參數

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第11部分:

是備份文件名

 

    devicedeallocate                  釋放  deviceallocate 函數所分配的設備 deviceallocate          分配用於連續  I/O的設備

     applySetDataFile      指示增量還原操作的開始 applyDataFileTo    定義數據文件的增量還原位置

    applybackuppiece        執行實際的還原操作 resetoreSetArchivelog    指示歸檔日誌還原操作的開始

    restoreArchivelog                 定義要還原的歸檔的重做日誌序列和線程

    例:使用  dbms_backup_restore 包恢復服務器參數文件:在一些不常見的情況下,我們可能需要直接使用  dbms_backup_restore  包來恢復 spfile. 當然這個包也可以用來恢復其它數據,是常規辦法都沒有用的時候的一個利器。這個包可以 在 數  據 庫    NOMOUNT    狀 態  下  使  用 .  假  設 我  們  有 一  個 自  動  備  份 文  件C-2600315304-20060829-02,我們需要從這裏恢復數據,那麼可以通過執行下面的腳本來完成:

SQL>DECLARE DEVTYPE VARCHAR2(256); DONE BOOLEAN; BEGIN DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL); DBMS_BACKUP_RESTORE.restoresetdatafile; DBMS_BACKUP_RESTORE.restorespfileto('d:/spfile.ora'); DBMS_BACKUP_RESTORE.restorebackuppiece('d:/C-2600315304-20060829-00', DONE=>done); DBMS_BACKUP_RESTORE.devicedeallocate(NULL); END; /

 

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第12部分:

 

 

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第4部分:

檔重做日誌的備份與恢復

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第11部分:

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

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第10部分:

; 表空間備份

 

Oracle數據庫備份與恢復(4):RMAN(備份與恢復管理器)第5部分:

與恢復

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章