天天看點

備份恢複4.1——rman備份基礎概念*

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;