linux中shell定时任务执行oracle备份。
1编写shell脚本
#!/bin/bash
#:本脚本自动备份7天的数据库,每次备份完成后,删除7天之前的数据。编写脚本是否可以执行,请自行测试
#加载oracle的相关参数
#如果oracle参数不明确,请使用命令查看
# su - oracle
# echo $ORACLE_HOME
export ORACLE_BASE=/home/oracle/app
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
#oracle字符集
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#获取当前时间,格式:20150210
DATE=$(date +%Y%m%d)
#获取7天之前的时间,格式:20150203
DATE_RM=$(date -d "7 days ago" +%Y%m%d)
#设置备份目录,
export DIR=/dbbackup
echo $DIR
#创建日期目录
mkdir $DIR/$DATE
#开始备份,此处采用exp方式导出,根据实际情况可选用expdb数据方式导出
echo 'Oracle backup...'
exp username/password@ORCL file=$DIR/$DATE'/sbkfw_'$DATE'.dmp' log=$DIR/$DATE'/sbkfw_log_'$DATE'.log'
echo 'Oracle backup successfully.'
echo 'remove...'
rm -rf $DIR/$DATE_RM
echo 'remove successsfully.'
PS:关于是否进行压缩,请自行更改,因为备份出的数据库文件大于4G又不想分开压缩,所有本帖没有压缩备份文件。
2给脚本付给可执行权限
chmod 777 dbbackup.sh
3设置linux定时任务
#每天1:30执行脚本
crontab -e 进入vi模式,添加定时任务
30 1 * * * /dbback/dbbackup.sh
Ps:这里有个参数需要说明。如果脚本里边不想带oracle的环境变量可以这么写
30 1 * * * su - oracle -c /dbback/dbbackup.sh
4关于linux在shell中获取系统时间
获得当天的日期 date +%Y%m%d
输出: 20110728
有时候我们需要使用今天之前或者往后的日期,这时可以使用date的 -d参数
获取明天的日期 date -d next-day +%Y%m%d
获取前几天的日期 date -d "7 days ago" +%Y%m%d
获取昨天的日期 date -d last-day +%Y%m%d