LINUX下ORACLE定时备份数据,使用的expdp。
1、root账户登陆,切换到ORACLE用户。
su - oracle
2、创建一个名为te.sh的脚本,并授权可执行。
mkdir /home/oracle/te/te.sh
chomod 775 /home/oracle/te/te.sh
3、vi 编辑te.sh,添加如下脚本。
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
export ORACLE_HOME=/data1/oracle/app/oracle/product/11.2.0/db_1
export ORACLE_SID=实例名
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export DATA_DIR=已经授权导出用户expdp的路径
export oldFileName=`date -d "1 hours ago" +%Y%m%d%H`
export nowFileName=`date +%Y%m%d%H`
echo "start......"
expdp 用户名/密码 tables=数据表 dumpfile=$nowFileName.dmp DIRECTORY=DMPDIR log=$nowFileName.log
echo "Delete the file bakup before hours..."
rm -rf $DATA_DIR/$oldFileName.dmp
rm -rf $DATA_DIR/$oldFileName.log
echo "finished....."
4、脚本解释。
(1)为单个用户每次登陆设置一次环境变量,一定要有这一段,否者定时无效。
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
(2)导入环境变量和者定义变量。
export ......
(3)、date 用来处理shell脚本的时间,具体可以查看对应的文档。
`date -d "1 hours ago" +%Y%m%d%H` --一个小时之前,格式为:年月日时
`date +%Y%m%d%H` --当前时间,格式为:年月日时
(4)、删除一小时前的文件。
rm -rf $DATA_DIR/$oldFileName.dmp
rm -rf $DATA_DIR/$oldFileName.log
5、oracle的定时任务。现在是在oracle用户下使用,默认对oracle用户操作,如果用的root的需要指定对哪个用户操作,有一定风险。
crontab -e
crontab -r : 删除当前的定时
crontab -l : 列出当前的定时
crontab -e : 编辑文件
6、crontab -e 定时参数。
5 * * * * /home/oracle/te/te.sh --每个小时5分钟执行
格式:[分][时][月][年][周][脚本的路径]
还没有评论,来说两句吧...