基於Linux下 Oracle 備份策略(RMAN)

us_yunleiwang發表於2013-12-05

--**********************************

-- 基於Linux Oracle 備份策略(RMAN)

--**********************************

 

     Oracle 備份與管存在熱備,冷以及邏輯備份之外,使用最多的莫於使用RMAN備份與。而制定RMAN備份

是基於庫丟失的容忍程度,即恢策略制定。在下面的備份策略中,出的是一通用的備份策略。在該備份策略中,使用了catalog

保持備份本以及備份資訊。在實際環境中根據具體的情況對行相調整。

 

一、步

    1.認備份可用空以及備份,根據需要建相檔案

   

    1.賬戶建一connect.rcv檔案包含接到target catalog資訊

   

    2.建通用的指令碼用於過舊備份備份控制檔案以及備份歸檔日誌

        global_del_obso      --過舊備份

        global_bkctl         --備份控制檔案

        global_arch          --備份歸檔日誌

   

    3.0,1,2增量備份

        指令碼中均包含第2步的3指令碼,先調global_del,然後做增量備份,最後備份歸檔日誌global_arch和控制檔案global_bkctl

       

    4.inc0.rcv,inc1.rcv,inc2.rcv

        檔案容包含調 @@/

/connect.rcv以及run{execute global script scriptname;}exit;

       

    5.編輯4步的三檔案分別為inc0.sh,inc1.sh,inc2.sh

        nohup  $ORACLE_HOME/bin/rman  cmdfile=/u03/bk/scripts/inc1.rcv log=/u03/bk/scripts/inc0.logappend &

   

    6.使用crontab制定備份計劃   

 

二、具體實現

    演示境:

                    CentOS release 4.6 (Final) + Oracle 10g

        標數      austin

        錄數:   david

        備份        /u03/bk

        接指令碼所在路/u03/bk/scripts

        注:聽需要配置好且已啟動

   

    1.接指令碼

        connect.rcv檔案

            connect catalog rman/rman@david;

            connect target sys/oracle@austin;

        catalog的通用指令碼

            rman cmdfile=/u03/bk/scripts/connect.rcv --(rman中使用外部指令碼)

            rman catalog rman/rman@david target sys/oracle@austin   --使用指令碼接後建通用指令碼

 

    2.建立通用指令碼

        --除不必要的備份

            RMAN> create global script global_del_obso  comment 'A script for obsolete backup and delete it' {

            2> crosscheck archivelog all;

            3delete noprompt expired archivelog all;

            4allocate channel ch1 device type disk;

            5delete noprompt obsolete recovery window of 7 days; 

            6> release channel ch1;

            7> }

       

        --備份控制檔案指令碼

            RMAN> create global script global_bkctl comment 'A script for backup control file'{

            2allocate channel ch1 device type disk;

            3backup as compressed backupset

            4current controlfile reuse

            5> format='/u03/bk/backupctl.ctl'

            6> tag='bkctl';

            7> release channel ch1;

            8> }

       

        --備份歸檔日誌指令碼

            RMAN> create global script global_arch comment "backup archivelog and then delete it" {

            2allocate channel ch1 device type disk;

            3allocate channel ch2 device type disk;

            4sql "alter system archive log current";    --歸檔當前的機日誌

            5set limit channel ch1 readrate=10240;        --(取速率10M)            

            6set limit channel ch1 kbytes=4096000;        --(備份片的大)   

            7backup as compressed backupset

            8> format='/u03/bk/arch_%d_%U'

            9> tag='bkarch'

            10archivelog all delete input;

            11> release channel ch1;

            12> release channel ch2;

            13> }

       

        --使用list看所有的已建立的全域性指令碼

            list global script names;               --(列出所有的指令碼)

            delete globals script script_name;      --(除指令碼)

           

            RMAN> list global script names;

 

            List of Stored Scripts in Recovery Catalog

                        

                Global Scripts

                        

                   Script Name

                   Description

                   -----------------------------------------------------------------------

                   global_arch

                   backup archivelog and then delete it

           

                   global_bkctl

                   A script for backup control file

            

                   global_del_obso

                   A script for obsolete backup and delete it

   

    3.012增量備份指令碼(注:每指令碼備份會執過舊備份,指令碼尾部會調用另外兩個指令碼來備份歸檔日誌及控制檔案)

        --0增量備份

            RMAN> create global script global_inc0 comment "backup database as incrmental level 0"{

            2execute global script global_del_obso;

            3allocate channel ch1 device type disk;

            4allocate channel ch2 device type disk;

            5set limit channel ch1 readrate=10240;

            6set limit channel ch1 kbytes=4096000;

            7set limit channel ch2 readrate=10240;

            8set limit channel ch2 kbytes=4096000;

            9backup as compressed backupset

            10> incremental level 0 database

            11> format='/u03/bk/inc0_%d_%U'

            12> tag='inc0';

            13> release channel ch1;

            14> release channel ch2;

            15execute global script global_arch;

            16execute global script global_bkctl;

            17> }

           

        --1增量備份       

            RMAN> create global script global_inc1 comment "backup database as incrmental level 1"{

            2execute global script global_del_obso;

            3allocate channel ch1 device type disk;

            4allocate channel ch2 device type disk;

            5set limit channel ch1 readrate=10240;

            6set limit channel ch1 kbytes=4096000;

            7set limit channel ch2 readrate=10240;

            8set limit channel ch2 kbytes=4096000;

            9backup as compressed backupset

            10> incremental level 1 database

            11> format='/u03/bk/inc1_%d_%U'

            12> tag='inc1';

            13> release channel ch1;

            14> release channel ch2;

            15execute global script global_arch;

            16execute global script global_bkctl;

            17> }

 

        --2增量備份       

            RMAN> create global script global_inc2 comment "backup database as incrmental level 2"{

            2execute global script global_del_obso;

            3allocate channel ch1 device type disk;

            4allocate channel ch2 device type disk;

            5set limit channel ch1 readrate=10240;

            6set limit channel ch1 kbytes=4096000;

            7set limit channel ch2 readrate=10240;

            8set limit channel ch2 kbytes=4096000;

            9backup as compressed backupset

            10> incremental level 2 database

            11> format='/u03/bk/inc2_%d_%U'

            12> tag='inc2';

            13> release channel ch1;

            14> release channel ch2;

            15execute global script global_arch;

            16execute global script global_bkctl;

            17> }

       

        --rman檢驗rman的指令碼global_inc0global_inc1global_inc2,RMAN動檢查,下面的句用來執行指令碼(檢驗)

            RMAN> run{

            2execute global script global_inc0;

            3execute global script global_inc1;

            4execute global script global_inc2;

            5> }

       

        --備份成情

            list backupset summary;

 

    4.建立shell指令碼,linux動執行指令碼

        a. vi inc0.rcvinc1.rcv ,inc2.rcv   --注意不同的檔案行不同的備份指令碼

            @@/u03/bk/scripts/connect.rcv       --(rman下的指令碼去調用其他指令碼用@@)(調用指令碼不需要分)

            run{

            execute global script gloal_inc0;

            }

            exit;

    

        b. 編輯shell檔案   

            vi inc0.sh

                nohup  $ORACLE_HOME/bin/rman  cmdfile=/u03/bk/scripts/inc0.rcvlog=/u03/bk/scripts/inc0.log append &

            vi inc1.sh

                nohup  $ORACLE_HOME/bin/rman  cmdfile=/u03/bk/scripts/inc1.rcvlog=/u03/bk/scripts/inc0.log append &

            vi inc2.sh

                nohup  $ORACLE_HOME/bin/rman  cmdfile=/u03/bk/scripts/inc2.rcvlog=/u03/bk/scripts/inc0.log append &

       

            --注意:nohup&表示指令碼放入後臺

    

        c.使用crontab建立一個備份計劃

        crontab -e  

            #min    hour    date  mon  day(星期)    command

            30        1      *     *    0           /u03/bk/scripts/inc0.sh

            30        1      *     *    1           /u03/bk/scripts/inc2.sh

            30        1      *     *    2           /u03/bk/scripts/inc2.sh

            30        1      *     *    3           /u03/bk/scripts/inc2.sh

            30        1      *     *    4           /u03/bk/scripts/inc1.sh

            30        1      *     *    5           /u03/bk/scripts/inc2.sh

            30        1      *     *    6           /u03/bk/scripts/inc2.sh

       

        d.crontab(如果啟動)

            # /sbin/service crond status  --用於檢查crontab 務狀態

            # /sbin/service crond stop //關閉

            # /sbin/service crond restart //

            # /sbin/service crond reload //重新入配置

           

            使crontab在系統啟動候自動啟動

                /etc/rc.d/rc.local這個指令碼的末尾加上:

                /sbin/service crond start

 

        e.上面的備份策略看,即

            週日0增量備份,相於全

            週一,週二,週三2增量備份

            週四1增量備份

            週五,週六2增量備份

   

        f.編輯好的shell 指令碼測試

            chmod 755 *.sh         --shell指令碼加

            測試指令碼  例如./inc0.sh

       

三、總結

    1.backup controlfile in each scripts tail (在指令碼的尾部備份控制檔案)

    2.Delete obsolete backupset in each scripts threshold (備份)

    3.Switch logfile before backup database; (庫備份以前切志,備份聯機重做日誌)

    4.Chmod u+x*.sh

 

    本文根據德哥RMAN:Oracle一週備份方案的設計 整理完成

四、 快捷參考

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

相關文章