本頁面說明如何將指令碼新增至備份範本。說明指令碼在備份工作中執行的不同階段。
您可以編寫並執行指令碼,在備份工作開始、進行中或完成後執行動作。也稱為前置和後置指令碼。
指令碼位置
安裝代理程式時,系統會自動建立指令碼資料夾,其中包含需要保護的檔案系統或資料庫。您必須將指令碼放在下列資料夾中,才能執行:
- 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 表示正在執行的工作是記錄備份工作,而非完整資料庫備份工作。
您可能不需要執行所有五個階段,就能達到所選記錄輸出。您只能使用 init 和 final 階段,指出備份程序的開始和結束。
您也可以自訂指令碼來執行其他工作,例如停止服務或執行其他指令。
將指令碼新增至備份範本
請按照下列操作說明,將指令碼新增至備份範本。
- 按一下「Backup plans」(備份方案),然後從下拉式清單中選取「Templates」(範本)。
- 選取包含 OnVault 政策的範本。「Templates」(範本) 頁面隨即開啟,並顯示所選備份範本。
- 在「範本」頁面的「政策」區域,點選「快照」旁的「+ 新增」。
- 點選「Advance Policy Settings」。
捲動至「Script Name」(指令碼名稱),然後複製及貼上下列指令碼:
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