整理:RMAN命令(二)

wmsok發表於2012-07-10
一、備份通道
    如果伺服器CPU資源充裕、I/O子系統沒有明顯的競爭,可以增加執行RMAN任務的伺服器程式數,以加快執行的速度.增加通道有兩種辦法:
    configure device type(隱式通道):
      configure device type disk parallelism 2 [backup type to backupset]
        ---這樣,當備份時具體哪個檔案通過哪個通道就得由ORACLE來決定了,路徑也只有使用預設路徑了。parallelism數量最多為254,然後沒有其它限制了,
           備份時多出的由快速恢復區或dbs目錄自動頂上   
    configure channel(顯示通道)
      configure channel 1 device type disk to destination '/home/oracle/disk1/';    真正通道名稱為ORA_DISK_1
      configure channel 2 device type disk to destination '/home/oracle/disk2/';    真正通道名稱為ORA_DISK_1
        ---如果這裡顯示分配了兩個通道,就得必須把parallelism設定為大於或等於這裡的數量,不然會報錯;
    *通道與並行度的關係:通道是指定的通道數量,但並行度就是執行備份過程中真正用到的通道數量。比如,設定了兩個通道,備份只備份一個資料檔案,那麼其中有一個通道就
     用不上了,這時並行度就為1.
    *要指出的時configure不能在後面跟format(10G中是可以的),但是backup 後面卻可以跟format,而且format是指定路徑+檔名的
     backup tablespace t device type disk format 'oracle/orcl11g/backup/%U'
    -------------------------------------------
    針對隱式通道的配置,我們在備份時也可以指定通道,比如:
    RMAN>backup device type disk
       2>(tablespace users channel ORA_DISK_1)
       3>(tablespace examle channel ORA_DISK_2);
RMAN> run {
2> backup as copy tablespace users channel ORA_DISK_1;
3> backup as backupset tablespace t channel ORA_DISK_2;
4> }
針對顯示的通道也可以使用上面的語句格式,只要事先把通道配置好,但顯示通道也可以上RUN中配置後立即使用,可能隱式通道應該也可以在RUN中配置,不作詳述
在RUN執行塊中可以使用allocate channel命令來突破parallelism的限制,但allocate channel後面的語句不能使用configure中的配置的通道的
    RMAN >run {
          allocate channel c1 device type disk to destination '/home/oracle/disk/';
          allocate channel c2 device type disk;
          backup
          (tablespace users,example channel c2)
          (tablespace t channel c1);
          }

二、RMAN備份片與備份集的關係
    被RMAN備份的檔案被叫做輸入檔案,共有控制檔案、歸檔日誌、引數檔案、資料檔案4類;
    備份集由備份片組成。輸入檔案與備份片之間是多對多的關係。輸入檔案與備份集之間是多對一的關係
    備份片的命名格式有兩種:傳統和OMF。傳統格式由format指定,比如%d-資料庫名,%T-年月日,%s-備份集號,%p-備份片號;
                                     OMF格式,只要使用快速恢復區或“to destination”子句即利用OMF,很多專家都推薦用這種方法
    OMF生成的檔名中第7到11一共5個字元,它表示在備份片中的輸入檔案型別,a-歸檔日誌,c-控制檔案,s-引數檔案,d-資料檔案,f-除歸檔日誌以外的任何檔案。
    這裡是有規則的,資料檔案與歸檔日誌都是單獨佔用一個備份集的,控制檔案與引數檔案可以在一起也可以分開

