前几天刚做了个每天自动执行的rman增量备份,做个笔记记录一下……
--备份策略
星期天 0 级星期三 1 级
星期一,二,四,五,六 2 级
建议使用备份容灾服务器,在备份容灾服务器做备份,链接到目标数据库
--切换目标服务器到归档模式
SQL> alter system set db_recovery_file_dest_size=5368709120;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 188743680 bytes
Fixed Size 1218436 bytes
Variable Size 92276860 bytes
Database Buffers 92274688 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
--新建备份本地目录
mkdir -p /home/oracle/backup
mkdir -p /home/oracle/backup/script
mkdir -p /home/oracle/backup/log/rman
mkdir -p /home/oracle/backup/export
--备份目的地
mkdir -p /home/oracle/rman_backup
--创建rman表空间
sqlplus / as sydba
create tablespace rman_tbs datafile '/u01/app/oracle/oradata/ORCL/datafile/rman_tbs01.dbf' size 1024M;
create user rman identified by rman default tablespace rman_tbs temporary tablespace temp;
grant connect,resource ,recovery_catalog_owner to rman;
exit;
rman catalog rman/rman
create catalog tablespace rman_tbs;
exit;
rman target sys/test@目标服务器 catalog rman/rman
register database;
report schema;
configure retention policy to recovery window of 7 days;
configure controlfile autobackup on;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/rman_backup/%T_ctl_%F.bak';
--零级备份RMAN脚本level0_backup.rcv
connect catalog rman/rman
connect target sys/test@目标服务器
run{
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
backup incremental level=0 database format '/home/oracle/rman_backup/%T_Level0_%s_%p.bak' tag='level 0' plus archivelog format '/home/oracle/rman_backup/%T_archive_%s_%p.bak' delete all input;
release channel d3;
release channel d2;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
resync catalog;
--零级备份SHELL脚本的level0_backup.sh
#!/bin/bash
filename=`date '+%Y%m%d_%a'`
cd $HOME
. .bash_profile
cd $HOME/backup/script
rman cmdfile=level0_backup.rcv msglog=$HOME/backup/log/${filename}.log
. /home/oracle/backup/script/exp_rman.sh
--一级差异增量备份RMAN脚本level1_backup.rcv
connect catalog rman/rman
connect target sys/test@目标服务器
run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
backup incremental level=1 database format '/home/oracle/rman_backup/%T_Level1_%s_%p.bak' tag = 'level 1' plus archivelog format '/home/oracle/rman_backup/%T_archive_%s_%p.bak' delete all input;
release channel d3;
release channel d2;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
resync catalog;
--一级差异增量备份SHELL脚本level1_backup.sh
#!/bin/bash
filename=`date '+%Y%m%d_%a'`
cd $HOME
. .bash_profile
cd /home/oracle/backup/script
rman cmdfile=level1_backup.rcv msglog=$HOME/backup/log/${filename}.log
. /home/oracle/backup/script/exp_rman.sh
--二级差异增量备份RMAN脚本level2_backup.rcv
connect catalog rman/rman
connect target sys/test@目标服务器
run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
backup incremental level=2 database format '/home/oracle/rman_backup/%T_Level2_%s_%p.bak' tag = 'level 2' plus archivelog format '/home/oracle/rman_backup/%T_archive_%s_%p.bak' delete all input;
release channel d3;
release channel d2;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
resync catalog;
--二级差异增量备份SHELL脚本level2_backup.sh
#!/bin/bash
filename=`date '+%Y%m%d_%a'`
cd $HOME
. .bash_profile
cd /home/oracle/backup/script
rman cmdfile=level2_backup.rcv msglog=$HOME/backup/log/${filename}.log
. /home/oracle/backup/script/exp_rman.sh
--导出RMAN数据SHELL脚本exp_rman.sh
#!/bin/bash
filename=`date '+%Y%m%d_%a'`
cd $HOME
. .bash_profile
cd $HOME/backup/script
exp rman/rman file=/home/oracle/backup/export/rman_${filename}.dmp log=/home/oracle/backup/log/rman/rman_${filename}.log owner=rman
--定期清理8天前日志文件、备份文件的shell脚本clear_log.sh
#!/bin/bash
find /home/oracle/backup/log -mtime +8 -name "*.log"| xargs rm -rf;
find /home/oracle/backup/log/rman -mtime +8 -name "*.log"| xargs rm -rf;
find /home/oracle/backup/export -mtime +8 -name "*.dmp"| xargs rm -rf;
--为所用的shell脚本分配执行权限
chmod -R 755 script
提高RMAN增量备份性能
alter database enable block change tracking using file
'/u01/app/oracle/admin/orcl/bdump/why_rman.log';
Linux crontab 配置:
[oracle@localhost script]$ crontab -e
0 12 * * 3 /home/oracle/backup/script/level0_backup.sh
0 12 * * 4 /home/oracle/backup/script/level2_backup.sh
0 12 * * 5 /home/oracle/backup/script/level2_backup.sh
0 12 * * 6 /home/oracle/backup/script/level1_backup.sh
0 12 * * 0 /home/oracle/backup/script/level2_backup.sh
0 12 * * 1 /home/oracle/backup/script/level2_backup.sh
0 12 * * 2 /home/oracle/backup/script/level2_backup.sh
0 11 * * 3 /home/oracle/backup/script/clear_log.sh