Oracle暫時結束有計劃地學習RMAN,以後根據需要再總結

louloueva發表於2009-01-19

臨近春節,年前也開始陸續把家裡歸置一下
估計這幾天體力勞動要比腦力勞動多些
也好,調節一下,老在電腦前坐著,腰痠背痛的
(腿倒是沒抽筋,看來不用補鈣)

昨天接觸了一下利用catalog來記錄RMAN相關資訊
使用catalog,可以將多個target的備份資訊儲存起來
還有眾多相應檢視幫助檢視
還有一個較重要的好處,最近在RMAN的時候沒怎麼練習
記錄run塊,run塊中包含了一個或多個RMAN指令碼
將run塊命名並儲存在catalog中,可以方便以後呼叫執行
舉例說明
RMAN> create script. sc_test1{
2> configure CONTROLFILE AUTOBACKUP off;
3> SET BACKUP COPIES 2;
4> backup as copy datafile 4;
5> configure CONTROLFILE AUTOBACKUP on; }
上面建立了一個sc_test1的rman指令碼
功能是先將自動備份控制檔案設定為off
再設定備份會生成兩份
然後對4號資料檔案進行副本拷貝
之後再將自動備份控制檔案設為on
SET BACKUP COPIES 2;這句僅僅作用於run塊內
如果要在全域性設定此引數,方法如下
RMAN> configure datafile backup copies for device type disk to 2;
這個命令是針對資料檔案備份的,把datafile換成archivelog就是設定歸檔日誌的
RMAN> configure datafile backup copies for device type disk clear;
是將此設定還原為預設值,clear引數可以用在多種設定上

繼續指令碼試驗,執行剛才建立的指令碼
RMAN> RUN {EXECUTE SCRIPT. sc_test1;}
如果指令碼內容可以正確執行,將實現剛才解釋的那些功能,否則中途會報錯

刪除指令碼
RMAN> delete script. sc_test1;

顯示已經建立的指令碼
RMAN> list all script. names;

再說一些命令
RMAN> backup datafile 4,5 FILESPERSET=1;
功能是備份4號、5號資料檔案,每個備份集中含有1個資料檔案
此命令將會生長兩個備份集,filesperset指定備份集包含檔案數

建立一個通道1
RMAN> configure channel 1 device type disk format '/home/oracle/dumptest/%U_%I';
如果不需要的時候用下面命令清除
RMAN> configure channel 1 device type disk clear;
看一段run塊指令碼
RMAN> run{
2> allocate channel c1 device type disk format '/home/oracle/dumptest/c1_%U';
3> allocate channel c2 device type disk format '/home/oracle/dumptest/test2/c2_%U';
4> allocate channel c3 device type disk format '/home/oracle/bktest/c3_%U';
5> set backup copies 3;
6> backup datafile 4,5,6 filesperset=1;
7> release channel c1;
8> release channel c2;
9> release channel c3; }
在run塊中分配了三個通道,分別儲存於不同目錄
設定備份生成3份副本,備份數4、5、6號據檔案,每個資料檔案生成一個備份集
結束前釋放了三個通道(我在10gR2中,沒加release,RMAN會自動釋放,後面會演示)
具體執行過程如下
released channel: ORA_DISK_1
allocated channel: c1
channel c1: sid=137 devtype=DISK
allocated channel: c2
channel c2: sid=143 devtype=DISK
allocated channel: c3
channel c3: sid=159 devtype=DISK
executing command: SET BACKUP COPIES
Starting backup at 19-JAN-09
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
input datafile fno=00005 name=/home/oracle/oracle/oradata/test/example01.dbf
channel c1: starting piece 1 at 19-JAN-09
channel c2: starting full datafile backupset
channel c2: specifying datafile(s) in backupset
input datafile fno=00006 name=/home/oracle/oracle/oradata/test/ts_test.dbf
channel c2: starting piece 1 at 19-JAN-09
channel c3: starting full datafile backupset
channel c3: specifying datafile(s) in backupset
input datafile fno=00004 name=/home/oracle/oracle/oradata/test/users01.dbf
channel c3: starting piece 1 at 19-JAN-09
channel c3: finished piece 1 at 19-JAN-09 with 3 copies and tag TAG20090119T165203
piece handle=/home/oracle/bktest/c3_29k57bhl_1_1 comment=NONE
piece handle=/home/oracle/bktest/c3_29k57bhl_1_2 comment=NONE
piece handle=/home/oracle/bktest/c3_29k57bhl_1_3 comment=NONE
channel c3: backup set complete, elapsed time: 00:00:05
channel c2: finished piece 1 at 19-JAN-09 with 3 copies and tag TAG20090119T165203
piece handle=/home/oracle/dumptest/test2/c2_28k57bhk_1_1 comment=NONE
(省略)
channel c2: backup set complete, elapsed time: 00:00:10
channel c1: finished piece 1 at 19-JAN-09 with 3 copies and tag TAG20090119T165203
piece handle=/home/oracle/dumptest/c1_27k57bhk_1_1 comment=NONE
(省略)
channel c1: backup set complete, elapsed time: 00:00:25
Finished backup at 19-JAN-09
released channel: c1
released channel: c2
released channel: c3
從上面過程可以看出,RMAN自動將三個資料檔案分派到三個通道進行備份
如果每個通道連線的路徑是在不同硬碟或磁帶上,可能會提高備份效率
(之所以說可能,是因為自己這邊沒試驗)
用list backupset看看生成的備份集情況
BS Key  Type LV Size
------- ---- -- ----------
1868    Full    2.13M
  List of Datafiles in backup set 1868
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  4       Full 943892     19-JAN-09 /home/oracle/oracle/oradata/test/users01.dbf
  Backup Set Copy #1 of backup set 1868
  Device Type Elapsed Time Completion Time Compressed Tag
  ----------- ------------ --------------- ---------- ---
  DISK        00:00:04     19-JAN-09       NO         TAG20090119T165203
    List of Backup Pieces for backup set 1868 Copy #1
    BP Key  Pc# Status      Piece Name
    ------- --- ----------- ----------
    1871    1   AVAILABLE   /home/oracle/bktest/c3_29k57bhl_1_1
  Backup Set Copy #2 of backup set 1868
  Device Type Elapsed Time Completion Time Compressed Tag
  ----------- ------------ --------------- ---------- ---
  DISK        00:00:04     19-JAN-09       NO         TAG20090119T165203
    List of Backup Pieces for backup set 1868 Copy #2
    BP Key  Pc# Status      Piece Name
    ------- --- ----------- ----------
    1872    1   AVAILABLE   /home/oracle/bktest/c3_29k57bhl_1_2
  Backup Set Copy #3 of backup set 1868
  Device Type Elapsed Time Completion Time Compressed Tag
  ----------- ------------ --------------- ---------- ---
  DISK        00:00:04     19-JAN-09       NO         TAG20090119T165203
    List of Backup Pieces for backup set 1868 Copy #3
    BP Key  Pc# Status      Piece Name
    ------- --- ----------- ----------
    1873    1   AVAILABLE   /home/oracle/bktest/c3_29k57bhl_1_3