三、RMAN備份集的數量由以下幾個因素決定
   1、輸入檔案的數量:備份集的數量小於或等於輸入檔案數量。引數filesperset表示一個備份集可以容納的輸入檔案
   2、並行度:備份集的數量大於或等於並行度
   3、輸入檔案的種類:之前說過歸檔日誌和資料檔案只能獨佔一個備份集的,控制檔案與引數檔案可以在一起也可以分開
   4、小括號的使用:不在同一個小括號內的輸入檔案一定不在同一個備份集中,在同一個小括號內的輸入檔案不一定在同一個備份集中
     run{
         allocate channel c1 device type disk;
         allocate channel c2 device type disk;
         allocate channel c3 device type disk;
         backup (datafile 5,6) (datafile 4);
        }          -----雖然用了小括號,但是輸入檔案和通道數可以使並行度達到3,於是依從並行度規則
     與
     run{
         allocate channel c1 device type disk;
         allocate channel c2 device type disk;
         allocate channel c3 device type disk;
         backup (datafile 5,6 channel c1) (datafile 4 channel c2);
        }          -----顯然,這裡已經明確指出了通道,即使通道有3個也不行了

四、多路傳輸:在備份時,一個通道中,RMAN同時讀取多個輸入檔案的資料並將其寫入同一個備份片的操作稱為多路傳輸。讀取的輸入檔案的數量稱為多路傳輸等級
    該等級等於以下3個數中的最小值:    
    1、通道的maxopenfiles
    2、通道的輸入檔案數
    3、64或backup命令的filesperset
    如果maxopenfiles=2,輸入檔案為6,filesperset=64,那麼RMAN每次只讀兩個資料檔案,分三批寫入備份片中

五、映象複製
    backup as copy 或 configure device type disk backup type to copy
    映象複製優點:還原快  
           缺點:浪費空間,不能使用SBT,引數檔案不能生成映象複製

六、備份優化
    壓縮
    configure device type disk parallelism 4 backup type to compressed backupset;
    configure compression algorithm 'LOW'|'BASIC'|'MEDIUM'|'HIGH';
    configure compression algorithm ‘BZIP2’;
    configure compression algorithm ‘ZLIB’;
    RMAN> backup as compressed backupset tablespace system;
    分割輸入資料檔案
    RMAN >run {
          allocate channel c1 device type disk;
          allocate channel c2 device type disk;
          backup section size 100M datafile 2;
          }
七、增量追加備份:前滾映象拷貝

      工作原理:首先建立一個檔案映象拷貝,然後定期把從上次映象拷貝最大SCN以來變化的資料塊追加到映象拷貝檔案中。增量追加備份可以達到快速恢復的目的,
    如果是每天進行增量追加的話,在進行恢復的時候,我們最多應用一天的REDO資料就可以完成恢復。
      格式如下: BACKUP... FOR RECOVER OF COPY WITH TAG

  一個基礎的增量追加備份示例:簡稱basic指令碼:

RUN ...{
   RECOVER COPY OF DATABASE WITH TAG 'incr_update';
   BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update'
       DATABASE;
   }

  我們看一下整個basic指令碼的執行情況:

  第一次執行該指令碼沒有資料檔案拷貝和增量備份所以執行RECOVER COPY OF DATABASE WITH TAG 'incr_update'沒有任何結果;
         執行BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE將產生資料檔案的映象檔案拷貝。

  第二次執行該指令碼,由於第一次執行的時候BACKUP INCREMENTAL LEVEL 1…… FOR RECOVER OF COPY WITH TAG……命令產生一個映象檔案拷貝,
         但是沒有LEVEL1的增量備份,所以執行RECOVER COPY OF DATABASE WITH TAG 'incr_update'還是沒有任何結果;
         執行BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE將產生LEVEL1增量備份。

  第三次執行該指令碼,執行RECOVER COPY OF DATABASE WITH TAG 'incr_update'命令將把第二次執行該指令碼產生的LEVEL1增量備份追加到映象檔案拷貝,
         同時又產生一個新的LEVEL1增量備份檔案。

  以後再執行該指令碼都是把上次產生的LEVEL1的增量備份追加到映象檔案拷貝,然後再產生一個新的LEVEL1的增量備份檔案。如果需要恢復,我們首先恢復映象檔案拷貝和最後
    一次LEVEL1增量備份,最後應用REDO.

八、備份加密
    三種加密方式:透明模式、口令模式、雙體模式
    透明和雙體都要求將主金鑰放在wallet檔案中,wallet的路徑由sqlnet.ora宣告
    透明模式就是備份在通道的複製階段自動加密的
    口令模式最方便,不用錢包,如下:
    RMAN >set encryption on identified by "123456" only;
    RMAN >backup database
    還原:
    RMAN >set decryption identified by "123456"
    RMAN >restore database
    RMAN >recover database

