本頁面說明如何在備份範本中新增指令碼。說明指令碼在備份工作期間執行的不同階段。
您可以編寫指令碼並執行指令碼,在備份工作開始時、執行期間或完成後執行動作。這也稱為前置和後置指令碼。
指令碼位置
在安裝代理程式時,系統會自動建立指令碼資料夾,其中包含需要保護的檔案系統或資料庫。您必須將指令碼放在下列資料夾中,才能執行:
- Windows 主機:
\Program Files\Google Cloud Backup and DR\scripts
- Linux 主機:
/act/scripts
,並將指令碼設為可執行 (chmod 755 *.sh)
指令碼階段
指令碼會在下列階段執行。如果指令碼無法執行,請檢查指令碼是否位於指令碼資料夾中。
- INIT:當備份/復原工具連線至代理程式時,這個階段就會開始。在此階段,系統會初始化工作並驗證憑證。
- PRE:這個階段會在工作的主要作業開始前執行。對於快照,這個階段會在應用程式凍結前開始。對於掛接類型的工作,這會在裝置對應至主機後,但在啟動代理程式操作 (例如重新掃描、匯入和掛接檔案系統) 之前。
- POST:工作的主要作業完成後,系統會立即開始這個階段。對於備份類型工作,這會是在應用程式解凍後。對於掛載類型工作,這個階段會在所有匯入、掛載或將應用程式上線的作業完成後開始。
- FINAL:此階段是工作結束階段。除非指令碼傳回的非零代碼導致工作失敗,否則工作就會完成。
- ABORT:這個階段會處理已終止的工作失敗情形。
範例:指令碼
以下範例說明如何在備份工作程序的不同階段執行主機端指令碼。這個工作流程包含五個指令碼,可輸出日期或時間、應用程式名稱 (檔案系統或資料庫名稱)、工作類型、工作名稱、記錄保留值 (以天為單位),以及用於指出備份工作處理階段的文字。
```sh
$ cat /act/scripts/init.sh
#!/bin/sh
if [ "${ACT_JOBTYPE}" = "logbackup" ]; then
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_ARCHIVELOG_BACKUP JobPhase:INIT" >> /tmp/backup_status.log
else
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_INCREMENTAL_BACKUP JobPhase:INIT" >> /tmp/backup_status.log
fi
$ cat /act/scripts/pre.sh
#!/bin/sh
if [ "${ACT_JOBTYPE}" = "logbackup" ]; then
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_ARCHIVELOG_BACKUP JobPhase:PRE" >> /tmp/backup_status.log
else
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_INCREMENTAL_BACKUP JobPhase:PRE" >> /tmp/backup_status.log
fi
$ cat /act/scripts/post.sh
#!/bin/sh
if [ "${ACT_JOBTYPE}" = "logbackup" ]; then
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_ARCHIVELOG_BACKUP JobPhase:POST" >> /tmp/backup_status.log
else
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_INCREMENTAL_BACKUP JobPhase:POST" >> /tmp/backup_status.log
fi
$ cat /act/scripts/fini.sh
#!/bin/sh
if [ "${ACT_JOBTYPE}" = "logbackup" ]; then
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_ARCHIVELOG_BACKUP JobPhase:FINAL" >> /tmp/backup_status.log
else
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_INCREMENTAL_BACKUP JobPhase:FINAL" >> /tmp/backup_status.log
fi
$ cat /act/scripts/abort.sh
#!/bin/sh
if [ "${ACT_JOBTYPE}" = "logbackup" ]; then
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_ARCHIVELOG_BACKUP JobPhase:ABORT" >> /tmp/backup_status.log
else
echo `date` "${ACT_JOBNAME}_${ACT_APPNAME}_INCREMENTAL_BACKUP JobPhase:ABORT" >> /tmp/backup_status.log
fi
```
在上一個範例中,ACT_JOBTYPE = logbackup
表示正在執行的工作是記錄備份工作,而非完整資料庫備份工作。
您可能不需要執行所有五個階段,就能取得所選的記錄輸出內容。您只能使用初始和最終階段,指出備份程序的開始和結束時間。
您也可以自訂指令碼來執行其他工作,例如停止服務或執行其他指令。
在備份範本中新增指令碼
請按照下列操作說明,將指令碼新增至備份範本。
- 按一下「備援計畫」,然後從下拉式清單中選取「範本」。
- 選取包含 OnVault 政策的範本。「範本」頁面隨即開啟,並顯示所選備份範本。
- 在「範本」頁面的「政策」區域中,按一下「快照」旁邊的「+ 新增」。
- 按一下「進階政策設定」。
捲動至「指令碼名稱」,然後複製並貼上以下指令碼:
path=init.sh:phase=init;path=pre.sh:phase=pre;path=post.sh:phase=post;path=fini.sh:phase=final:timeout=300;path=abort.sh:phase=abort
按一下 [儲存變更]。
-
系統會顯示兩個不同資料庫的輸出結果。一個是記錄備份工作,另一個是增量快照。
$ cat /tmp/backup_status.log Wed Nov 22 06:11:49 UTC 2023 Job_0275501_ORCLCDB_ARCHIVELOG_BACKUP JobPhase:INIT Wed Nov 22 06:13:52 UTC 2023 Job_0275501_ORCLCDB_ARCHIVELOG_BACKUP JobPhase:PRE Wed Nov 22 06:15:01 UTC 2023 Job_0275501_ORCLCDB_ARCHIVELOG_BACKUP JobPhase:POST Wed Nov 22 06:15:01 UTC 2023 Job_0275501_ORCLCDB_ARCHIVELOG_BACKUP JobPhase:FINAL Wed Nov 22 06:18:00 UTC 2023 Job_0275637_SMALL_INCREMENTAL_BACKUP JobPhase:INIT Wed Nov 22 06:20:15 UTC 2023 Job_0275637_SMALL_INCREMENTAL_BACKUP JobPhase:PRE Wed Nov 22 06:22:06 UTC 2023 Job_0275637_SMALL_INCREMENTAL_BACKUP JobPhase:POST Wed Nov 22 06:22:06 UTC 2023 Job_0275637_SMALL_INCREMENTAL_BACKUP JobPhase:FINAL
將環境變數傳入記錄檔案
您可以使用下列清單中前面有 ACT_
的環境變數,將工作中的環境資訊匯出至指令碼。並非所有環境變數都適用於所有工作類型。
ACT_APPID
:應用程式的資料庫 ID。ACT_APPNAME
:應用程式名稱。ACT_HOSTNAME
:主機名稱,也就是這項工作的目標。ACT_JOBNAME
:工作名稱。ACT_JOBTYPE
:工作類別的文字版本。ACT_LOGSMART_TYPE
:唯一有效的值為「db」。必須提供這個值,系統才能擷取資料庫記錄。ACT_OPTIONS
:適用於這份工作的政策選項ACT_PHASE
:描述工作階段的文字字串。ACT_POLICY
:與這份工作相關的政策名稱。ACT_POLICYOPT_logbackupretention
:記錄備份工作保留的天數。這項屬性只會顯示在資料庫記錄備份工作中。ACT_PROFILE
:設定檔名稱。ACT_SCRIPT_TMOUT
:超連結逾時時間。如果未在逾時值 (預設為 60 秒) 內收到回應,則指令碼會失敗。ACT_SOURCEHOST
:這個應用程式的來源主機名稱。ACT_TEMPLATE
:與工作相關的範本名稱。ACT_TIMEOUT
:指令碼的定義時間長度,以秒為單位。如果指令碼未在逾時時間內完成,工作就會失敗。ACT_VOLUMES
:針對一般應用程式,列出已設定備份的磁碟區。如要瞭解可用的環境變數,請在腳本中加入這行程式碼。echo printenv >> /tmp/backup_status.log