(另外兩個資料檔案備份資訊省略)
此命令生成的備份集有多個備份片(因為設定了copies 3)
刪除備份集會將三個備份片都刪除,要刪除單一備份片,用如下命令
RMAN> delete backuppiece 1879;

再看一個run塊
RMAN> run{
2> allocate channel ch1 device type disk
3> format '/home/oracle/bktest/%U','/home/oracle/dumptest/b_%U';
4> set backup copies 2;
5> backup datafile 4;}
執行過程
released channel: ORA_DISK_1
allocated channel: ch1
channel ch1: sid=137 devtype=DISK
executing command: SET BACKUP COPIES
Starting backup at 19-JAN-09
channel ch1: starting full datafile backupset
channel ch1: specifying datafile(s) in backupset
input datafile fno=00004 name=/home/oracle/oracle/oradata/test/users01.dbf
channel ch1: starting piece 1 at 19-JAN-09
channel ch1: finished piece 1 at 19-JAN-09 with 2 copies and tag TAG20090119T173119
piece handle=/home/oracle/bktest/2bk57dr8_1_1 comment=NONE
piece handle=/home/oracle/dumptest/b_2bk57dr8_1_2 comment=NONE
channel ch1: backup set complete, elapsed time: 00:00:05
Finished backup at 19-JAN-09
released channel: ch1  (注意這裡RMAN自動釋放通道,但還是建議填寫上釋放語句)
此run塊指令碼,是利用backup copies設定,以及為通道設定多個路徑,來分別儲存備份
如果copies設定的數超過了format定義的路徑數,將會輪流使用各個路徑
比如設定copies為4,路徑為bktest和dumptest,就可能產生下面結果
(主要注意最後一個數字,它表示備份片號)
/home/oracle/bktest/2ek57ept_1_1
/home/oracle/dumptest/b_2ek57ept_1_2
/home/oracle/bktest/2ek57ept_1_3
/home/oracle/dumptest/b_2ek57ept_1_4

