臨時收到一個任務,就是在生產環境上定時備份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 ~