您好,登錄后才能下訂單哦!
怎么進行linux下的oracle10g rman備份,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
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后面寫你自己的路徑就可以了。
關于怎么進行linux下的oracle10g rman備份問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。