歡迎您光臨本站 註冊首頁

linux下的oracle10g rman備份

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

RMAN是Oracle提供的一個資料庫備份和恢復工具,利用rman可以比較方便的對資料庫進行備份.Oracle 資料庫可運行在歸檔和非歸檔模式下,這兩者的區別就在於對redo log的處理.歸檔模式下,當一個redo log 寫滿之後,就會把這個redo log里的內容寫入歸檔文件,等寫完之後,這個redo log 就可以繼續使用,如果是非歸檔模式下,redo log 就被直接覆蓋了. 資料庫的恢復一般都需要歸檔文件,這裡面記錄了對資料庫的操作,所以生產資料庫一般都運行在歸檔模式下,以防數據的丟失.

一、設置ORACLE的RMAN備份準備工作:
1、查看資料庫現有運行模式
sql>select name,log_mode from v$database;
NAME    LOG_MODE
--------  ------------
BIGSUN   NOARCHIVELOG #非歸檔模式
也可以通過下面的語句進行查看
sql> archive log list ;(conn / as sysdba)
Database log mode       No Archive Mode
Automatic archival      Disabled #非歸檔模式
Archive destination      /export/data/oracle/product/10.0.0.2/dbs/arch
Oldest online log sequence   28613
Current log sequence     28615
非歸檔模式的資料庫需要改為歸檔模式,才能進行RMAN備份.步驟如下:
1. SQL> alter system set log_archive_dest_1='location=/oracle/oracle10g/log/archive_log';
該語句含義是確定歸檔日誌的路徑,實際上Oracle 10g可以生成多份一樣的日誌,保存多個位置,以防不測

例如再添加一個日誌位置可使用以下語句
SQL>alter system set log_archive_dest_2='location=/oracle/oracle10g/log2/archive_log';

2.關閉資料庫
SQL> shutdown immediate

3.啟動數據mount狀態:
SQL> startup mount;

4、修改資料庫為歸檔模式:
SQL> alter database archivelog;

5、打開資料庫,查詢:
SQL> alter database open;

修改日誌文件命名格式:
SQL> alter system set log_archive_max_processes = 5;
SQL> alter system set log_archive_format = "archive_%t_%s_%r.log" scope=spfile;

修改完成後可以查看日誌模式是否修改成功!

sql>select name,log_mode from v$database;
NAME    LOG_MODE
--------  ------------
BIGSUN   ARCHIVELOG #歸檔模式

二、用腳本實現RMAN自動備份.

注: level 0 全備份; level 1 差量備份; level 2 增量備份

在linux oracle伺服器的/data/rmanbak/script/目錄下新建3個腳本文件,並賦予每個腳本執行許可權.

bakl0.sh 腳本

RUN_STR="
BAK_LEVEL=0
export BAK_LEVEL
ORACLE_HOME=/opt/app/oracle/10.2.0
export ORACLE_HOME
ORACLE_SID=orcl
export ORACLE_SID
RMAN_LOG_FILE=${0}.out
echo Script $0 >> $RMAN_LOG_FILE
echo ==== started on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
$RMAN nocatalog target sys/admin msglog $RMAN_LOG_FILE append << EOF

run{

allocate channel c1 type disk;

backup incremental level 0 format "/data/rmanbak/inc0_%u_%T" tag monday_inc0 database;

release channel c1;

}

bakl1.sh 腳本

RUN_STR="
BAK_LEVEL=1
export BAK_LEVEL
ORACLE_HOME=/opt/app/oracle/10.2.0
export ORACLE_HOME
ORACLE_SID=orcl
export ORACLE_SID
RMAN_LOG_FILE=${0}.out
echo Script $0 >> $RMAN_LOG_FILE
echo ==== started on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE


chmod 666 $RMAN_LOG_FILE
$RMAN nocatalog target sys/admin msglog $RMAN_LOG_FILE append << EOF

run{

allocate channel c1 type disk;

backup incremental level 1 format "/data/rmanbak/inc1_%u_%T" tag monday_inc0 database;

release channel c1;

}

bakl2.sh 腳本

RUN_STR="
BAK_LEVEL=2
export BAK_LEVEL
ORACLE_HOME=/opt/app/oracle/10.2.0
export ORACLE_HOME
ORACLE_SID=orcl
export ORACLE_SID
RMAN_LOG_FILE=${0}.out
echo Script $0 >> $RMAN_LOG_FILE
echo ==== started on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
$RMAN nocatalog target sys/admin msglog $RMAN_LOG_FILE append << EOF

run{

allocate channel c1 type disk;

backup incremental level 2 format "/data/rmanbak/inc2_%u_%T" tag monday_inc0 database;

release channel c1;

}

其二、編輯oracle用戶的自動執行任務計劃

crontab -e -u oracle

30 23 * * 0 rman target / msglog=/data/rmanbak/rman_bk_'date ' %Y%m%d%H%M%S''.log

cmdfile=/data/rmanbak/script/bakl0.sh

30 23 * * 1 rman target / msglog=/data/rmanbak/bakl0.log cmdfile=/data/rmanbak/script/bakl2.sh

30 23 * * 2 rman target / msglog=/data/rmanbak/bakl0.log cmdfile=/data/rmanbak/script/bakl2.sh

30 23 * * 3 rman target / msglog=/data/rmanbak/bakl0.log cmdfile=/data/rmanbak/script/bakl1.sh

30 23 * * 4 rman target / msglog=/data/rmanbak/bakl0.log cmdfile=/data/rmanbak/script/bakl2.sh

30 23 * * 5 rman target / msglog=/data/rmanbak/bakl0.log cmdfile=/data/rmanbak/script/bakl2.sh

30 23 * * 6 rman target / msglog=/data/rmanbak/bakl0.log cmdfile=/data/rmanbak/script/bakl2.sh

最後重啟crontab 命令 : #service crond restart

三、定期刪除備份的歸檔文件

比如歸檔文件需要保存15天.我們可以寫一個shell 腳本(del_archive_backup.sh
)如下,然後添加到crontab 里定時執行就可以刪除過期的歸檔文件了.

#!/bin/ksh

PATH=/usr/bin:/usr/ucb:/etc:.:/usr/X/bin:/bin
export PATH
find /data/arch/incremental_hotbackup -mtime 15 -name "arch_*"
-exec rm {} \;

註:find後面寫你自己的路徑就可以了.

本文出自 「滴水穿石」 博客,請務必保留此出處http://xjsunjie.blog.51cto.com/999372/823478


[火星人 ] linux下的oracle10g rman備份已經有1084次圍觀

http://coctec.com/docs/linux/show-post-46397.html