Backup
線上備份不是從 LINUX 伺服器上的 CRON 作業執行的(手動可以工作)
我製作了一個腳本,當實例所有者手動執行它時,它可以成功執行線上備份。腳本如下(最初是兩行)。
#!/bin/bash /opt/ibm/db2/V9.7/bin/db2 backup database maxdb71 online to "/data/archiveBackup" WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 INCLUDE LOGS WITHOUT PROMPTING;
正如我所說,當我由實例所有者手動執行它時,它可以工作。我把它放在實例所有者 crontab 中。
crontab -l
列出此腳本,並且伺服器上的日期/時間是可以的。為什麼腳本在手動執行時執行正常時不執行線上備份?
謝謝
您的腳本從命令行執行但從 cron 失敗的原因很可能是您的 DB2 環境已經為互動式會話初始化(即通過您的 .profile),而當由
cron
.這是一個建議的修改:
#!/bin/bash # # Setup DB2 Environment . $HOME/sqllib/db2profile # Back up Database db2 -v "backup database maxdb71 online to /data/archiveBackup INCLUDE LOGS WITHOUT PROMPTING"
幾點評論:
- 如果您通過 cron 為實例所有者執行它,這將起作用。但是,因為它取決於
$HOME
環境變數,如果您想通過 cron 以不同的使用者身份執行它,則需要使用實例所有者主目錄的實際路徑。- 您不應該在 中引用二進製文件
/opt/ibm/db2/...
,而應該使用 DB2 實例中的二進製文件。因為腳本從 初始化環境db2profile
,所以db2
命令將在腳本的$PATH
.- 我從您的備份命令中刪除了一些選項,因為這些不是必需的。DB2 在為這些選擇執行時值時非常聰明,因此如果您覆蓋預設值,您可能會得到更差的備份性能。
- 從 cron 執行腳本時,請確保將輸出擷取到日誌文件中。這對於調試目的非常有用。範例 crontab:
00 23 * * * /path/to/script/backup.sh > /path/to/script/backup.log 2>&1