九、複用備份
    即將一個備份集複製多份,同一備份集,Oracle最多可複用個
    手工指定
     RMAN> backup copies 2 datafile 4 format '/u01/app/oracle/rmanbak/d1/df_%U','/u01/app/oracle/rmanbak/d2/df_%U';   
    
    自動指定:配置下列引數
            RMAN> configure datafile backup copies for device type disk to 2;  --指定備份資料檔案副本數
            RMAN> configure archivelog backup copies for device type disk to 2;--指定備份日誌檔案副本數
   
     backup as copy #3 files copied in parallel
       (datafile 1 format '/oracle/orcl11g/product/backup/ORCL11G/disk1/df1.bak')
       (datafile 2 format '/oracle/orcl11g/product/backup/ORCL11G/disk1/df2.bak')
       (datafile 3 format '/oracle/orcl11g/product/backup/ORCL11G/disk3/df3.bak');

十、備份閃回區     

    RMAN> backup recovery area;

         使用backup recovery area時,將備份位於閃回區且未進行過備份的所有檔案,這些檔案包括完整、增量備份集、自動備份的
         控制檔案(假定使用閃回區作為備份路徑時)、歸檔日誌、資料檔案的映象副本等。閃回日誌,當前的控制檔案。聯機重做日誌不會被備份 

    RMAN> backup recovery files;

         使用backup recovery files時,將備份磁碟上未進行過備份的所有恢復檔案,而不論是否位於閃回區
         注:使用上述兩條命令時,備份目的地必須是磁帶
   
    RMAN > bacup backupset          ---備份備份集

十一、DB_FILE_NAME_CONVERT
      映象備份時指定子句DB_FILE_NAME_CONVERT來實現映象路徑轉移,該子句也是一個初始化引數,用於primary db 到standby db的資料檔案的轉換
      DB_FILE_NAME_CONVERT = ('string1' , 'string2' , 'string3' , 'string4' ...)   用string2替換string1,string4替換string3
     
      RMAN> backup as copy device type disk
         2> db_file_name_convert('oradata/orcl','bk/rmbk')
         3> tablespace users;       


十二、備份監控進度
    select case
         when opname like '%aggregate%' then
          'Total'
         else
          opname
       end opname,
       trunc(sofar * 100 / totalwork, 2) || '%' progress,
       units
  from v$session_longops
 where opname like 'RMAN%'
   and totalwork > sofar;
     

 

