Linux环境下设置自动备份oracle数据库
oracle数据库版本oracle11.2.0.4.0
Linux版本CentOS Linux release 7.9.2009
手动执行脚本则可以正常导出数据库备份并压缩文件
放到定时任务crontab -e 则会出现有文件导出,但是最后会把文件和压缩包一起删除。
备份脚本
#!/bin/sh
echo “现在开始进行数据备份…”
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
export LD_LIBRARY_PATH=/u01/app/oracle/product/11.2/db_1/lib
export NLS_LANG=American_america.ZHS16GBK
export PATH=/u01/app/oracle/product/11.2/db_1/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin
umask 022
dmpname=JWDB
schname=GXZJZY #备份的用户,英文逗号分隔
days=7 #设置删除7天前备份文件
bakdata=$dmpname"_"$(date +%Y%m%d).dmp #定义备份文件名这里就是JWDB_具体年月日
baklog=$dmpname"_"$(date +%Y%m%d).log
ordatabak=$dmpname"_"$(date +%Y%m%d).tar.gz #定义压缩文件名这里就是JWDB_具体年月日
bak_dir=/data/oracle_dmp #备份实际存放路径,backdir 为directory中定义路径
#expdp c_yhpt_etl/c_yhpt_etl@192.168.77.102:1521/oradb DIRECTORY=expdp_dir schemas=$schname dumpfile=$dmpname_$date_now.dmp logfile=$dmpname_$date_now.log compression=ALL #执行备份指定>数据库
expdp GXZJZY/Kingo123@orcl DIRECTORY=expdp_dir schemas=$schname dumpfile=$bakdata logfile=$baklog
echo “数据备份结束…”
echo “现在开始进行压缩备份数据…”
tar -zcvf $ordatabak $bakdata $baklog
echo “压缩备份数据结束…”
echo “删除备份数据开始…”
find $bak_dir -type f -name "*.dmp" -exec rm -rf {} \;
find $bak_dir -type f -name "*.log" -exec rm -rf {} \;
find $bak_dir -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;
echo “删除备份数据结束…”
echo “备份执行完毕…”
定时语句
05 00 * * * . ~/.bash_profile; /data/oracle_dmp/oracle_bak.sh > /tmp/ls.log
看输出日志都已经执行,全部都能输出
#每 N 分钟(小时、天、月份) 使用 /N
#不连续的时间(第3分钟,第30分钟) 使用 " , "
#连续的时间使用(7点到12点) 使用 " - "
find $bak_dir -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;
这一行就是用来删除压缩包的