Linux下調用crontab 操作Oracle資料庫

來源:互聯網
上載者:User
最近寫了一個oracle exp自動匯出的指令碼,單獨 執行可以正常運行,放在crontab任務中就無法 執行拉。

指令碼1:setenv.sh

export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/10.2.0
export ORACLE_SID=db
export PATH=$ORACLE_HOME/bin:$PATH
export LANG=zh_CN
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

指令碼2:orabak.sh

#!/bin/bash
/opt/oracle/setenv
bakname=`date +%Y%m%d`
cd /opt/oracle
mkdir -p /opt/oracle/orabak/$bakname
/opt/oracle/10.2.0/bin/exp wyg/wyg file=/opt/oracle/orabak/$bakname/$bakname.dmp log=/opt/oracle/orabak/$bakname/$bakname.log
tar -zcvf /opt/oracle/orabak/$bakname/$bakname.dmp.tgz /opt/oracle/orabak/$bakname/$bakname.dmp
rm -rf /opt/oracle/orabak/$bakname/$bakname.dmp

crontab定時任務設定:

46 20 * * * /opt/oracle/orabak.sh

實驗後的啟示:
1.orabak.sh這個指令碼調用了setenv這個環境變數指令碼,其實完全可以把setenv指令碼中的環境變數寫在orabak.sh中,不必多此一 舉。
2.orabak.sh調用setenv,在crontab中只部分執行,指令碼中exp那段沒有執行,應該和環境變數有很大的關係。把setenv中的環 境變數直接寫到orabak.sh指令碼中,就沒有這個問題。

摘錄這個,解釋crontab環境變數的問題:

crontab是進行例行性工作常用的命令,比如系統備份,編寫一個備份 的shell指令碼後,使用crontab定時執行這個備份指令碼,就可實現自動備份了。將備份時間設定在三更半夜系統訪問量小的時候,既不會影響系統日常使 用,也不用派人盯著,第二天看一下郵件,檢查一下執行結果就好了。
   這裡就不描述如何使用crontab了,這些資料網上一大把,下面將我使用crontab曾經犯過的幾個錯誤和大家分享一下 1.使用普通變數
    crontab執行shell時只能識別為數不多的系統內容變數,普通變數是無法識別的,如果在編寫的指令碼中需要使用變數,需要使用export將變數聲 明為環境變數,指令碼才能正常執行。
2.使用相對路徑

   crontab執行shell時,是不會進入到shell指令碼所在的路徑下執行的,如果shell裡含有相對路徑的話,會找不到路徑的,因此shell腳 本中都要使用絕對路徑。
3.使用權限設定錯誤


   許可權問題永遠是linux需要注意的問題,一定要確保crontab的執行者(/etc/crontab文檔設定的第二項)有訪問shell指令碼所在目錄 並且執行此shell的許可權(可使用chomd和chown修改許可權和所有者)。

3.crontab生效一定要在2分鐘以後,我在做實驗的時候圖快,每次修改了指令碼以後,crontab都在一分鐘之內設定,導致crontab根本就不 起作用,切記。

4.感覺調用setenv這個方法不對,調用的setenv環境變數似乎是在子shell中執行的,所以當前有關oracle的命令在指令碼中就無法正常執 行拉。crontab對環境變數的要求還是蠻高的。

5.crontab執行的指令碼要寫絕對路徑,被執行的指令碼內一定要配置好環境變數,也要用絕對路徑。不是必須,但要結合crontab使用,就必須這樣。

6.結論:當沒有把握做某個事情的時候,還是依照有把握的方法來做吧。不需要setenv指令碼調用,直接把環境變數寫在orabak.sh指令碼中,確保 crontab執行萬無一失。

我的最終可用稿

 

#!/bin/bash
/oracle/backup
bname=`date +%Y%m%d`
cd /oracle
mkdir -p /oracle/backup/db$bname
/oracle/product/11.1.0/db_1/bin/exp cms/cmsadmin owner=cms file=/oracle/backup/db$bname/db$bname.dmp
tar -zcvf /oracle/backup/db$bname/db$bname.dmp.tar.gz /oracle/backup/db$bname/db$bname.dmp
rm -rf /oracle/backup/db$bname/db$bname.dmp
find /oracle/backup -mtime +30 -exec rm -rf {} \;


轉自:http://www.net527.cn/shujukuguanli/Oracle/2010/0319/8097.html


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.