1 RMAN備份恢復
1.1 基礎理論
恢復可以分為完全恢復和不完全恢復
完全數據庫恢復是恢復到故障發生前的狀態,所有已經提交的操作都進行恢復,確保數據庫不丟失任何數據,完全恢復只用於歸檔模式。
不完全數據庫恢復是將數據庫恢復到備份點與介質失敗點之間某個時刻的狀態,並不是恢復所有提交的操作,不完全恢復可能丟失部分數據。
任何類型的恢復包括兩個階段:前滾階段和回滾(回退)階段。 在前滾恢復階段(roll-forward recovery),恢復管理器應用必要的事務日志組“重做”(REDO)所有提交的不在數據庫數據文件中的事務 。回滾階段,在前滾恢復后,Oracle必須執行回滾恢復(roll-back recovery)。 由於一些未完成的事務對數據庫的修改信息已經提交到數據庫,為保證數據庫的一致性,需要清除這些事務對數據庫的修改,數據庫應執行回滾操作(UNDO),強制撤銷這些未完成事務。
1.2 RMAN(備份與恢復管理器)
RMAN 是ORACLE 提供的一個備份與恢復的工具,可以用來備份和還原數據庫文件、歸檔日志和控制文件。它也可以用來執行完全或不完全的數據庫恢復。RMAN可以由命令行接口或者OEM的Backup Manager GUI 來控制。
RMAN備份形式
1、鏡像復制(Image Copies)
鏡像復制實際上就是數據文件、控制文件或歸檔文件的復制,與用戶通過操作系統命令建立的文件復制實質一樣,只不過RMAN是利用目標數據庫中的服務進程來完成文件復制,而用戶則是用操作系統命令。所以鏡像復制的方式體現不出RMAN的優勢,也並非我們討論的重點,大家了解一下即可(啥?想知道鏡像復制咋用?卡,問村長去~~~~~)。
2、備份集(Backup Sets)
備份集是通過RMAN創建的邏輯備份對象。一個備份集中可以包含多個數據文件、控制文件或歸檔文件。備份集在物理上是由多個備份片段組成,每個備份片段是一個操作系統文件。
1.3 基本知識
1.3.1 RMAN的組件、概念
1.3.1.1 RMAN 組件
Target Database: (目標數據庫)
就是需要 RMAN 對其進行備份與恢復的數據庫,RMAN 可以備份數據文件,控制文件,歸檔日志,spfile。(注意:RMAN不能用於備份聯機日志、初始化參數文件和口令文件)
Server Session: (服務器會話)
RMAN 啟動數據庫上的Oracle 服務器進程,將建立一個與目標數據庫的會話。由目標數據庫上的服務器進程進行備份、還原、恢復的實際操作。
服務器進程
RMAN 的服務進程是一個后台進程,用於與RMAN 工具與數據庫之間的通信,也用於RMAN 工具與磁盤/磁帶等 I/O 設置之間的通信,服務進程負責備份與恢復的所有工作,將產生一個服務進程。
Channel: (通道)
一個通道是RMAN和目標數據庫之間的一個連接,"allocate channel"命令在目標數據庫啟動一個服務器進程,同時必須定義服務器進程執行備份或者恢復操作使用的I/O 類型。
通道控制命令可以用來:
(1) 控制RMAN 使用的O/S資源,影響並行度
(2) 指定I/O帶寬的限制值(設置limit read rate 參數)
(3) 定義備份片大小的限制(設置limit kbytes)
(4) 指定當前打開文件的限制值(設置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來進行備份與恢復。
1.3.1.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
1.3.2 RMAN的使用:命令行接口與腳本
數據庫狀態
RMAN恢復目錄數據庫: 必須OPEN
目標數據庫: 根據不同情況,必須MOUNT或OPEN
1.3.2.1 連接本地數據庫
C:\Documents and Settings\Administrator>set oracle_sid=jssweb C:\Documents and Settings\Administrator>rman target /
或者
C:\Documents and Settings\Administrator>set oracle_sid=jssweb C:\Documents and Settings\Administrator>rman 恢復管理器: 版本9.2.0.1.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. RMAN> connect target /
1.3.2.2 連接遠程數據庫
如果要連接的目標數據庫是一個遠程數據庫,那么必須在建立連接時指定一個有效的網絡服務名,同時你本地的tnsname.ora文件中也必須已經建立了該網絡服務名的正確配置。示例如下:
C:\Documents and Settings\Administrator>rman target sys/change_on_install@testdb
恢復管理器: 版本9.2.0.1.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 連接到目標數據庫: TESTDB (DBID=2220262593) RMAN>
當然,在這里你也可以同樣先啟動rman,再通過connect創建連接。具體示例與上類似,如果再做演示那這個環節不僅是弱,而是超弱,即使堅定如我也承受不了如此強烈的嘔吐加鄙視的欲望,所以還是做罷吧
1.3.2.3 退出RMAN
哈哈,退出就太簡單啦,敲個EXIT即可
備注:在啟動rman時可以指定日志輸出,之前的示例中均沒有指定,rman就將執行結果直接打印到屏幕了,如果我們以后寫了一堆超長的rman批處理放在后台執行,可能會希望能夠把執行日志記錄下來備查,這個時候日志輸出功能就用上了。這個功能也非常簡單,如下:
C:\Documents and Settings\Administrator>rman target / log d:\logs\rman_log.txt RMAN>
rman會將執行的結果直接輸出到指定的d:\logs\rman_log.txt文件,一旦腳本放入后台執行出現問題,我們可以根據rman_log文件來輔助分析。
使用帶恢復目錄的RMAN, 只需在RMAN后加上 CATALOG即可。
1.3.2.4 啟動、關閉數據庫
在RMAN中執行關閉和啟動數據庫的命令與SQL環境下一模一樣。當然,在執行之前,你需要先連接到目標數據庫
1.3.2.5 執行操作系統命令
Rman支持通過執行host命令暫時退出rman的命令提示符而進入到操作系統的命令環境,如下例:
RMAN> host; Microsoft Windows [版本 5.2.3790] (C) 版權所有 1985-2003 Microsoft Corp. C:\Documents and Settings\Administrator>cd \ C:\>exit 主機命令完成 RMAN>
執行完系統命令后可以再通過執行exit退出到rman命令提示符下。
1.3.2.6 執行SQL語句
在rman中執行sql語句稍嫌復雜。
在RMAN的命令提示符后輸入SQL命令,然后在一對單引號(雙引號亦可)中輸入要執行的SQL語句,例如:
RMAN> SQL 'ALTER SYSTEM ARCHIVE LOG ALL';
需要注意的一點是,rman中的sql環境不能執行SELECT語句,或者說執行不報錯,但你也看不到結果。
1.3.2.7 顯示RMAN默認配置
Rman中可以利用show命令來顯示當前的配置參數。例如,通過SHOW ALL顯示當前所有的配置。
RMAN> show all; RMAN 配置參數為: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS; CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:/backup/%F'; CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'F:\ORAHOME1\DATABASE\SNCFJSSWEB.ORA'; #default RMAN>
注:配置項后面跟了# default的表示該項仍是初始配置,未被修改過。
該命令使用也相當靈活,其后跟上不同的類型的配置參數,即可以顯示不同類型的配置,如:
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; // 備份的優化
改配置是通過CONFIGURE命令
1.3.2.8 RMAN查看信息 List與Report
恢復目錄相關視圖
恢復目錄本身有一組視圖,用於存放目標數據庫與備份信息,可以用RMAN 用戶登錄數據庫進行查看,例:
RC_DATABASE
RC_DATAFILE
RC_STORED_SCRIPT
RC_STORED_SCRIPT_LINE
RC_TABLESPACE
RMAN備份相關的動態性能表
l V$ARCHIVED_LOG:本視圖包含了所有歸檔重做日志文件的創建情況,備份情況以及其他信息。
l V$BACKUP_CORRUPTION:這個視圖顯示了RMAN在哪些備份集中發現了損壞的數據壞。在你使用BACKUP VALIDATE命令對備份集進行檢查時如果發現了損壞的數據塊,RMAN將在這個視圖中寫入記錄。
l V$COPY_CORRUPTIO:本視圖顯示了哪些鏡像復制備份文件已經被損壞。
l V$BACKUP_DATAFILE:本視圖通常用來獲取每個數據文件中非空白數據塊的數量,從而幫助你創建出大小基本相等的備份集。另外,在視圖中也包含了數據文件中損壞的數據塊的信息。
l V$BACKUP_REDOLOG:本視圖顯示了在現有的備份集中飲食有哪些歸檔重做日志文件。
l V$BACKUP_SET:本視圖顯示了已經創建的備份集的信息。
l V$BACKUP_PIECE:本視圖顯示了已經創建的備份片段的信息。
List
List 命令是一種在數據庫控制文件或者恢復目錄中查詢備份的歷史信息的方法。
List提供了一組信息,可以提供各種備份的信息,如對應物、備份集、歸檔日志備份、控
制文件備份等等。
列出對應物:
RMAN> list incarnation;
RMAN> list backup summary; --列出備份概要信息
RMAN> list backup by file; --按備份類型列出備份
RMAN> list backup; --獲得備份的詳細信息
RMAN> list backupset bs#; --包括備份片的物理文件名
RMAN> list backup tag=tab_number; --或者按照TAG 來查
RMAN> list expired backup; --列出過期的備份
RMAN> list backup of tablespace USERS; --按照表空間和數據文件來列出備份
RMAN> list backup of datafile 5; --列出文件 5 的備份
RMAN> list backup of datafile ' E:\ORACLE\USERS.DB '; --列出文件 E:\ORACLE\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 --列出數據庫所有數據文件的副本
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]
1.3.2.9 刪除備份
用於刪除RMAN備份記錄及相應的物理文件。當使用RMAN執行備份操作時,會在RMAN資料庫中生成RMAN備份記錄,並且RMAN備份記錄被存放在目標數據庫的控制文件中,如果配置了恢復目錄,那么該備份記錄也會被存放到恢復目錄中。
1、刪除陳舊備份
當使用RMAN執行備份操作時,RMAN會根據備份冗余策略確定陳舊備份。
RMAN> delete obsolete;
2、刪除EXPIRED備份
執行crosscheck命令核對備份集,那么會將該備份集標記為EXPIRED狀態。為了刪除相應的備份記錄,可以執行delete expired backup命令。
RMAN> delete expired backup;
3、刪除EXPIRED副本
RMAN> delete expired copy;
4、刪除特定備份集
RMAN> delete backupset 19;
5、刪除特定備份片
RMAN> delete backuppiece 'd:\backup\DEMO_19.bak';
6、刪除所有備份集
RMAN> delete backup;
7、刪除特定映像副本
RMAN> delete datafilecopy 'd:\backup\DEMO_19.bak';
8、刪除所有映像副本
RMAN> delete copy;
9、在備份后刪除輸入對象
RMAN> delete archivelog all delete input;
RMAN> delete backupset 22 format = ''d:\backup\%u.bak'' delete input;
1.3.2.10 批處理
RMAN>RUN{
.......................
.......................
}
批處理方式實質是將原來單個執行的命令組合到一起,並放在run{}之間,這種方式最大的好處是所有在run中的命令被視為一個作業,如果作業中任何一條命令執行失敗,則整個命令停止執行,即失敗命令后的其它命令都不會再被執行。這種方式是最常使用的方式,特別對於后台執行。
1.3.2.11 運行腳本
C:\>rman TARGET / @backup_db.rman
RMAN> @backup_db.rman
RMAN> RUN { @backup_db.rman }
運行存儲在恢復目錄中的腳本(需要首先為rman創建恢復目錄)
RMAN> RUN { EXECUTE SCRIPT backup_whole_db };
看看,夠靈活吧。
操作系統腳本(linux,windows環境下小有差異,但只是操作系統命令的不同)
C:\>rman cmdfile=backup_db.rman
明眼人看的出來,后兩種其實是前面兩種加上操作系統命令的綜合應用。
1.4 RMAN的配置
1.4.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_owner to rman;
(3) 在目錄數據庫中創建恢復目錄
$ rman catalog rman/rman
RMAN> create catalog tablespace rman_ts;
(4) 登記目標數據庫:
一個恢復目錄可以注冊多個目標數據庫,注冊目標數據庫的命令為:
$ RMAN catalog rman/rman target user/pwd @rcdb;
RMAN> register database;
1.4.2 配置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 type to disk;
RMAN> configure default device type 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 backupretention 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 redundancy 3;
設置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 archivelog backup 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 channelc1 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;
如果優化設置打開,將對備份的數據文件、歸檔日志或備份集運行一個優化算法。
- 9. 設置RMAN備份的保存策略
策略,嘖嘖,想不到咱也能說出這么專業的詞兒啊,人家說專家就是能把任何事務都描述的很專業,我一定要再多學幾個類似的詞,要讓自己離專家的距離更近一些,或者,我直接搬到eygle他們家床頭邊上住去~~~~
如果你的數據庫非常大,並且備份執行也比較頻繁(廢話,不大不頻繁也得這么干,優秀的dba一定要擁有對應其身份的良好的工作習慣),有必要對你這些備份文件的保存制訂合理的策略。該挪的挪,該搬的搬,該刪除的刪,合理釋放,最大化利用有限的磁盤空間嘛。
在通過RMAN創建的備份片段中,由於備份文件也是由rman創建和維護,所以手工刪除並不明智,並且RMAN也提供了備份保留策略,合理制訂,由RMAN自動刪除過舊的備份文件更加安全也更加方便。
RMAN中提供了兩種備份保留策略:基於時間,和基於冗余數量
為RMAN設置了備份保留策略之后,RMAN會自動判斷哪些備份集或鏡像復制文件不必再保留。這些備份文件將會被標記為“廢棄(Obsolete)”,可以通過REPORT OBSOLETE命令查看當前處於廢棄狀態的備份文件,或者通過DELETE OBSOLETE命令刪除這些廢棄的備份。
A、基於時間的備份保留策略。
說的簡單些,就是你希望數據庫最早能恢復到幾天前。比如將恢復時間段設置為7,那么RMAN所保留的備份即是可以保證你將數據庫恢復到一周內任何時刻下那些文件。
設置基於時間的備份保留策略可以通過CONFIGURE命令,例如:
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF n DAYS;
注:n=大於0的正整數
執行該命令后,RMAN將始終保留那些將數據庫恢復到n天前的狀態時需要用到的備份,比如,恢復時間段被設置為7天,那么各個數據文件的備份必須滿足如下條件:
SYSDATE-(SELECT CHECKPOINT_TIME FROM V$DATAFILE)>=7
任何不滿足上述條件的備份都將被RMAN廢棄並可通過DELETE OBSOLETE命令刪除。Ok,基本知識講完了,下面考驗你的時刻到了,提問:如果滿足條件的備份你也想刪,咋整?啥?DEL?D你個大頭鬼,再回去看看第二章。
B、基於冗余數量的備份保留策略
基於冗余數量實質即某個數據文件以各種形式(包括備份集和鏡像復制)存在的備份的數量。如果某個數據文件的冗余備份數量超出了指定數量,RMAN將廢棄最舊的備份。
同樣,基於數量的備份保留策略也是通過CONFIGURE命令設置,例如:
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY N;
同上:n=大於0的正整數
你也可以通過下列命令設置成不采用任何備份保留策略:
RMAN> CONFIGURE RETENTION POLICY TO NONE;
1.4.3 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;
}
1.5 Copy鏡像拷貝與恢復
Copy鏡像拷貝命令可以創建數據庫數據文件、歸檔重做日志或者控制文件的精確副本。RMAN 副本與這些文件的區別僅在於名稱和(或)位置的區別。功能相當於用戶管理的備份恢復中的熱備份。備份副本的好處是恢復比較快,恢復時可以不用拷貝,指定新位置即可。Copy鏡像拷貝至少要在 mount 狀態下運行。
Copy鏡像拷貝可作為增量備份的 Level 0。
Oracle10g開始,允許使用單條命令"backup as copy"進行數據庫拷貝。
1.5.1 備份
生成數據文件副本:
RMAN> copy datafile 3 to 'd:\backup\datafilecopy\users01.dbf.bak';
RMAN> copy datafile 'd:\oracle\oradata\ora9i\users01.dbf' to
'd:\backup\datafilecopy\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> copy 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,則該命令終止,並且不植入視圖。當並行度比較高時,占用的計算機資源較多,但備份操作完成速度較快。缺省情況下將啟用對物理損壞的錯誤檢查。有關在備份過程中遇到的損壞數據文件塊的信息將記錄在控制文件和警報日志中。
1.5.2 恢復
查看所有的Copy鏡像拷貝:
RMAN> list copy;
數據文件副本還原:
還原時可以offline數據文件所屬表空間,然后利用OS 拷貝命令恢復副本。
還可以用 restore (datafile num) from datafilecopy 命令來從數據文件副本中還原數據文件,然后再用 recover 命令來恢復。例如:
RMAN> sql "alter database datafile 5 offline";
RMAN> restore (datafile 5) from datafilecopy;
RMAN> recover datafile 5;
RMAN> sql "alter database datafile 5 online";
注意,上面的圓括號很重要,如果沒有,restore 命令就會執行失敗。
1.6 Backup備份與恢復
Backup 備份命令生成Backup sets (備份集合),以oracle專有的格式保存,由一個完全的所有的備份片集合構成,構成一個完全備份或增量備份。
1.6.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;
使用自動備份進行恢復:
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 ARCHIVELOG 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 skip inaccessible skip readonly;
強制備份只讀的數據文件
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';
1.6.2 RESTORE/RECOVER恢復命令選項
數據庫恢復
RMAN> restore/revover database ;
表空間恢復
RMAN> restore/revover tablespace xx(wangningning) ;
默認情況下,即使丟失了只讀的數據文件,RMAN 也不會在執行完全數據庫還原操作時候還原只讀的數據文件。要在完全恢復期間還原只讀的數據文件,就必須在RESTORE命令中使用CHECK READONLY參數:
RMAN> RESTORE DATABASE CHECK READONLY;
使用自動備份恢復SPFILE/控制文件
RMAN> restore spfile/controlfile to '/xx/xx' from autobackup ;
歸檔重做日志的還原
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
數據文件副本還原
RMAN> sql "alter datafile 5 offline";
RMAN> restore (datafile 5) from datafilecopy;
RMAN> recover datafile 5;
RMAN> sql "alter datafile 5 online";
請注意,上面的圓括號很重要
與備份檢查一樣,還原操作也可以檢查是否能正常restore 或者是否該備份集是否有效。如:
RMAN> RESTORE DATABASE VALIDATE;
RMAN> VALIDATE BACKUPSET 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> blockrecover datafile 6 block 3;