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 利用恢 復目錄記載的信息去判斷如何執行需要的備份恢復操作。
如果不采用恢復目錄,備份信息可以存在於目標數據庫的 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 multiplexing
多個數據文件可以在一個備份集中。
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> }
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 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
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 一個基於 DBID 唯一的名稱,這個格式的形式為 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 …… 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. 配置多個備份的拷貝數目( 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> configure 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;
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 disk
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 ALL 命令。注意如果備份優化被啟用,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恢復命令選項
數據庫恢復
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;
}
數據文件副本還原
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,所以屬於脫機備份。
非歸檔模式不備份 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)
4.4.4 歸檔模式下的BACKUP備份與完全恢復
要用 RMAN 進行聯機備份操作,數據庫就必須位於 ARCHIVELOG 模式。恢復 目錄必須打開,目標數據庫例程必須啟動,數據庫加載或者打開。
這部分只介紹完全恢復,不完全恢復見下一節。
4.4.4.1 整庫備份與恢復備份命令:
只備份數據文件 (如果 configure controlfile autobackup on; 將自動包括控件文件,SPFILE):RMAN> backup database;同時備份歸檔日志,然后將備份后的歸檔日志刪除RMAN> backup database plus archivelog delete input;明確指定同時備份控件文件:
RMAN> run{
allocate channel c1 type disk;
sql 'alter system archive log current';
backup full database include current controlfile tag 'dbfull'
format '/u06/oracle/rmanback/full_%u_%s_%p';
sql 'alter system archive log current';
release channel c1;}
可以用 RMAN的 plus archvielog 選項簡化數據庫備份:
RMAN> run {
2> backup database
3> format '/xxfull%d_%T_%s'
4> plus archivelog
5> format '/xx/arch_%d_%T_%s'
6> delete all input;
7> }
完全恢復:目標數據庫必須是 mount狀態$ rman target / RMAN> startup mount RMAN> restore database;RMAN> recover database;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 數據文件的備份與恢復
備份命令:
RMAN> backup datafile 3;
RMAN> backup datafile 'D:\ORAC LE\ORADATA\TEST\TEST.DB';
恢復命令:數 據文件 恢復與表 空間恢 復類 似 .假設數 據文件 號 為 5 的文件丟 失 ,文 件名 是:'E:\ORACLE\ORADATA\USERS.DBF', 那么我們恢復的時候可以指定文件號,也可以指定文件名。
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter tablespace users offline immediate";
4> restore datafile 4; ——或者 restore 'E:\ORACLE\ORADATA\USERS.DBF'
5> recover datafile 4;
6> sql "alter tablespace users online";
7> release channel dev1;
8> }
恢復到一個不同的位置:
$ rman target /
RMAN> startup mount
RMAN> RUN{
sql "alter tablespace users offline immediate";
SET NEWNAME for datafile 9 to '/xx/user01.dbf';
restore datafile 9;
switch datafile all;
recover datafile 9;
sql "alter tablespace users online";
}
4.4.4.4 歸檔重做日志的備份與恢復
備份:整庫備份的同時,備份所有歸檔 (以及聯機日志):RMAN> backup database plus archivelog;
備份所有歸檔:RMAN> backup archivelog all;
備份兩天來的歸檔:RMAN> backup archivelog from time='sysdate-2' [to time=‘xxx’] ;
備份從 sequence 1 開始的歸檔:RMAN> backup archivelog from sequence 1[to sequence =‘n];
備份沒有三次備份的歸檔:RMAN> backup archivelog not backed up 3 times;
備份所有歸檔,然后刪除歸檔:RMAN> backup archivelog all delete input;
恢復:顯示恢復目錄中的歸檔日志:RMAN> list backupset of archivelog all;
一般情況下,在 RMAN 的普通恢復過程中,不必恢復歸檔的重做日志。不過偶爾也需 要恢復重做日志,例如我們用 Log Miner 來從歸檔中查找一些東西。
RMAN命令舉例:
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
可以用 SET命令來指定歸檔日志的還原位置,例如:RMAN> run{ set archivelog destination to "d:\temp";restore archivelog all;}需要注意的是,即使新的歸檔日志目錄不同於默認的歸檔日志目錄,如果 Oracle 判定日志已存在,也不會恢復該歸檔日志文件。
4.4.4.5 聯機日志的備份
聯機日志不能用 RMAN 來備份,可以先將其歸檔,再備份。為了實現這點,必須在 RMAN中執行歸檔命令語句:
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter system archive log current";
4> backup (archivelog from time "sysdate-1" all delete input)
5> "format "/oracle/backups/log_t%t_s%s_p%p";
6> release channel dev1;
7>
}
上面的腳本可以在執行完一個完整的聯機數據庫備份后執行,確保所有的重做日志可以將數據庫恢復到一個一致性的狀態。
當然,也可以在全庫備份時使用 plus archvielog 選項,將自動完成聯機日志的備份。
4.4.4.6 控制文件和服務器參數文件的備份與恢復備份:
// 設置文件名格式RMAN> set controlfile autobackup format for device t ype disk to 'ctl_%F';
1. RMAN> configure controlfile autobackup on; // backup database 時將自動備份
2. RMAN> backup current controlfile;
3. RMAN> backup …… include control file;
4. RMAN> backup file 1; // system datafile 自動備份
恢復SPFILE:
SPFILE(PFILE)的丟失/損壞,對數據庫不會產生致命影響,可以從其他方式恢復。不過既然RMAN的備份計划中包括了SPFILE的備份,那么就可以使用RMAN來還原SPFILE了。
$ rman target / catalog "rman/rman@db" RMAN> set dbid=153910023 // SET DBID 這個步驟是不能省略的,否則會報錯。
RMAN> restore spfile from autobackup [MAXDAYS 100]; // 或者 restore spfile;
RMAN> startup force
或者從某個備份集恢復:RMAN> restore spfile from backupset bs_num 命令。 使用dbms_backup_restore 包恢復服務器參數文件:在一些不常見的情況下,我們可能需要直接使用dbms_backup_restore 包來恢復spfile.當然這個包也可以用來恢復其它數據,是常規辦法都沒有用的時候的一個利器。 這個包可以在數據庫 NOMOUNT狀態下使用。 假設我們有一個自動備份文件C-2600315304-20060829-02,我們需要從這里恢復數據,那么可以通過執行下面的腳本來完成:
SQL>
DECLARE
DEVTYPE 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-20060630-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 狀態下進行。在不完全恢復完成之后, 通常需要使用 resetlogs 選項來打開數據庫。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;
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;
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 OPNAME 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 命令是一種在數據庫控制文件 或者恢復目錄中查詢備份的歷史信息的方法。 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 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 RMAN 的管理與維護
如果數據庫做了 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數據庫)
打開數據庫的時候,每次使用 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;
核對歸檔日志的備份集 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 命令來將一個備份修改為永 久保留的備份,也可以修改為要保存多少天的備份。還可以使用 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 狀態的記錄。如果想刪除舊的對應物,那么我們可以刪除 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 注銷數據庫
注銷數據庫不是簡單的在 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、 設定執行計划
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> crosscheck 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. 備份主數據庫(包括數據文件、控制文件以及所有歸檔),並把該備份集拷貝到副本 數據庫機器同樣的目錄下。
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.跳過不需要復制的表空間要跳過只讀表空間,在執行 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 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): 輔助實例上的文件集。包括控制文件、回滾段或者重做段的表 空間、系統表空間、聯機日志文件等,還可以選擇輔助實例的臨時表空間。
恢復集(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 的輔助實例 (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 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_BLOCK_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 表示 一個數據庫邏輯生存期的結束和另一個數據庫邏輯生存期的開始。數據庫的邏輯生存期 也被稱為一個對應物(incarnation)。每次使用 resetlogs 選項來打開數據庫后都會創建一個 新的數據庫對應物。
使用 RMAN可以進行穿越 resetlogs 的恢復,即可以恢復到前一個對應物。10g 版本 增強了這方面的功能。
(1) 使用恢復目錄的情況使用恢復目錄的情況下,恢復前一個對應物是非常簡單的。 首先,用list incarnation;來顯示有哪些對應物:RMAN> list incarnation;
1
|
2
|
MING
|
2600315304
|
NO
|
1
|
20-4
月
|
-06
|
1
|
854
|
MING
|
2600315304
|
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
|
YE
S
|
3794935
|
29-8
月
|
-06
|
接下來,決定恢復到哪個對應物比如,決定恢復到上面的 4437,方法:在 NOMOUNT 狀態下用下面的命令:RMAN> reset database 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;
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
|
5
|
MING
|
2600315304
|
NO
|
3794935
|
29-8
月
|
-06
|
3976095
|
03-9
月
|
-06
34
|
A
2
|
1
|
TAG20060903T
170136
|
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
|
A
2
|
1
|
TAG20060830T064447
|
1
|
1
|
MING
|
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
|
5
|
MING
|
2600315304
|
YE
S
|
3794935
|
29-8
月
|
-06
|
4.7.6 RMAN增量備份
通過增量備份,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 級備份舉例:
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備份操作主要是完成以下三個步驟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 執行實際的還原操作,這個函數的一個參數是備份文件名
devicedeallocate 釋放 deviceallocate 函數所分配的設備 deviceallocate 分配用於連續 I/O的設備
applySetDataFile 指示增量還原操作的開始 applyDataFileTo 定義數據文件的增量還原位置
applybackuppiece 執行實際的還原操作 resetoreSetArchivelog 指示歸檔日志還原操作的開始
restoreArchivelog 定義要還原的歸檔的重做日志序列和線程
例:使用 dbms_backup_restore 包恢復服務器參數文件:在一些不常見的情況下,我們可能需要直接使用 dbms_backup_restore 包來恢復 spfile. 當然這個包也可以用來恢復其它數據,是常規辦法都沒有用的時候的一個利器。這個包可以 在 數 據 庫 NOMOUNT 狀 態 下 使 用 . 假 設 我 們 有 一 個 自 動 備 份 文 件C-2600315304-20060829-02,我們需要從這里恢復數據,那么可以通過執行下面的腳本來完成: