天天看點

基于Linux下 Oracle 備份政策(RMAN)

基于linux下 oracle 備份政策(rman)

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

-- 基于linux下 oracle 備份政策(rman)

    對于 oracle 資料庫的備份與恢複,盡管存在熱備,冷備以及邏輯備份之外,使用最多的莫過于使用rman進行備份與恢複。而制定rman備份政策則是基于資料庫丢失的容忍程度,即恢複政策來制定。在下面的備份政策中,給出的是一個通用的備份政策。在該備份政策中,使用了nocatalog方式來保持備份腳本以及備份資訊。在實際環境中應根據具體的情況對此進行相應的調整。因為我現在目前接手的是一台單執行個體,一台rac,是以麼有必要做catalog方式。

一、步驟

1.确認備份可用空間以及備份路徑,根據需要建立相應檔案夾

    2.建立通用的腳本用于删除過舊的備份和備份控制檔案以及備份歸檔日志

        global_del_obso      --删除過舊的備份

        global_bkctl         --備份控制檔案

        global_arch          --備份歸檔日志

    3.建立0,1級差異增量備份

        這三個腳本中均包含第2步的3個腳本,先調用global_del,然後做增量備份,最後備份歸檔日志global_arch和控制檔案global_bkctl

    4.建立inc0.rcv,inc1.rcv

        檔案内容包含調用 @@/<dir>/connect.rcv以及run{execute globalscript

scriptname;}exit;

    5.編輯第4步的三個檔案分别為inc0.sh,inc1.sh

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

    6.使用crontab制定備份計劃   

二、具體實作

    示範環境:

        系統:            rhel release 5.4 (final)

+oracle 11.2.3

        目标資料庫:      qbjmes

        恢複目錄資料庫:  

        備份目錄:       

/u03/bk

        連接配接腳本所在路徑:

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

 1.連接配接腳本

        connect.rcv檔案内容

        connect nocatalog

rman target /

2.建立通用腳本

        --删除不必要的備份

run

{

allocatechannel ch1 device type disk;

crosscheck archivelog all;

                delete noprompt

expired archivelog all;

obsolete recovery window of 7days; 

                releasechannel

ch1;

            }

       --備份控制檔案腳本

                allocate channel

ch1 device type disk;

                backup as compressed

backupset

                current controlfile reuse

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

                tag='bkctl';

            release channel ch1;

--備份歸檔日志腳本

            run

           allocate channel

            allocate channelch2

device type disk;

            sql"alter

system archive log current";   --歸檔目前的聯機日志

            set limit channelch1

readrate=10240;        --(讀取速率10m)             

            set limit channel

ch1 kbytes=4096000;        --(備份片的大小)    

            backup ascompressed

            format='/u03/bk/arch_%d_%u'

            tag='bkarch'

            archivelog all deleteinput;

            release channel ch2;

    3.建立0,1級差異增量備份腳本(注:每個腳本備份前會執行删除過舊的備份,腳本尾部會調用另外兩個腳本來備份歸檔日志及控制檔案)

        --建立0級增量備份

           run

            allocate channelch1

            set limit channel

ch1 readrate=10240;

kbytes=4096000;

            set limit channelch2

readrate=10240;

            incremental level 0 database

            format='/u03/bk/inc0_%d_%u'

            tag='inc0';

            release channel ch2;

        --建立1級增量備份        

            run

ch2 device type disk;

           set limit channel

                set limit channel

ch1 kbytes=4096000;

ch2 readrate=10240;

ch2 kbytes=4096000;

                incrementallevel 1 database

                format='/u03/bk/inc1_%d_%u'

                tag='inc1';

ch2;

            }

--檢視備份完成情況

            listbackupset

summary;

    4.建立shell腳本,讓linux自動執行腳本

        a. vi inc0.rcv,inc1.rcv   

           --注意不同的檔案執行不同的備份腳本

        @@/u03/bk/scripts/connect.rcv       --(rman下的腳本去調用其他腳本用@@符号)(調用腳本不需要分号)

            run{

            execute globalscript

gloal_inc0;

            exit;

        b. 編輯shell檔案   

            vi inc0.sh

                nohup  $oracle_home/bin/rman 

cmdfile=/u03/bk/scripts/inc0.rcvlog=/u03/bk/scripts/inc0.logappend &

            vi inc1.sh

                nohup  $oracle_home/bin/rman 

cmdfile=/u03/bk/scripts/inc1.rcvlog=/u03/bk/scripts/inc0.logappend &

            --注意:nohup與&表示将腳本放入背景執行

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

        crontab -e  

            #min    hour    date 

mon  day(星期)   command

            10        3     

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

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

*     *   2          /u03/bk/scripts/inc1.sh

            10        3     

*     *   3          /u03/bk/scripts/inc1.sh

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

*     *   5          /u03/bk/scripts/inc1.sh

*     *   6          /u03/bk/scripts/inc1.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級增量備份,相當于全備

            周一,周二,周三,周四,周五,周六執行1級增量備份

        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

後續:

1、配置rman

configure controlfile autobackup on;

configure controlfile autobackup format fordevice type disk to '/u02/backup/%f';

configure channel 1 device type diskformat   '/u02/rman/dt1/dt1_%u_%t';

configure channel 2 device type diskformat   '/u02/rman/dt2/dt2_%u_%t';

configure compression algorithm 'low'

2、計劃任務:

[oracle@qbjmes ~]$ crontab -l

10 3 * * 0 /u03/bk/scripts/lv0.sh

10 3 * * 1 /u03/bk/scripts/lv1.sh

10 3 * * 2 /u03/bk/scripts/lv1.sh

10 3 * * 3 /u03/bk/scripts/lv1.sh

10 3 * * 4 /u03/bk/scripts/lv1.sh

10 3 * * 5 /u03/bk/scripts/lv1.sh

10 3 * * 6 /u03/bk/scripts/lv1.sh

[oracle@qbjmes ~]$

3、建立目錄

mkdir /u03/bk/scripts/

chown -r /u03

4、shell腳本

lv0.sh

#!/bin/bash

source /home/oracle/.bash_profile

rman target / log=/u02/backup/db_lv0_`date+%y%m%d`.log <<eof

configure retention policy to recoverywindow of 7 days;

run{

allocate channel disk1 type disk;

allocate channel disk2 type disk;

backup incremental level 0 database includecurrent controlfile format '/u02/backup/db_level0_data_%d_%t_%s'

plus archivelog format'/u02/backup/db_level0_arch_%d_%t_%s'delete all input;

delete noprompt obsolete;

crosscheck backup;

delete noprompt expired backup;

release channel disk1;

release channel disk2;

}

exit;

eof

lv1:

rman target / log=/u02/backup/db_lv1_`date+%y%m%d`.log <<eof

backup incremental level 1 database includecurrent controlfile format '/u02/backup/db_level1_data_%d_%t_%s'

plus archivelog format'/u02/backup/db_level1_arch_%d_%t_%s'delete all input;

6、建立一個拷貝scpuser

 useradd -m -u 2201 -g oinstall -gdba,oper,asmdba -d /home/scpuser -s /bin/bash scpuser

7、交換鑰匙

ssh-keygen ssh-copy-id

8、拷貝

crontab -e 自動任務

10 4 * * 0 scp /u02/backup/*[email protected]:/data/meslog/0

10 4 * * 1 scp /u02/backup/*[email protected]:/data/meslog/1

10 4 * * 2 scp /u02/backup/*[email protected]:/data/meslog/2

10 4 * * 3 scp /u02/backup/*[email protected]:/data/meslog/3

10 4 * * 4 scp /u02/backup/*[email protected]:/data/meslog/4

10 4 * * 5 scp /u02/backup/*[email protected]:/data/meslog/5

7、建立一個删除rmuser

 useradd -m -u 3301 -g oinstall -gdba,oper,asmdba -d /home/scpuser -s /bin/bash rmuser

8、交換鑰匙

9、授權

 chmod -r 777 /u02/backup

10、删除

[rmuser@qbjmes ~]$ crontab -l

10 5 * * 0 rm /u02/backup/*

10 5 * * 1 rm /u02/backup/*

10 5 * * 2 rm /u02/backup/*

10 5 * * 3 rm /u02/backup/*

10 5 * * 4 rm /u02/backup/*

10 5 * * 5 rm /u02/backup/*

10 5 * * 6 rm /u02/backup/*

5、重新開機cron自動任務

/etc/init.d/cronttabrestart

通過收集網絡資源整理獲得,結合公司實際的情況改成這樣,比較基礎,還請賜教。