十三、備份相關的動態效能檢視及監控

    1.相關檢視

        v$backup_files、v$backup_set、v$backup_piece、v$backup_redolog、v$backup_spfile、v$backup_device、v$rman_configuration

        v$archived_log、v$backup_corruption、v$copy_corruption、v$database_block_corruption、v$backup_datafile
         
     2、檢視channel對應的server sessions
        使用set command id命令 查詢v$process和v$session判斷哪一個會話與之對應的RMAN通道

        --下面使用了set command id命令

        RMAN> run{
        2> allocate channel ch1 type disk;
        3> set command id to 'rman';
        4> backup as copy datafile 4
        5> format '/u01/app/oracle/rmanbak/dd_%U';}
         
        SQL> select sid,spid,client_info
          2  from v$process p ,v$session s
          3  where p.addr = s.paddr
          4  and client_info like '%id=%';
 
               SID SPID         CLIENT_INFO
        ---------- ------------ ------------------------------
               140 5002         id=rman

       --通過如下SQL獲得rman用來完成備份操作的服務程式的SID與SPID資訊:

 select sid, spid, client_info
  from v$process p, v$session s
   where p.addr = s.paddr
        and client_info like '%rman%' 

   

    3.利用crontal實現自動備份(中小型資料庫不使用恢復編錄才使用sh指令碼和crontal的)
   1) sh指令碼:
    #!/bin/bash
    #export TMP=/tmp
    #export TMPDIR=$TMP
    export ORACLE_BASE=/oracle/ora10g
    export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
    export ORACLE_SID=wolf
    #export ORACLE_TERM=xterm
    #export PATH=/usr/sbin:$PATH
    #export PATH=$ORACLE_HOME/bin:$PATH
    #export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/usr/x11R6/lib64
    #export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
    #export LD_ASSUME_KERNEL=2.6.18
    export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"
    #export PATH=.......  #自動寫
    SH_HOME=/oracle/ora10g/rmanbak
    export SH_HOME
    DATE=`date +"%Y%m%d-%H%M"`
    week=`date +"%w"`
    #-------------------------------------
    #confirm whether the oracle is runing
    #-------------------------------------
    ps -ef | grep dbw0_$ORACLE_SID | grep -v grep >>/dev/null
    #-------------------------------------
    #begin to backup
    #-------------------------------------
    if [ $? -eq 0 ]; then
       if [ $week = "0" ]; then
              rman target / @$SH_HOME/script/rman_bak_0.sql log=$SH_HOME/logs/oraclel0$DATE.log
       else if [ $week = "3" ]; then
              rman target / @$SH_HOME/script/rman_bak_1c.sql log=$SH_HOME/logs/oraclel1$DATE.log
       else
              rman target / @$SH_HOME/script/rman_bak_ld.sql log=$SH_HOME/logs/oraclel1$DATE.log
    fi
    fi
    fi

2)增量備份的指令碼
0級增量備份的sql--rman_bak_0.sql:
    run{
    allocate channel cha1 type disk;
    backup incremental level 0 format "/oracle/ora10g/rmanbak/inc0_%u_%T" tag "wolf_inc0" database;
    release channel cha1;
    }
1級累積增量備份的sql--rman_bak_1c.sql:
    run{
    allocate channel cha1 type disk;
    backup incremental level 1 cumulative format "/oracle/ora10g/rmanbak/inc1c_%u_%T" tag "wolf_inc1c" database;
    release channel cha1;
    }
1級差異增量備份的sql--rman_bak_ld.sql:
    run{
    allocate channel cha1 type disk;
    backup incremental level 1 format "/oracle/ora10g/rmanbak/inc1d_%u_%T" tag "wolf_inc1d" database;
    release channel cha1;
    }
3)在root下行crontab -e -u oracle
   30 3 * * *              /oracle/ora10g/rmanbak/script/startrman.sh >> /oracle/ora10g/rmanbak/script/crontab.log

   注:cron檔案語法:
          分     小時   日     月      星期     命令
         0-59   0-23   1-31   1-12     0-6     command     (取值範圍,0表示週日一般一行對應一個任務)


    4)[root@oradb ~]# service crond restart      

        檢查自動備份是否成功執行

        存檔退出後,你會發現在/var/spool/cron/中新增了一個名為orcl11g檔案。到此大功告成,系統會將每次備份的資訊通過mail的形式傳送給oracle使用者。
        在進行以上操作時,建議將/var/spool/cron/crontabs中其他使用者(尤其是root)的Crontab檔案進行備份,以免誤操作對系統產生影響。
        也可以這樣寫00 17 * * 1-5 “/usr/oracle/backup.sh” (週一到週五)

 
十四、RMAN的delete命令
delete backupset 102;//刪除102號備份集
delete noprompt expired backup of tablespace xxwz_data;//無提示刪除表空間的expired備份資訊。
delete obsolete;//刪除不需要的備份集
//備份時刪除原來的備份
backup archivelog all delete input;
backup archivelog sequence between 99 and 199 thread 1 delete input;
-----------------------------------------------------------------------------------------------------------------------------
    backup archivelog all delete input   備份預設目錄下所有歸檔日誌,並且刪除這個目錄下所有歸檔日誌
    backup archivelog all delete all input  備份預設目錄下所有歸檔日誌,並且刪除幾個備份目錄下所有歸檔日誌
-----------------------------------------------------------------------------------------------------------------------------
 

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