備份範本的指令碼

本頁面說明如何在備份範本中新增指令碼。說明指令碼在備份工作期間執行的不同階段。

您可以編寫指令碼並執行指令碼,在備份工作開始時、執行期間或完成後執行動作。這也稱為前置和後置指令碼。

指令碼位置

在安裝代理程式時,系統會自動建立指令碼資料夾,其中包含需要保護的檔案系統或資料庫。您必須將指令碼放在下列資料夾中,才能執行:

  • 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 表示正在執行的工作是記錄備份工作,而非完整資料庫備份工作。

您可能不需要執行所有五個階段,就能取得所選的記錄輸出內容。您只能使用初始和最終階段,指出備份程序的開始和結束時間。

您也可以自訂指令碼來執行其他工作,例如停止服務或執行其他指令。

在備份範本中新增指令碼

請按照下列操作說明,將指令碼新增至備份範本。

  1. 按一下「備援計畫」,然後從下拉式清單中選取「範本」
  2. 選取包含 OnVault 政策的範本。「範本」頁面隨即開啟,並顯示所選備份範本。
  3. 在「範本」頁面的「政策」區域中,按一下「快照」旁邊的「+ 新增」
  4. 按一下「進階政策設定」
  5. 捲動至「指令碼名稱」,然後複製並貼上以下指令碼:

    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
    
  6. 按一下 [儲存變更]。

  7. 執行隨選工作

    系統會顯示兩個不同資料庫的輸出結果。一個是記錄備份工作,另一個是增量快照。

    $ 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