1、RMAN備份基礎:
rman元件:
1、目标資料庫:就是要進行備份、轉儲、恢複的資料庫。
2、伺服器程序:一般要進行rman操作,要建立兩個伺服器程序: 預設伺服器程序用于解析rman指令,并且生成隐含執行的PL/SQL塊;輪詢伺服器程序用于檢測備份、轉儲、恢複是否已經完成。
3、通道:當rman需要進行備份、轉儲、恢複資料庫的時候,需要在儲存設備(磁盤,錄音帶)目标資料庫之間建立連接配接,這條連接配接就叫做通道。一般在儲存設備上執行IO時,總會配置設定相應的通道。既可以手動配置設定通道,也可以由rman自動配置設定。
4、rman資料庫(recovery manager repository) 和 rman中繼資料(recovery manager matedate):rman中繼資料是指在備份、轉儲、恢複中所使用的資料。rman中繼資料的集合稱為rman資料庫。當用rman進行brr時,oracle将rman中繼資料存放到目标資料庫的控制檔案中去。如果配置了恢複目錄。
5、恢複目錄:用于存放rman中繼資料,當控制檔案記憶體在的rman中繼資料達到了參數control_file_record_keep_time的時間後,其中繼資料可能會被覆寫,進而導緻之前的備份不能使用,通過使用恢複目錄,可以永久保留需要的rman中繼資料,另外,在恢複目錄中還可以存放存儲腳本。記住,如果要用恢複目錄存放rman中繼資料,那麼一定要将恢複目錄方案放在與目标資料庫不同的資料庫中。
6、媒體管理層:媒體管理層是rman與 錄音帶磁盤進行io操作的軟體層。
7、rman包:當執行rman指令時,伺服器程序首先會将rman指令解析為PL/SQL塊,然後伺服器程序通過執行該PL/SQL塊完成rman指令任務。RMAN指令是由三個plsql包來完成的:
dbms_backup_restore——用于執行備份、轉儲、恢複操作的指令backup、copy、restore、recover等都被解析為對該包的調用;
dbms_revcat——用于維護恢複目錄的指令 resync catalog,catalog等都被解析為對該包的調用;
dbms_revman——查詢恢複目錄和目标資料庫的控制檔案指令 list ,report指令都被解析為對該包的調用。
8、資料庫内rman相關參數:
SQL> show parameter db_recover
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/app/oracle/fast_recovery_area
db_recovery_file_dest_size big integer 4122M
rman的特點:
rman可以備份資料庫、表空間、資料檔案、控制檔案、歸檔日志、參數檔案(spfile),但是不能備份線上日志(rodo log),pfile、密碼檔案。還要注意因為rman是伺服器程序完成的,是以要求目标資料庫必須處于mount或者open狀态。
可以預定義頻繁執行的備份或者恢複操作:我們可以講備份恢複相關的rman操作放到恢複目錄中去,存儲為 存儲腳本。
跳過未使用塊:這個就比使用者管理的備份恢複先進的多。可以生成較少的備份資料,節約空間。
執行增量塊級備份:這樣在生成備份集(backup set )時,隻備份已經使用的資料塊的前提下,隻備份上次備份以來改變的資料塊,節約了時間空間。
指定備份限制:在使用rman備份時,可以指定備份集的最大尺寸和備份片(backup piece)的最大尺寸,通過限制備份片的最大尺寸,可以有效的将備份集分布到不同的錄音帶上。
在備份時自動檢測壞塊:我們知道在使用使用者管理的備份恢複時,即使資料檔案中出現了壞塊,也可以備份資料檔案,如果需要檢查是否有壞塊,那就需要使用DBVERIFY工具進行檢查。當使用rman進行備份時,伺服器程序自動将壞塊資訊寫入動态性能視圖(好幾個視圖裡都寫入了)通過查詢v$backup_corruption我們就可以檢視backup指令所檢測到的壞塊。通過查詢v$copy_corruption視圖可以看到執行copy或者backup
as copy 指令所檢測到的損壞塊。
自動使用并行化:如果伺服器有多個cpu,那麼執行前可配置設定多個通道,配置設定後,rman會啟用多個伺服器程序并行執行備份恢複操作。
運作rman(連接配接資料庫):
這個既可以在em上,也可以在指令行中運作。在進行備份恢複時,必須連接配接到目标資料庫,如果需要使用恢複目錄存放rman中繼資料,那麼還需要連接配接到恢複目錄資料庫。如果使用了輔助資料庫,那麼還需要連接配接到輔助資料庫。
如果是直接在目标資料庫中使用控制檔案存放rman中繼資料,那就不需要連接配接到恢複目錄資料庫,那就要指定nocatalog選項,通過target選項指定目标資料庫。連接配接到目标資料庫:rman target sys/liu123@ mynewdb nocatalog ——注意必須啟動監聽:lsnrctl
start。
如果要連接配接目标資料庫和恢複目錄資料庫,先通過target連接配接到目标資料庫,在通過catalog選項,連接配接到恢複目錄資料庫,連接配接目标資料庫用sysdba 或者sysoper連接配接;連接配接恢複目錄資料庫時,必須以恢複目錄所有者身份進行連接配接。
rman target sys/liu123@mynewdb catalog rman/rman@rcat
若是在rman指令行中:>rman 進入rman指令行,RMAN> connect target sys/liu123@mynewdb 提示連接配接到目标資料庫;>connect catalog rman/rman@rcat 提示連接配接到恢複目錄資料庫。
如果是要連接配接輔助資料庫必須都用sysdba和sysoper使用者進行連接配接,用auxiliary選項:rman target sys/liu123@mynewdb auxiliary sys/liu456@aux;
若是在rman指令行中:>rman 進入rman指令行,RMAN> connect target sys/liu123@mynewdb 提示連接配接到目标資料庫;>connect auxiliary sys/liu456@aux提示連接配接到輔助資料庫。
rman指令:
rman指令分為獨立指令和作業指令,獨立指令顧名思義就是能單獨執行的指令,除了set ,switch等少數指令之外,多數rman指令都可以單獨執行。來看幾個常見的單獨執行指令:
關閉資料庫:RMAN> shutdown immediate ——資料庫關閉。
啟動資料庫:RMAN> startup
備份users表空間:RMAN >backup format '/u01/app/oracle/.../users_bp.bak' tablespace users;
再來看看作業指令:當使用多個rman指令完成某項任務時,應當以作業指令的方式執行這些指令。執行作業指令時,必須将這些相關的rman指令放在run塊中。除了(connect 、create/delete/update catalog、create/delete/update script、list)rman指令。其他rman指令都可以被包含在run塊内。示例:
RMAN >run {allocate channel d1 type disk;
backup format '/u01/..../usersbp.bak' tablespace users;
release channel d1;
}
在rman提示符下還可以運作sql指令。但是必須以sql關鍵詞開始,并且sql語句字元串需用單引号引住。
RMAN> sql 'alter system switch logfile'; 注意rman中不能運作select。如果sql語句中包含單引号,那需要用兩個單引号,此時的sql整個語句用雙引号
RMAN> sql "create tablespace user03 datafile ''/u01/app/.../user.dbf'' size 5m ";
運作存儲腳本:當使用恢複目錄存放rman資料庫時,可以在恢複目錄中建立存儲腳本,建立後就可以在run塊内運作。
RMAN > run {execute script s1;}
運作作業系統指令:在run塊内運作,在os指令前加host,示例:RMAN > run { host "dir /d:\backup";}
配置rman環境:
配置自動通道并行度:在rman進行備份、轉儲、恢複時,預設情況下會在目标資料庫上非配一個 伺服器程序,并由該伺服器程序完成brr操作。通過使用configure device type 。。 prarllelism integer可以配置通道并行度。示例:
RMAN > configure device type disk parallelism 3 ;
RMAN > configure device type sbt parallelism 3;
配置所有通道的備份檔案格式:預設情況下,rman會自動為disk配置設定一個通道,并沒有任何選項。通過配置自動通道,可以指定所有通道的備份檔案格式。示例:
RMAN > configure channel device type disk format 'd:\backup\ %d_%s_%p.bak';
配置特定通道的備份檔案格式:當配置自動通道時,如果不指定通道号,則會配置所有通道,如果要配置特定通道,則可以指定通道号。示例:
RMAN> configure channel 1 device type disk format 'd:\backup\%d_%s_%p.bak';
RMAN> configure channel 2 device type disk format 'd:\backup\%d_%s_%p.bak';
配置預設儲存設備:預設情況下rman的儲存設備為disk。但是可以改變,示例:
RMAN > configure default device type to sbt ;
配置備份集和備份片的最大尺寸:注意當配置備份集最大尺寸的時候,必須確定其尺寸可以容納最大資料檔案的備份集。
RMAN > configure maxsetsize to 1g;
預設情況,每個備份集隻包含一個備份片檔案,通過配置備份片的最大尺寸,可将一個備份集劃分為幾個相對小的備份片檔案,并将這些備份片檔案分布到多個裝置上,示例:RMAN > configure channel device type disk maxpiecesize 500M;
配置備份優化:備份優化隻是用與 backup database , backup archivelog all/like 、 backup backupset all 指令。預設情況下rman進制備份優化。激活備份優化:
RMAN > configure backup optimization on ;
配置多重備份:預設rman備隻生成一個備份片副本,為了生成多個備份片副本,可以配置多重備份,示例:
RMAN > configure datafile backup copies for device type disk to 3;
配置免除表空間:預設情況下,backup tablespace 指令會備份除了臨時表空間外的所有表空間。如果某些表空間不需要備份,可以在rman備的時候免除這些表空間:
RMAN > configure exclude for tablespace user03;
配置備份備援政策:通過配置備份備援政策。可以使得rman将早期備份标記為陳舊,并且使用delete obsolete 指令可以删除陳舊備份。示例:
RMAN> configure retention policy to redundancy 2 ;
配置輔助執行個體的資料檔案名:當使用rman執行表空間時間點恢複(tspitr)或者複制資料庫時,可能需要設定輔助執行個體資料檔案名。示例:
RMAN> configre auxname for datafile 2 to ‘d:\auxi\df_2.dbf’;
配置快照控制檔案名:當重新同步恢複目錄或者備份控制檔案時,rman需要建立快照控制檔案。在windows平台,快照控制檔案的預設名為:%ORACLE_HOME%\database\snfcSID.ora。改變控制檔案的名稱和位置:
RMAN > configure snapshot controlfile name to 'd:\oracle\ora10\snfcDEMO.ora';
顯示rman配置:
顯示目前rman環境配置。用 指令:RMAN >show all;
顯示預設裝置類型: RMAN > show default device type;
顯示自動通道配置: RMAN> show channel for device type disk;
顯示備份備援政策:RMAN> show retention policy;
顯示備份優化:RMAN > show backup optimization;
顯示快照控制檔案:RMAN> show snapshot controlfile name;
顯示備份集最大尺寸:RMAN>show maxsetsize;
顯示資料檔案多重備份:RMAN> show datafile backup copies;
顯示控制檔案多重備份:RMAN> show archivelog backup copies;
清除rman配置:如果要将rman配置修改為預設配置,則可以使用 clear選項清除相應的rman配置。下面以将備份備援政策修改為預設配置為例,說明rman配置的方法:
RMAN > configure retention policy clear ;
2、rman備份:
rman備份可用兩種格式存儲:備份集(backup set ) 和 映像副本(image copy)。
說說備份集和備份片吧,一個備份集可以存儲好幾個資料檔案,隻存儲有資料的塊,不存儲空快;備份片是用于存儲備份資訊的二進制檔案,每個備份片對應一個作業系統檔案,預設情況下一個備份集隻有一個備份片,如果将一個備份集存儲到多個裝置上,那可以将備份集劃分為多個備份片。
映像副本:類似于使用者管理備份出來的資料檔案備份。占用空間與源檔案一樣大小。隻能 備到磁盤,不能到錄音帶。
建立備份集:
備份片的檔案名格式:
%c——當生成多重備份時,用于生成備份片的副本号。 ——如果要生成多個備份片副本,這個是必須有的。
%d——用于指定資料庫名。
%e——用于指定歸檔日志序列号。
%p——用于指定備份集内備份片的編号。 ——如果建立多個備份片,這個是必須有的。
%s——用于指定備份集編号。 ——這個是必須有的。
%N——用于指定表空間名稱。
%f——用于指定絕對檔案号。
1、完全資料庫備份集:是指使用backup database 指令備份資料庫的所有資料檔案和控制檔案的方法。完全資料庫備份又包括一緻性備份和非一緻性備份。
一緻性備份:既适用于archivelog模式,也适用于noarchivelog模式。操作:
C;\> rman target sys/liu123@mynewdb nocatalog;
RMAN> shutdown immediate
RMAN> startup mount
RMAN> backup database format =' d:\backup\%d_%s.dbf';
RMAN> sql ' alter system archive log current';
當執行backup database 指令時不僅會備份所有的資料檔案,還會自動備份控制檔案。
非一緻性備份:這個是指在open狀态下備份所有的資料檔案和控制檔案,隻适用于archivelog模式:
免除表空間:正常是除了臨時表空間都備,但是如果有類似于隻讀表空間這樣的變化很少的表空間,可以設定不備份。
設定:
RMAN> configure exclude for tablespace user03;
2、表空間備份集:是指用backup tablespace 指令備份一個或多個表空間的方法,注意備份表空間隻适用于archivelog模式,并且要求資料庫必須處于open狀态。示例:RMAN >backup tablespace user03 format='d:\backup\%N_%s.dbf';
3、資料檔案備份集:是指用backup datafiel備份一個或多個資料檔案的方法,資料庫既可以處于mount狀态,也可以處于open狀态。示例:
RMAN > backup datafile 5 format ='d:\bakup\%N_%f_%s.dbf';
4、控制檔案備份集:示例:RMAN>backup current confrolfile format='d:\backup\%d_%s.ctl';
注意當備份資料檔案1時,自動備份目前控制檔案,當備份其他資料檔案時,通過指定include current controlfile 選項可以同時備份控制檔案。示例:
RMAN > backup datafile 5 format =‘d:\backup\%d_%s.dbf’ include currrent controlfile;
5、spfile備份集:示例:RMAN> backup spfile format='d:backup\%d_%s.par';
6、歸檔日志備份集:示例:RMAN>backup format =‘d:\backup\%d_%s.arc’ archivelog from time 'sysdate -1 ' until time 'sysdate';
7、并行化備份集:應該為每個備份集配置設定一個通道,(可以用configure指令配置并行度,也可以使用allocate channel指令手工配置多個通道)
RMAN> configure device type disk parallelism 3;
RMAN> backup database format ='d:\backup\%d_%s.dbf';
RMAN> configure device type disk clear;
8、建立多重備份:通過backup指令後帶有copies選項,可以指定生産多重備份副本,以備份users表空間,生産三個備份副本為例:
RMAN> backup copies 3 tablespace users format= 'd;\bak;%N_%s.dbf , 'd:\bak2\%N_%s.dbf ' , 'd:\bak3\%N_%s.dbf' ;
9、備份備份集:是指用backup backupset 指令備份已存在的備份集的方法。下面将編号問32的備份集備份到d:\bak1 目錄下:
RMAN> backup backupset 32 format=‘d:\bak1\%d_%s.bak’;
10、建立多個備份片:注意當建立多個備份片時,必須指定%p比對符。示例:
RMAN> configure channel device type sbt maxpiecesize 4G;
RMAN> backup device type sbt format '%d_%s_%p.dbf' database;
11、建立壓縮備份集:通過使用backup 指令的as compressed backupset 選項,可以有效地利用二進制壓縮特征,注意這樣好處是節省空間,但是壞處是增加了cpu的開銷。 RMAN > backup as compressed backupset tablespace users format = ' d:\backup\%d_%s.dbf';
12、備份資料檔案和歸檔日志:當使用backup指令備份資料檔案時,通過制定 plus archivelog選項同時備份歸檔日志:
RMAN> backup format ’d:\backup\%d_%s.dbk‘ tablespace user01 plus archivelog;
13、制定 備份集标記:預設情況下rman會自動為備份集提供标記,為了給備份集提供更有意義的名稱,可以使用tag選項指定備份集标記,示例:
RMAN > backup format ’d:\backup\%d_%s.bak‘ tablespace users tag='users';
建立映像副本
映像副本資訊會被記載到RMAN資料庫,隻能基于資料檔案,控制檔案,歸檔日志建立映像副本,而不能基于spfile建立映像副本,隻能在磁盤上建立,不能在錄音帶上建立。10g以前用的是copy指令,10g後用的是backup指令的as copy選項,
建立資料檔案映像副本:
示例:RMAN> backup as copy format = 'd:\backup\df_5.dbf' datafile 5;
或者: RMAN> copy datafile 5 to ’d:\backup\df_5.dbf‘;
建立控制檔案映像副本:
RMAN> backup as copy format ='d:\backup\demo.ctl' currnt controlfile;
RMAN> copy current controlfile to 'd:\backup\demo.ctl';
建立歸檔日志映像副本:
示例:RMAN> backup as copy format = 'd:\backup\archive\arc20.log' archivelog sequence 20;
RMAN> copy archivelog 'd:\demo\archive\arc00020_0538067512.001' to 'd:backup\cachive\arc20.log';
并行化建立映像副本:就和并行化備份集差不多,可以配置設定多個通道,既可以使用configure指令配置并行度。也可以使用allocate channel手工配置多個通道,為了使用并行化映像副本,不僅需要配置設定多個通道,而且應該在一個backup as copy 或者copy指令下備份所有檔案。下面以備份資料檔案5、6、7為例:
RMAN >configure device type disk parallelism 3 ;
RMAN >backup as copy format='d:\backup\df_%f.dbf' datafile 5,6,7;
RMAN > configure device type disk clear;
指定映像副本标記:預設情況下rman會自動為映像副本提供标記,為了給映像副本提供更有意義的名稱,可以使用tag選項指定備份集标記,示例:
RMAN > backup as copy format=’d:\backup\df_%f.dbf‘ datafile 5 tag_df_5;
RMAN> copy datafile 5 to 'd:\backup\df_df_%f.dbf' tag=df_5;
3、rman顯示備份資訊:
當使用rman備份操作時,rman資料庫資訊會被存放的目标資料庫的控制檔案中。
通過查詢目标資料庫的動态性能視圖,可以取得rman資料庫的相關資訊。
1、v$archived_log .該動态性能視圖用于顯示所有歸檔日志映像副本的資訊。
SQL> select sequence#,name,first_change# from v$archived_log where status='A';
2、v$backup_datafile 該動态性能視圖用于顯示控制檔案和資料檔案的備份集資訊,通過在視圖v$backup_datafile 、 v$backup_piece之間連接配接查詢。可以顯示特定資料檔案的備份片的資訊。例如,下面顯示所有資料檔案的備份片資訊為例。書面使用該視圖的方法:
SQL> select a.file# , b.handle, a.block*a.block_size byte from v$backup_datafile a, v$backup_piece b where a.set_stamp=b.set_stamp and b.status='A';
file#用于辨別資料檔案編号。其中0表示控制檔案,handle辨別備份片對應的檔案名。byte辨別資料檔案備份在備份片内占用的空間。set_stamp用于唯一标示備份集的數字值。
3、v$backup_redolog.該動态性能視圖用于顯示歸檔日志備份集的資訊。每個歸檔日志備份集可以包含一個或者多個歸檔日志。通過在v$backup_piece / v$backup_redolog 之間進行連接配接查詢。可以顯示備份片檔案所包含的歸檔日志備份資訊。
SQL> select distinct a.handle, b.sequence#, b.first_change#,b.blocks from v$backup_piece a, v$backup_redolog b where a.set_stamp=b.set_stamp and a.status='A';
handle辨別備份片對應的檔案名,sequence#辨別日志序列号,blocks用于辨別被備份的日志塊個數。
4、v$backup_set 和 v$backup_piece .v$backup_set用于顯示備份集的詳細資訊,v$backup_piece用于顯示備份片的詳細資訊。通過而知之間的連結查詢,可以顯示備份集所對應的備份片的資訊。
SQL> select b.handle, a.backup_type, a.pieces , a.elapsed_seconds form v$backup_set a, v$backup_piece b where a.set_stamp=b.set_stamp and b.status='A';
backup_type用于顯示備份片類型。(D:資料檔案完全備份。 I : 資料檔案增量備份。 L: 歸檔日志備份。) pieces 用于辨別備份片個數,elapsed_seconds用于辨別備份的總開銷時間。
5、v$backup_corruption 用于顯示在執行backup名利時所檢測的損壞資料塊資訊。顯示backup所檢測到的所有損壞資料塊的資訊示例:
SQL>select file# , block#, blocks, marked_corrupt from v$backup_corruption;
其中file#辨別損壞塊所在的資料檔案編号。block#用于辨別損壞塊的其實塊編号。blocks用于辨別被損壞的連續塊個數。marked_corrupt用于辨別塊是否已經被資料塊标記問損壞值為YES或NO。
6、v$copy_corruption :該動态性能視圖用于顯示當執行copy指令時所檢測到的損壞資料塊資訊。
SQL> select file#, block#, blocks marked_corrupt from v$copy_corruption;