共享一个多实例的ORACLE数据库备份脚本
来源:互联网 发布:spring书籍推荐 知乎 编辑:程序博客网 时间:2024/06/06 05:39
首先说一下我的环境ORACLE 10gR2
机器运行三个实例 aaa bbb ccc
每周周一一个完全备份,周四一个差异备份,其他每天都执行增量备份
脚本的大概结构大概是:
首先判断是不是周一,如果是,就循环所有的DBSID,执行完全备份
备份内容有:数据文件,归档日志文件,控制文件和pfile
然后判断是不是周四,如果是,就循环DBSID,执行差异备份
备份内容有:数据文件,归档日志文件和控制文件
其他也就是二三五六七每天都执行增量备份
别分内容是:数据文件,归档日志文件和控制文件
脚本内容如下
#!/bin/bash
#lsnrctl status|grep Service|egrep -v "XDB|XPT|Summary"|awk '{print $2}' #如果动态获得服务名的话就用这个,然后设置变量,下边在for循环中不用手动定义DBSID
source ~/.bash_profile
export SERVICES="AAA BBB CCC"
export DATETIME=`date +%Y%m%d`
export WEEKTIME=`date +%u`
export BACKDATADIR=/home/oracle/rman_backup/$DATETIME
export BACKLOGDIR=/home/oracle/rman_log/$DATETIME
if [ $WEEKTIME -eq 1 ] ; #判断是否是周一
then
for DBSID in $SERVICES #这儿循环的DBSID其实是SERVER NAME,只是我的库名SID名和SERVER NAME都一样所以这儿就循环SID即可
do
if [ ! -d $BACKLOGDIR/$DBSID ] ; #判断rman的日志目录是否存在,如果不存在就创建之
then
mkdir -p $BACKLOGDIR/$DBSID
fi
if [ ! -d $BACKDATADIR/$DBSID ] ; #判断rman的data备份目录是否存在,如果不存在就创建之
then
mkdir -p $BACKDATADIR/$DBSID
fi
rman target sys/"2I4#5Y8*jklH"@$DBSID nocatalog log=$BACKLOGDIR/$DBSID/${DBSID}_level0_$DATETIME.log<<EOF
run {allocate channel d1 type disk;
allocate channel d2 type disk;
backup incremental level 0 database format '$BACKDATADIR/$DBSID/${DBSID}_leve0_%d_%s_%p_%U_%T.dbf' #备份数据库
tag='level 0' include current controlfile;
sql 'alter system archive log current'; #强制归档
backup archivelog all format '$BACKDATADIR/$DBSID/${DBSID}_log_%d_%s_%p_%U_%T.arc' delete all input; #备份并删除归档日志文件
release channel d2;
release channel d1;}
backup current controlfile format '$BACKDATADIR/$DBSID/${DBSID}CTRL.bak'; #备份控制文件
delete archivelog all completed before 'sysdate-7'; #删除7天前的归档日志,理论上来说,这句是空操作,可以删除
run {crosscheck backup; #核对所有的备份标出expired
delete noprompt expired backup; #删除状态为expired的备份文件
delete noprompt obsolete;} #删除超出保存策略的备份
sql "create pfile=''$BACKDATADIR/$DBSID/pfile$DBSID.ora'' from spfile"; #备份pfile,以备不时之需
EOF
done
elif [ $WEEKTIME -eq 4 ] ; #判断是否是周四如果是就执行差异备份LEVE2 下边的备份内容和周一的就查pfile的备份,这儿就不再赘述
then
for DBSID in $SERVICES
do
if [ ! -d $BACKLOGDIR/$DBSID ] ;
then
mkdir -p $BACKLOGDIR/$DBSID
fi
if [ ! -d $BACKDATADIR/$DBSID ] ;
then
mkdir -p $BACKDATADIR/$DBSID
fi
echo "rman target sys/"2I4#5Y8*jklH"@$DBSID nocatalog log=$BACKLOGDIR/$DBSID/${DBSID}_level2_$DATETIME.log<<EOF
run {allocate channel d1 type disk;
allocate channel d2 type disk;
backup incremental level 2 database format '$BACKDATADIR/$DBSID/${DBSID}_leve2_%d_%s_%p_%U_%T.dbf'
tag='level 2' include current controlfile;
sql 'alter system archive log current';
backup archivelog all format '$BACKDATADIR/$DBSID/${DBSID}_log_%d_%s_%p_%U_%T.arc' delete all input;
release channel d2;
release channel d1;}
backup current controlfile format '$BACKDATADIR/$DBSID/${DBSID}CTRL.bak';
delete archivelog all completed before 'sysdate-7';
run {crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;}
EOF"
done
else #如果是不是周一和周四就执行增量备份 LEVE 1
for DBSID in $SERVICES
do
if [ ! -d $BACKLOGDIR/$DBSID ] ;
then
mkdir -p $BACKLOGDIR/$DBSID
fi
if [ ! -d $BACKDATADIR/$DBSID ] ;
then
mkdir -p $BACKDATADIR/$DBSID
fi
rman target sys/"2I4#5Y8*jklH"@$DBSID nocatalog log=$BACKLOGDIR/$DBSID/${DBSID}_level1_$DATETIME.log<<EOF
run {allocate channel d1 type disk;
allocate channel d2 type disk;
backup incremental level 1 database format '$BACKDATADIR/$DBSID/${DBSID}_leve1_%d_%s_%p_%U_%T.dbf'
tag='level 1' include current controlfile;
sql 'alter system archive log current';
backup archivelog all format '$BACKDATADIR/$DBSID/${DBSID}_log_%d_%s_%p_%U_%T.arc' delete all input;
release channel d2;
release channel d1;}
backup current controlfile format '$BACKDATADIR/$DBSID/${DBSID}CTRL.bak';
delete archivelog all completed before 'sysdate-7';
run {crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;}
EOF
done
fi
#我这儿采用rsync的方式进行传到别的机器上,以保万一rsync -vzrtopg --progress $BACKDATADIR/ 192.168.119.10::dbbak/192.168.119.5/$DATETIME #传输rman备份集
rsync -vzrtopg --progress $BACKLOGDIR 192.168.119.10::dbbaklog/192.168.119.5/$DATETIME #传输rman备份log
find /home/oracle/rman_backup/ -mtime +8 -exec rm -rf {} \; #删除备份目录中8天前的垃圾文件
find /home/oracle/rman_log/ -mtime +8 -exec rm -rf {} \; #删除备份目录中8天前的rman日志
#######################################
本文有笔者原创
作者:john
转载请注明出处
- 共享一个多实例的ORACLE数据库备份脚本
- 分享一个定时自动备份oracle数据库的脚本
- 备份Oracle数据库的脚本
- Oracle数据库备份脚本
- ORACLE数据库备份脚本
- Oracle数据库的自动备份脚本(2)
- Oracle数据库RMAN的自动备份脚本
- 自动备份数据库(oracle)的脚本
- ORACLE 一个完整的rman备份脚本
- oracle冷备份脚本实例
- Oracle数据库自动备份脚本
- ORACLE 数据库自动备份脚本
- oracle数据库逻辑备份脚本
- Oracle数据库自动备份脚本
- oracle rman 备份数据库脚本
- oracle数据库自动备份脚本
- Oracle数据库定时备份脚本
- Oracle RMAN数据库备份脚本
- 【Win7下载压缩文件后自动打开的问题】
- hdu 1890 区间翻转——伸展树
- poj 1007 DNA Sorting
- jspxcms导入myeclipse出现问题
- 做博客评论推广的你伤不起
- 共享一个多实例的ORACLE数据库备份脚本
- 产生几种不同的波形
- eBay interview summary
- editplus3注册码算法源码(js)
- FDF
- 在WIN2K3AD中用dsadd批量添加域用户
- linux上安装activeMQ
- KUI-1
- 按键盘数码管流动显示实验