说明:这里的备份策略以周日全备,周一到周六归档备份为例
全库备份脚本
vim /home/oracle/full_backup.sh
#!/bin/bash
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '###################################################################'>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '------------Start FULL Database Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
rman target / nocatalog log /tmp/full.log append<<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database format '/data/full/full_%d_%T_%s_%p';
SQL 'alter system archive log current';
SQL 'alter system archive log current';
backup archivelog all delete input format '/data/full/arch_%d_%T_%s_%p';
backup current controlfile format '/data/full/ctl_%d_%T_%s_%p';
backup spfile format '/data/full/spfile_%d_%T_%s_%p';
}
EOF
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '--------------End Full Database Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
rman target / nocatalog log /tmp/full.log append<<EOF
allocate channel for maintenance type disk;
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
EOF
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '###################################################################'>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
exit
归档备份脚本
vim /home/oracle/arch_backup.sh
#!/bin/bash
export ORACLE_SID=orcl
export ORACLE_BASE=/opt/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '###################################################################'>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '------------Start Database Arch Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
rman target / nocatalog log /tmp/arch.log append<<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup archivelog all format '/data/arch/arch_%d_%T_%s_%p' delete input ;
backup current controlfile format '/data/arch/ctl_%d_%T_%s_%p';
}
EOF
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '---------------End Databae Arch Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
rman target / nocatalog log /tmp/arch.log append<<EOF
allocate channel for maintenance type disk;
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
EOF
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '###################################################################'>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
exit
–给脚本执行权限
chmod a+x /home/oracle/full_backup.sh
chmod a+x /home/oracle/arch_backup.sh
注意如果是DG环境
–如果有dg备库,需要配置归档删除策略,防止备库收到不归档就被删除了。
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
–或者这样写每次只备份和删除半天前的归档
backup archivelog until time ‘sysdate-1/2’ all delete input format ‘/orabak/fullbak/arch_%D_%s_%p_%T’;
Linux 定时任务
–编辑定时任务
crontab -e
0 1 * * 0 bash /home/oracle/full_backup.sh
0 1 * * 1,2,3,4,5,6 bash /home/oracle/arch_backup.sh
crontab -l 查看定时任务
raman 保留策略(根据公司规范或者实际备份空间而定,以四周为列)
rman target /
RMAN>CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 28 DAYS;
最后,每天查看/tmp/full.log 和 /tmp/arch.log备份日志即可,查看是否有报错就好了。