#!/bin/bash
back_path="/u01/backup";
back_log="/u01/backup/log";
#rman_bin=/u01/oracle/product/10.2.0/db_1/bin
date_w=`date +%w`;
date_d=`date +%d`;
case $date_w in
0)
rman log $back_log/level0_`date +%Y-%m-%d`.log <
connect target /
run {
backup incremental level 0 database format '$back_path/level0_%d_%T_%s.bak'
tag='level 0' include current controlfile
plus archivelog format '$back_path/arch_%d_%T_%s.bak'
delete all input;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
exit
EOF
;;
3|6)
rman log $back_log/level1_`date +%Y-%m-%d`.log <connect target /
run {
backup incremental level 1 database format '$back_path/level1_%d_%T_%s.bak' tag =
'level 1' include current controlfile
plus archivelog format '$back_path/arch_%d_%T_%s.bak' delete all input;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
exit;
EOF
;;
1|2|4|5)
rman log $back_log/level2_`date +%Y-%m-%d`.log <connect target /
run {
backup incremental level 2 database format '$back_path/level2_%d_%T_%s.bak' tag =
'level 2' include current controlfile
plus archivelog format '$back_path/arch_%d_%T_%s.bak' delete all input;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
exit;
EOF
;;
esac
case $date_d in
28)
rman log $back_log/full_`date +%Y-%m-%d`.log <connect target /
run {
backup full database format '$back_path/full_%d_%T_%s.bak'
tag='full' include current controlfile
plus archivelog format '$back_path/arch_%d_%T_%s.bak'
delete all input;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
exit
EOF
;;
esac
脚本说明:
周日做一次零级增量备份
周1、2、4、5做二级增量备份
周3、6做一级增量备份
每月的28号做一次全备
默认设置好三个通道
在oracle10g之前,要完成增量备份,必须读取挣个数据库文件,查找自上一次增量备份以来修改的块。所以,如果有1T的数据库,只在其中增加了500MB的新数据,增量备份就必须读取1TB的数据,在其中找出要备份的500MB新信息,所以,尽管增量备份存储的数据确实少很多,但是他还是要读取整个数据库。
在oracle10g中就不这样了。oracle运行时,如果块被修改,oracle可能会维护一个文件,告诉rman那些块已经修改。创建这个修改跟踪文件的过程很简单。
alter database enable block change tracking using file '/u01/changed_blocks.bct';
-bash-3.00$ cat /oracle/rman.sh
ORACLE_SID=jsj1
export ORACLE_SID
ORACLE_BASE=/oracle
export ORACLE_BASE
ORACLE_HOME=/oracle/product/10.2.0.3/database
export ORACLE_HOME
echo "-----------------------------start-----------------------------";
$ORACLE_HOME/bin/rman target sys/xxxxx <run{
backup full database format '/oracle_bk/rman/db_%U.bak';
#backup database format '/oracle/backup/db_%U.bak';
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT 'sys/xxxxxx1';
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT 'sys/xxxxxx2';
backup archivelog from time "sysdate-3" delete input format '/oracle_bk/rman/arch12_%U.bak';
copy current controlfile to '/oracle_bk/rman/control_bak.ctl';
#backup archivelog all delete input format '/oracle/backup/arch12_%U.bak';
}
CROSSCHECK archivelog all;
report obsolete;
DELETE NOPROMPT OBSOLETE;
crosscheck backup;
delete noprompt obsolete;
copy current controlfile to '/oracle_bk/rman/control_bak.ctl';
EOF
echo "-----------------------------stop------------------------------";
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16566331/viewspace-670125/
,如需转载,请注明出处,否则将追究法律责任。