Oracle自动备份脚本并自动删除2周前备份内容
1.环境
系统:centos6.9
oracle版本:11g 11.2.0
oracle安装目录:/home/u01/app/oracle/product/11.2.0/dbhome_1
备份目录:/home/u01/app/oracle/oradata/bak
脚本位置:/home/oraclebak/oraclebak.sh
2.脚本代码
脚本内容如下,有注释,请自行修改
------------------------------
#2018.04.17刘修改
#oracle自动备份脚本
#/bin/sh
export ORACLE_SID=orcl
export ORACLE_HOME=/home/u01/app/oracle/product/11.2.0/dbhome_1
export NLS_LANG=american_america.zhs16gbk
export DATA_DIR=/home/u01/app/oracle/oradata/bak
#获取系统时间,精确到秒
now=`date +%Y%m%d%H%M%S`
#获取打包时间精确到小时
ziptime=`date +"%Y%m%d%H"`
#获取删除时间,当前时间的前2周
deletetime=`date -d "2 week ago" +"%Y%m%d%H"`
#删除2周前的zip包
rm -rf /home/u01/app/oracle/oradata/bak/db_$deletetime.zip
echo start exp $dmpfile ...
/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbservice/123456 DUMPFILE=dbservice$now.dmp DIRECTORY=DPDATA1 schemas=dbservice
/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbcount/123456 DUMPFILE=dbcount$now.dmp DIRECTORY=DPDATA1 schemas=dbcount
/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbcenter/123456 DUMPFILE=dbcenter$now.dmp DIRECTORY=DPDATA1 schemas=dbcenter
/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dboperation/123456 DUMPFILE=dboperation$now.dmp DIRECTORY=DPDATA1 schemas=dboperation
/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbcms/123456 DUMPFILE=dbcms$now.dmp DIRECTORY=DPDATA1 schemas=dbcms
/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp db_resource/123456 DUMPFILE=db_resource$now.dmp DIRECTORY=DPDATA1 schemas=db_resource
/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbcas/123456 DUMPFILE=dbcas$now.dmp DIRECTORY=DPDATA1 schemas=dbcas
zip -r /home/u01/app/oracle/oradata/bak/db_$ziptime.zip /home/u01/app/oracle/oradata/bak/*.dmp
rm -rf /home/u01/app/oracle/oradata/bak/*.dmp
------------------------------
3.脚本是按照表空间导出的
若需要全库或者某用户导出,请参考我的另外一篇文章:
https://lcryblog.lofter.com/post/1e131973_11eb1eda
4.设置定时任务
vi /etc/crontab
若无该文件请执行yum安装crond命令:yum install crontabs
末尾添加一行:
00 03 * * * oracle /home/oraclebak/oraclebak.sh
以上意思为每天3:00分执行一次备份
查看定时任务日志:tail -f /var/log/cron
注:一定要手动执行一次看是否成功,内容比较多可以注释掉,只导出一个数据少的库做测试。