Backup

線上備份不是從 LINUX 伺服器上的 CRON 作業執行的(手動可以工作)

  • February 12, 2015

我製作了一個腳本,當實例所有者手動執行它時,它可以成功執行線上備份。腳本如下(最初是兩行)。

#!/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

引用自:https://dba.stackexchange.com/questions/91807