熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

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

2022-06-13   來源: Oracle 

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

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

   基本知識

   RMAN的組件概念

    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  利用恢 復目錄記載的信息去判斷如何執行需要的備份恢復操作

  如果不采用恢復目錄備份信息可以存在於目標數據庫的 control file 中

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

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

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

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

  MML (媒體管理庫)

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

  概念述語

  Backup Sets (備份集合)

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

  Backup Pieces (備份片)

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

  Image Copies 鏡像備份

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

  Full backup Sets 全備份集合

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

  Incremental backup sets 增量備份集合

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

  File multiplexing

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

  Recovery catalog resyncing  恢復目錄同步

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

  RMAN> resync catalog

  Incarnation  對應物

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

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

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

    使用不帶恢復目錄的 RMAN

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

    使用帶恢復目錄的RMAN

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

    命令行接口

  單個執行

  RMAN> backup database

  運行一個命令塊

  RMAN> RUN { > copy datafile to > /oracle/prod/backup/prod_dbf> }

  運行存儲在恢復目錄中的腳本

  RMAN> RUN    { EXECUTE SCRIPT backup_whole_db }

  運行外部腳本

  $ rman catalog rman/rman target / @backup_dbrman

  $ rman cmdfile=backuprman msglog=backuplog

  RMAN> @backup_dbrman ]

  RMAN> RUN    { @backup_dbrman }

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

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

  export ORACLE_SID=test

  export NLS_LANG=AMERICAN_AMERICAzhsgbk

  export PATH=$PATH$ORACLE_HOME/bin rman cmdfile=backup_dbrman

    使用腳本

  創建或者取代腳本

  RMAN> create script alloc_disk {

  > # Allocates one disk

  > allocate channel dev type disk

  > setlimit channel dev kbytes maxopenfiles readrate

  > } RMAN> replace script rel_disk { > # releases disk > release channel dev> }

  刪除腳本RMAN> DELETE SCRIPT LevelBackup

  查看腳本RMAN> PRINT SCRIPT LevelBackup

  運行腳本RMAN> RUN { EXECUTE SCRIPT backup_whole_db }

    運行OS命令

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

    執行SQL語句

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

  

   RMAN 的配置

    建立Recovery Catalog恢復目錄

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

  SQL> create tablespace rman_ts datafile /xxx/rman_tsdbf size M

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

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

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

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

  ()  登記目標數據庫

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

    查看RMAN的默認設置SHOW命令

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

  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                                                 //  備份的優化

    配置RMAN的默認設置

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

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

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

  %F  一個基於  DBID  唯一的名稱這個格式的形式為  cIIIIIIIIIIYYYYMMDDQQ其中 IIIIIIIIII  為該數據庫的 DBIDYYYYMMDD  為日期QQ  是一個    的

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

    配置默認 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

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

  RMAN> configure channel device type disk format

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

  RMAN> Run { allocate channel cq type disk format=/u/backup/%ubak

  }

  通道的一些特性讀的速率限制                                     Allocate channel ……rate = integer 最大備份片大小限制         Allocate channel …… maxpiecesize = integer 最大並發打開文件數(默認 )  Allocate channel …… maxopenfile = integer

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

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

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

  備份策略保持    

  分為兩個保持策略

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

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

    配置多個備份的拷貝數目( backup copies )

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

  RMAN> configure datafile backup copies for device type disk to

  RMAN> configure archivelogbackup copies for device type disk to

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

  RMAN> configure channel device type disk format

  /u/backup/%U /u/backup/%U

  RMAN> backup datafile n format /u/backup/%U /u/backup/%U

    設置並行備份( ARALLELISM )

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

  還可以在 BACKUP命令中使用指定 FILESPERSET 或者指定(datafile    channel c tag=DF)(datafile channel c tag=DF

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

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

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

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

  RMAN> configure snapshot controlfile name to

  /u/app/oracle/product//dbs/snapcf_Uf

    設置備份優化選項  ( optimization )

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

   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_ 的目的地

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

  set until time to_date(// yyyy/mm/dd hhmiss

  set backup copies

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

  例

  RMAN> RUN{

  set maxcorrupt for datafile to

  set backup copies =

  backup database

  }

   Copy 鏡像拷貝與恢復

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

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

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

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

    備份

  生成數據文件副本

  RMAN> copy datafile to d\backup\datafilecopy\usersdbfbak

  RMAN> copy datafile d\oracle\oradata\orai\usersdbf to

  d\backup\datafilecop y\usersdbfbak

  生成控制文件副本

  RMAN> copy current controlfile to …

  RMAN> CONFIGURE CONTROLFILE AUTOBACKUP is ON

  備份 ARCHIVELOG  副本

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

  RMAN> copy archivelog d\oracle\oradata\arc\ming_arc to

  d\oracle\orabackup\arc\ming_arc

  並行設置

   RMAN> configure device type …… parallelism = //only channel one for writting data to disk

    手工分配多個通道

    在命令中指定多個文件RMAN> cop y datafile xx to xx datafile yy to yy ……

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

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

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

    恢復

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

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

  

   Backup 備份與恢復

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

   BACKUP  備份命令選項

  設置標記(TAG)

  RMAN> backup database tag=test backup

  限制備份集大小

  RMAN> backup database maxsetsize=M

  只備份新增部分

  RMAN> backup incremental level 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

  使用自動備份進行恢復

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

  備份歸檔日志(i)

  RMAN> backup archivelog all

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

  plus archivelog 隱含如下步驟

  運行一個 ALTER SYSTEM ARCHIVELOG CURRENT 命令

  運行  BACKUP  ARCHIVELOG  ALL  命令注意如果備份優化被啟用RMAN只會備份未備份過的日志

  備份 BACKUP命令中定義的文件

  運行 ALTER SYSTEM ARCHIVE LOG CURRENT 命令   

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

  備份完後刪除歸檔日志RMAN> backup …… ARCHIVELOG all delete all input修改備份集的保存策略例如將備份設置為永久有效RMAN> backup database keep forever logs|nologs設置為有效期    天RMAN> backup database keep until time=sysdate+重寫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

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

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

   RESTORE/RECOVER恢復命令選項

  數據庫恢復

  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=

  RMAN> restore controlfile from autobackup

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

  或

  RMAN> restore controlfile from/arch/ct_c

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

  RMAN> restore controlfile to d\temp\controlctl

  歸檔重做日志的還原

  RMAN> RESTORE ARCHIVELOG ALLRMAN> RESTORE ARCHIVELOG FROM LOGSEQ= UNTIL LOGSEQ= RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=

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

  RMAN> run

  {

  set archivelog destination to d\temp

  restore archivelog all

  }

  數據文件副本還原

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

  還原檢查與恢復測試

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

  RMAN> RESTORE DATABASE VALIDATERMAN>VALIDATEBACKUPSET RMAN> RESTORE DATABASE VALIDATE CHECK LOGICAL

  從指定的tag恢復

  RMAN> RESTORE FROM tag=xxxx

  不完全恢復的還原

  set until time/SCN/ RMAN> restore database until scn RMAN>restore database to_date(// yyyy/mm/dd hhmiss RMAN> restore database until sequence thread

  塊級別的恢復

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

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

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

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

    全庫備份

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

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

  例不使用默認的設置執行脫機備份操作  在備份命令中指定備份選項

  RMAN> shutdown immediate

  RMAN> startup mount

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

  allocate channel c 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 c

  release channel c }

  在這個例子中我們分配了兩個通道備份位置是在/xxx默認情況下如果備份數據文件 (SYSTEM  表空間)控制文件和參數文件也會備份 可以通過下面的命令顯示恢復目錄中記載的備份集信息 RMAN> list backupset of database

    全庫備份的恢復

  $ rman target /

  RMAN> startup mount

  RMAN> restore database

  RMAN> recover database

  RMAN> alter database open resetlogs

    表空間備份

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

  RMAN> run {

  > allocate channel dev type disk

  > backup

  > tag tbs_users_read_only

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

  > (tablespace users)

  > }

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

    表空間備份的恢復

  RMAN> RUN{

  sql alter tablespace xx offline immediate

  restore tablespace xx

  recover tablespace xx

  sql alter tablespace xx online }

    備份控制文件

  RMAN> run {

  > allocate channel dev type SBT_TAPE

  > backup

  > format cf_t%t_s%s_p%p

  > tag cf_monday_night

  > (current controlfile)

  > release channel dev> }

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

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

  要用  RMAN  進行聯機備份操作數據庫就必須位於  ARCHIVELOG  模式恢復 目錄必須打開目標數據庫例程必須啟動數據庫加載或者打開

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

    整庫備份與恢復備份命令

  只備份數據文件  (如果 configure controlfile autobackup  on  將自動包括控件文件SPFILE)RMAN> backup database同時備份歸檔日志然後將備份後的歸檔日志刪除RMAN> backup database plus archivelog delete input明確指定同時備份控件文件

  RMAN> run{

  allocate channel c type disk

  sql alter system archive log current

  backup full database include current controlfile tag dbfull

  format /u/oracle/rmanback/full_%u_%s_%p

  sql alter system archive log current

  release channel c}

  可以用 RMAN的 plus archvielog 選項簡化數據庫備份

  RMAN> run {

  > backup database

  > format /xxfull%d_%T_%s

  > plus archivelog

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

  > delete all input

  > }

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

    表空間的備份與恢復

  備份命令RMAN> backup tablespace users

  例RMAN> RUN{

  allocate channel c type disk

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

  release channel c

  }

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

  restore tablespace xx

  switch datafile

  recover tablespace xx

  sql alter tablespace tbs online

  }

    數據文件的備份與恢復

  備份命令

  RMAN> backup datafile

  RMAN> backup datafile D\ORAC LE\ORADATA\TEST\TESTDB

  恢復命令數 據文件 恢復與表 空間恢 復類 似 假設數 據文件 號 為    的文件丟 失 文 件名 是E\ORACLE\ORADATA\USERSDBF  那麼我們恢復的時候可以指定文件號也可以指定文件名

  RMAN> run {

  > allocate channel dev type disk

  > sql alter tablespace users offline immediate

  > restore datafile     ——或者  restore E\ORACLE\ORADATA\USERSDBF

  > recover datafile

  > sql alter tablespace users online

  > release channel dev

  > }

  恢復到一個不同的位置

  $ rman target /

  RMAN> startup mount

  RMAN> RUN{

  sql alter tablespace users offline immediate

  SET NEWNAME for datafile to /xx/userdbf

  restore datafile

  switch datafile all

  recover datafile

  sql alter tablespace users online

  }

    歸檔重做日志的備份與恢復

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

  備份所有歸檔RMAN> backup archivelog all

  備份兩天來的歸檔RMAN> backup archivelog from time=sysdate [to time=xxx]

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

  備份沒有三次備份的歸檔RMAN> backup archivelog not backed up 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=UNTIL LOGSEQ=

  RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=

  可以用  SET命令來指定歸檔日志的還原位置例如RMAN> run{ set archivelog destination to d\temprestore archivelog all}需要注意的是即使新的歸檔日志目錄不同於默認的歸檔日志目錄如果  Oracle 判定日志已存在也不會恢復該歸檔日志文件

    聯機日志的備份

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

  RMAN> run {

  > allocate channel dev type disk

  > sql alter system archive log current

  > backup (archivelog from time sysdate all delete input)

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

  > release channel dev

  >

  }

  上面的腳本可以在執行完一個完整的聯機數據庫備份後執行確保所有的重做日志可以將數據庫恢復到一個一致性的狀態

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

    控制文件和服務器參數文件的備份與恢復備份

  //  設置文件名格式RMAN> set controlfile autobackup format for device t ype disk to ctl_%F

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

   RMAN> backup current controlfile

   RMAN> backup …… include control file

   RMAN> backup file                 // system datafile 自動備份

  恢復SPFILE

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

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

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

  RMAN> startup force

  或者從某個備份集恢復RMAN> restore spfile from backupset bs_num 命令 使用dbms_backup_restore 包恢復服務器參數文件在一些不常見的情況下我們可能需要直接使用dbms_backup_restore  包來恢復spfile當然這個包也可以用來恢復其它數據是常規辦法都沒有用的時候的一個利器 這個包可以在數據庫  NOMOUNT狀態下使用 假設我們有一個自動備份文件C我們需要從這裡恢復數據那麼可以通過執行下面的腳本來完成

  SQL>

  DECLARE

  DEVTYPE VARCHAR

  DONE BOOLEAN

  BEGIN

  DEVTYPE=DBMS_BACKUP_RESTOREdeviceallocate(NULL)

  DBMS_BACKUP_RESTORErestoresetdatafile

  DBMS_BACKUP_RESTORErestorespfileto(/back/SPFILEORA

  DBMS_BACKUP_RESTORErestorebackuppiece(/back/CDONE=>done)

  DBMS_BACKUP_RESTOREdevicedeallocate(NULL)END

  恢復控制文件

  RMAN> startup nomount RMAN> set dbid=

  RMAN> restore controlfile from autobackup

  或

  RMAN> restore controlfile from/arch/ct_c

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

  RMAN> restore controlfile to d\temp\controlctl

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

  使用  dbms_backup_restore 包恢復控制文件

  SQL>

  DECLARE DEVTYPE VARCHAR

  DONE BOOLEAN

  BEGIN

  DEVTYPE=DBMS_BACKUP_RESTOREdeviceallocate(NULL)

  DBMS_BACKUP_RESTORErestoresetdatafile

  DBMS_BACKUP_RESTORErestorecontrolfileto(/back/CONTROLCTL

  DBMS_BACKUP_RESTORErestorebackuppiece(/back/CDONE=>done)

  DBMS_BACKUP_RESTOREdevicedeallocate(NULL)END/

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

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

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

    歸檔模式下的不完全恢復

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

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

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

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

  startup mount

  restore database to_date(// yyyy/mm/dd hhmiss recover database to_date(// yyyy/mm/dd hhmiss alter database open resetlogs

    基於SCN的恢復

  如果知道數據庫出錯前的 SCN可以將數據庫還原到指定  SCN  狀態

  $ startup mount

  RMAN> run{

  allocate channel d type disk

  restore database until scn           ——或者  set until scn

  recover database until scn

  sql alter database open resetlogs

  release channel d

  }

    基於時間的恢復

  下面使用 set until time  命令為    年    月    日下午  點的恢復目標

  $ startup mount

  RMAN> run{

  set until time to_date(// yyyy/mm/dd hhmiss

  restore database

  recover database

  alter database open resetlogs

  }

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

    基於日志序列的恢復

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

  SQL> startup mount

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

  SQL> alter database open resetlogs

  RMAN> RUN {

  > SET UNTIL SEQUENCE THREAD

  > RESTORE DATABASE

  > RECOVER DATABASE    ——recovers through log not include

  > ALTER DATABASE OPEN RESESTLOGS

  > }

   RMAN 查看信息List 與Report

    恢復目錄相關視圖

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

  RC_DATAFILE RC_STORED_SCRIPT RC_STORED_SCRIPT_LINE RC_TABLESPACE 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

   ROUND(SOFAR/TOTALWORK*%_COMPLETE

   FROM V$SESSION_LONGOPS

   WHERE OPNAME LIKE RMAN%

   AND OPNAME NOT LIKE %aggregate%

   AND TOTALWORK !=

   AND SOFAR <> TOTALWORK

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

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

  rmantarget / catalog rman/rman@rcat

  在分配通道後設置 COMMAND ID 參數然後復制所需的對象

  run {

  allocate channel t type disk

  set command id to rman

  copydatafile to /u/backup/dfcpy

  release channel t}

  查詢 V$SESSION_LONGOPS 視圖以獲得復制的狀態

  SELECT sid serial# context sofar totalwork

  round(sofar/totalwork*% Complete

  FROM v$session_longops

  WHERE opname LIKE RMAN%

  AND opname NOT LIKE RMAN aggregate%

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

  SELECT sid spid client_info FROM v$process p v$session s WHERE paddr = spaddr

  AND client_info LIKE %id=rman%

   List

  List  命令是一種在數據庫控制文件 或者恢復目錄中查詢備份的歷史信息的方法 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

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

  列出文件  E\ORACLE\USERSDB  的備份RMAN> list backup of datafile E\ORAC LE\USERSDB

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

  列出歸檔日志的備份RMAN> list archivelog allRMAN> list backup of archivelog all

  列出副本

  RMAN> list copy                                  列出所有的副本

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

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

  RMAN> list copy of database           列出數據庫所有數據文件的副本

   Report

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

  RMAN> report schema或者RMAN> REPORT SCHEMA AT TIME SYSDATE RMAN> REPORT SCHEMA AT SCN RMAN> REPORT SCHEMA AT SEQUENCE THREAD

  報告需要備份的數據文件RMAN> report need backup [ redundancy | days | incremental n]報告過期了的數據文件或者不可用的備份與拷貝RMAN> Report obsolete [orphan]報告最近沒有備份的數據文件RMAN> report need backup days=        //  恢復需要超過 天的歸檔日志RMAN> report need backup incremental= //  恢復時需要超過   增量的文件報表文件  增量 名稱 E\ORACLE\ORADATA\MING_RECOVER\MINGDICTDB E\ORACLE\ORADATA\MING_RECOVER\MINGLOBDB

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

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

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


From:http://tw.wingwit.com/Article/program/Oracle/201311/17290.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.