再總結一個RMAN中很重要的備份方式,分級備份
利用分級備份可以更靈活的制定備份策略
其中,增量備份可以有效節省備份所需時間
增量備份可以根據資料塊的SCN來判斷自上次父級備份以來,其是否發生變化
有變化則備份,無變化則跳過
先來介紹level 0備份,它相當於一個全備份
但全備份無法用來作為level 1增量備份的基礎
level 0增量備份命令如下
RMAN> backup incremental level=0 database [plus archivelog];#歸檔日誌選項非必須
增量備份中,還有兩種
差異備份(differential backup),備份自上次同級或更高階增量備份後所有變化的資料塊
累積備份(cumulative backup),備份自上次更高階增量備份後所有變化資料塊
對比兩者,差異備份所需要的磁碟空間較少,累計備份所用的恢復時間較少
繼續試驗
來到資料庫這邊,增加一些資料庫物件或資料,我是建立了一個新表
SQL> create table t_test1 tablespace ts_test as select * from all_tables;
SQL> commit;
回到RMAN,執行一個level 1的差異增量備份
RMAN> BACKUP INCREMENTAL LEVEL 1 [DIFFERENTIAL] DATABASE;
[DIFFERENTIAL]不是必須的
執行後,可以到相應目錄檢視生成備份檔案
2fk57gid_1_1_1969292173,這個是level 0的,超過600M
2hk57hm7_1_1_1969292173,這個是level 1的,1M多
再改變一些資料,再來分別做差異和累積level 1備份
SQL> create table t_test2 as select * from emp;
SQL> commit;
為了減少RMAN比對資料塊是否發生改變的時間
上面的表,是在users表空間建立的,先進行一次level 1的差異增量
RMAN> BACKUP INCREMENTAL LEVEL 1 TABLESPACE USERS;
生成了一個不到100K的備份集,再來做個level 1的累積增量備份
再改變users表空間,用類似方法增加t_test3表
然後再進行差異增量,命令略,因為兩次增加的表內容一直,備份集還是不到100K
好,來一次累積增量備份
RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE TABLESPACE USERS;
這次生成了一個120K的備份集
(不是兩個差異備份集的和,因為某些資料塊可能所剩空間較大,還能繼續加入資料)

來簡單走一下利用增量備份進行恢復,先把users資料檔案刪除,模擬故障
shutdown abort強行關閉,再startup mount資料庫(無法open),先來restore相應表空間
RMAN> restore tablespace users;
執行過程資訊略,RMAN利用剛才的level 0備份來還原了表空間,再來recover
RMAN> recover tablespace users;
Starting recover at 19-JAN-09
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00004: /home/oracle/oracle/oradata/test/users01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/dumptest/2ok57iii_1_1_1969292173
channel ORA_DISK_1: restored backup piece 1
piece handle=/home/oracle/dumptest/2ok57iii_1_1_1969292173 tag=TAG20090119T185201
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
starting media recovery
media recovery complete, elapsed time: 00:00:02
Finished recover at 19-JAN-09
此時資料庫已經可以open了
備份檔案2ok57iii_1_1_196929217是剛才生成的累積增量備份
再試驗一次,這次先把累積增量備份刪除,其它步驟略,recover過程如下
RMAN> recover tablespace users;
Starting recover at 19-JAN-09
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00004: /home/oracle/oracle/oradata/test/users01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/dumptest/2hk57hm7_1_1_1969292173
channel ORA_DISK_1: restored backup piece 1
piece handle=/home/oracle/dumptest/2hk57hm7_1_1_1969292173 tag=TAG20090119T183653
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting incremental datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00004: /home/oracle/oracle/oradata/test/users01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/dumptest/2mk57icq_1_1_1969292173
channel ORA_DISK_1: restored backup piece 1
piece handle=/home/oracle/dumptest/2mk57icq_1_1_1969292173 tag=TAG20090119T184857
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting incremental datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00004: /home/oracle/oracle/oradata/test/users01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/dumptest/2nk57ih5_1_1_1969292173
channel ORA_DISK_1: restored backup piece 1
piece handle=/home/oracle/dumptest/2nk57ih5_1_1_1969292173 tag=TAG20090119T185117
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
starting media recovery
media recovery complete, elapsed time: 00:00:03
Finished recover at 19-JAN-09
資料庫可以open,此過程中用到的檔案都是差異增量備份生成的
嗯,這些就是今天要練習的內容

RMAN作為Oracle主要的備份恢復工具,其功能豈是個人幾天學習就能全部涉及的呢?
最近對RMAN的練習,也不過是屬於初級程度的接觸
主要目的是為了對RMAN的使用有個大概的瞭解,對一些相關概念有個初步認識
每天具體地學習RMAN的過程到此告一段落
今後如果碰到不太理解或有必要總結的地方,會再進行記錄
(個人覺得閃回功能和其相關設定不算是包換在RMAN中)
至於明天開始的計劃……目前還沒有確定
隨著春節臨近,要開始準備一些非學習的事情
而春節期間,個人也會用更多的時間放鬆、整理一下
也許每天Oracle的學習或實踐會比較雜,沒有一個相對固定的計劃吧 ◎◎"

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/556359/viewspace-541493/,如需轉載,請註明出處,否則將追究法律責任。

相關文章