临时收到一个任务,就是在生产环境上定时备份oracle的数据。空闲时间搞了一下,真是一波三折,过程有点小郁闷,结果哈哈。现在进行总结一下
(1)新建一个shell脚本test.sh
#!/bin/bash currentTime=`date +%Y%m%d` /app/admin/product/11.2.0/dbhome_1/bin/exp 用户名/密码@数据库地址 file=/app/admin/admin/bpmtest/back- updata/${currentTime}.dmp
(2)chmod 744 test.sh
(3)使用linux的crontab命令定时备份
crontab -e 进入vim编辑模式 插入 15 14 * * * /app/admin/admin/bpmtest/back-updata/test.sh (每天14时15分定时备份)
可以使用 crontab -l 查看当前用户定时的任务
(4)错误信息排查并解决:
后面发现定时任务不执行,一开始以为脚本写错了,不过在linux下直接使用./test.sh发现正常执行。
于是,查看了cron日志,vim /var/log/cron发现报错了:(admin) MAIL (mailed 77 bytes of output but got status 0x004b#012)
百度查了一下,好象crontab执行错误的话是以邮件通知的。
更改了执行的脚本test.sh,将错误信息输入到文件中,如下:
#!/bin/bash currentTime=`date +%Y%m%d` /app/admin/product/11.2.0/dbhome_1/bin/exp 用户名/密码@数据库地址 file=/app/admin/admin/bpmtest/back- updata/${currentTime}.dmp >/app/admin/admin/bpmtest/back-updata/${currentTime}.txt 2>&1
执行后查看错误文件,发现报错信息:Message 206 not found; No message file for product=RDBMS, facility=EXP: Release 11.2.0.1.0
后面百度了一下,需要引入oracle的环境变量,重新修改test.sh如下:
#!/bin/bash export ORACLE_HOME=/app/admin/product/11.2.0/dbhome_1 export ORACLE_SID=bpmtest currentTime=`date +%Y%m%d` /app/admin/product/11.2.0/dbhome_1/bin/exp 用户名/密码@数据库地址 file=/app/admin/admin/bpmtest/back- updata/${currentTime}.dmp >/app/admin/admin/bpmtest/back-updata/${currentTime}.txt 2>&1
后来又要定时删除备份的数据,服务器只保留最近7天的数据备份。发现在shell中linux命令不执行,后来查了一下,需要导入PATH环境变量,且执行命令需要写全路径。代码如下:
#!/bin/bash export ORACLE_HOME=/app/admin/product/11.2.0/dbhome_1 export ORACLE_SID=bpmprd export PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/admin/bin:/sbin:/usr/sbin:/app/admin/product/11.2.0/dbhome_1/bin currentTime=`date +%Y%m%d` /usr/bin/find /app/admin/admin/back-updata/ -mtime +5 -name "*.dmp" -exec rm -rf {} ; /app/admin/product/11.2.0/dbhome_1/bin/exp bas5/bas5@10.100.2.74/bpmprd file=/app/admin/admin/back-updata/${currentTime}.dmp > /app/admin/admin/back-updata/dmp.log 2>&1 ~