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