

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Oracle 時區檔案自動升級
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade"></a>

利用 `TIMEZONE_FILE_AUTOUPGRADE` 選項，您可在您的 RDS for Oracle 資料庫執行個體上將目前的時區檔案升級為最新版本。

**Topics**
+ [Oracle 時區檔案的概觀](Appendix.Oracle.Options.Timezone-file-autoupgrade.tz-overview.md)
+ [更新時區檔案的策略](Appendix.Oracle.Options.Timezone-file-autoupgrade.strategies.md)
+ [時區檔案更新期間的停機時間](Appendix.Oracle.Options.Timezone-file-autoupgrade.considerations.md)
+ [準備更新時區檔案](Appendix.Oracle.Options.Timezone-file-autoupgrade.preparing.md)
+ [新增時區檔案自動升級選項](Appendix.Oracle.Options.Timezone-file-autoupgrade.adding.md)
+ [更新時區檔案後，檢查您的資料](Appendix.Oracle.Options.Timezone-file-autoupgrade.checking.md)

# Oracle 時區檔案的概觀
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.tz-overview"></a>

Oracle Database *時區檔案*存放下列資訊：
+ 與國際標準時間 (UTC) 的偏移
+ 日光節約時間 (DST) 的轉換時間
+ 標準時間和 DST 的縮寫

Oracle Database 提供多個版本的時區檔案。當您在內部部署環境中建立 Oracle 資料庫時，請選擇時區檔案版本。如需詳細資訊，請參閱《Oracle Database 全球化支援指南》**中的[選擇時區檔案](https://docs.oracle.com/en/database/oracle/oracle-database/19/nlspg/datetime-data-types-and-time-zone-support.html#GUID-805AB986-DE12-4FEA-AF56-5AABCD2132DF)。

如果 DST 的規則變更，Oracle 會發佈新的時區檔案。Oracle 會獨立於每季版本更新 (RU) 和版本更新修訂版 (RUR) 的排程，發行這些新的時區檔案。時區檔案位於資料庫主機上的目錄 `$ORACLE_HOME/oracore/zoneinfo/` 中。時區檔案名稱使用格式 DSTv*version*，如 DSTv35 中所示。

## 時區檔案如何影響資料傳輸
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.data-transfer"></a>

在 Oracle 資料庫中，`TIMESTAMP WITH TIME ZONE` 資料類型儲存時間戳記和時區資料。具 `TIMESTAMP WITH TIME ZONE` 資料類型的資料會使用相關聯時區檔案版本中的規則。因此，當您更新時區檔案時，現有的 `TIMESTAMP WITH TIME ZONE` 資料會受到影響。

當您在使用不同版本時區檔案的資料庫之間傳輸資料時，可能會發生問題。例如，若您從具有較目標資料庫更高之時區檔案版本的來源資料庫匯入資料，資料庫會發出 `ORA-39405` 錯誤。在以前，您必須使用下列任一技術來解決此錯誤：
+ 利用所需的時區檔案建立一個 RDS for Oracle 資料庫執行個體，從來源資料庫匯出資料，接著將其匯入新的資料庫。
+ 使用 AWS DMS 或邏輯複寫來遷移您的資料。

## 使用 TIMEZONE\$1FILE\$1AUTOUPGRADE 選項自動更新
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.option-overview"></a>

當連接至 RDS for Oracle 資料庫執行個體的選項群組包含 `TIMEZONE_FILE_AUTOUPGRADE` 選項時，RDS 會自動更新您的時區檔案。藉由確保 Oracle 資料庫使用相同的時區檔案版本，您可以在不同環境之間移動資料時避免耗費時間的手動技術。容器資料庫 (CDB) 和非 CDB 都支援 `TIMEZONE_FILE_AUTOUPGRADE` 選項。

將 `TIMEZONE_FILE_AUTOUPGRADE` 選項新增至選項群組時，您可以選擇立即新增選項還是在維護時段新增選項。在資料庫執行個體套用新選項之後，RDS 會檢查是否可以安裝較新的 DSTv*version* 檔案。目標 DSTv*version* 取決於下列項目：
+ 您的資料庫執行個體目前正在執行的次要引擎版本
+ 您要將資料庫執行個體升級至其中的次要引擎版本

例如，您目前的時區檔案版本可能是 DSTv33。當 RDS 將更新套用至您的選項群組時，可能會判斷 DSTv34 目前可在您的資料庫執行個體檔案系統上使用。然後，RDS 會自動將您的時區檔案更新為 DSTv34。

若要在支援的 RDS 版本更新中尋找可用的 DST 版本，請查看[適用於 Oracle 的 Amazon Relational Database Service (Amazon RDS) 版本備註](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/Welcome.html)中的修補程式。例如，[版本 19.0.0.0.ru-2022-10.rur-2022-10.r1](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-19-0.html#oracle-version-RU-RUR.19.0.0.0.ru-2022-10.rur-2022-10.r1) 列出修補程式 34533061: RDBMS - DSTV39 UPDATE - TZDATA2022C。

# 更新時區檔案的策略
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.strategies"></a>

升級資料庫引擎並將 `TIMEZONE_FILE_AUTOUPGRADE` 選項新增至選項群組是個別的操作。如果有更新的時區檔案可用，新增 `TIMEZONE_FILE_AUTOUPGRADE` 選項會初始化時區檔案的更新。您可以立即或在下一個維護時段執行下列命令 (僅顯示相關選項)：
+ 僅使用下列 RDS CLI 命令升級資料庫引擎：

  ```
  modify-db-instance --engine-version name ...
  ```
+ 僅使用下列 CLI 命令新增 `TIMEZONE_FILE_AUTOUPGRADE` 選項：

  ```
  add-option-to-option-group --option-group-name name --options OptionName=TIMEZONE_FILE_AUTOUPGRADE ...
  ```
+ 使用以下 CLI 命令升級資料庫引擎，並將新的選項群組新增至執行個體：

  ```
  modify-db-instance --engine-version name --option-group-name name ...
  ```

您的更新策略取決於您要一起升級資料庫和時區檔案，還是只執行其中一個操作。請注意，如果您更新選項群組，然後在不同的 API 操作中升級資料庫引擎，則升級資料庫引擎時，時區檔案更新可能正在進行中。

本節中的範例假設如下情況：
+ 您尚未將 `TIMEZONE_FILE_AUTOUPGRADE` 新增至目前與資料庫執行個體相關聯的選項群組。
+ 您的資料庫執行個體使用資料庫版本 19.0.0.0.ru-2019-07.rur-2019-07.r1 和時區檔案 DSTv33。
+ 您的資料庫執行個體檔案系統包含檔案 DSTv34。
+ 版本更新 19.0.0.0.ru-2022-10.rur-2022-10.r1 包含 DSTv35。

若要更新您的時區檔案，您可以使用下列策略。

**Topics**
+ [更新時區檔案，而不升級引擎](#Appendix.Oracle.Options.Timezone-file-autoupgrade.strategies.no-upgrade)
+ [升級時區檔案和資料庫引擎版本](#Appendix.Oracle.Options.Timezone-file-autoupgrade.strategies.upgrade)
+ [升級您的資料庫引擎版本，而不更新時區檔案](#Appendix.Oracle.Options.Timezone-file-autoupgrade.strategies.upgrade-only)

## 更新時區檔案，而不升級引擎
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.strategies.no-upgrade"></a>

在這個案例中，您的資料庫使用的是 DSTv33，但 DSTv34 可在資料庫執行個體檔案系統上使用。您想要將資料庫執行個體所使用的時區檔案從 DSTv33 更新為 DSTv34，但不想要將您的引擎升級至次要版本，其中包括 DSTv35。

在 `add-option-to-option-group` 命令中，將 `TIMEZONE_FILE_AUTOUPGRADE` 新增至資料庫執行個體所使用的選項群組。指定要立即新增選項還是將其延遲至維護時段。套用 `TIMEZONE_FILE_AUTOUPGRADE` 選項後，RDS 會執行下列操作：

1. 檢查是否有新的 DST 版本。

1. 判斷 DSTv34 是否可在檔案系統上使用。

1. 立即更新時區檔案。

## 升級時區檔案和資料庫引擎版本
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.strategies.upgrade"></a>

在這個案例中，您的資料庫使用的是 DSTv33，但 DSTv34 可在資料庫執行個體檔案系統上使用。您想要將資料庫引擎升級至次要版本 19.0.0.0.ru-2022-10.rur-2022-10.r1 (其中包括 DSTv35)，並在引擎升級期間將時區檔案更新為 DSTv35。因此，您的目標是跳過 DSTv34 並將您的時區檔案直接更新為 DSTv35。

若要一起升級引擎和時區檔案，請搭配 `--option-group-name` 和 `--engine-version` 選項執行 `modify-db-instance`。您可以立即執行命令，或將其延遲至維護時段。`In --option-group-name`，請指定包含 `TIMEZONE_FILE_AUTOUPGRADE` 選項的選項群組。例如：

```
aws rds modify-db-instance 
    --db-instance-identifier my-instance \
    --engine-version new-version \
    ----option-group-name og-with-timezone-file-autoupgrade \    
    --apply-immediately
```

RDS 開始將您的引擎升級至 19.0.0.0.ru-2022-10.rur-2022-10.r1。套用 `TIMEZONE_FILE_AUTOUPGRADE` 選項之後，RDS 會檢查是否有新的 DST 版本、查看 DSTv35 是否可在 19.0.0.0.ru-2022-10.rur-2022-10.r1 取得，並立即開始更新至 DSTv35。

若要立即升級您的引擎，然後升級時區檔案，請依序執行操作：

1. 僅使用下列 CLI 命令升級資料庫引擎：

   ```
   aws rds modify-db-instance \
       --db-instance-identifier my-instance \
       --engine-version new-version \
       --apply-immediately
   ```

1. 使用下列 CLI 命令，將 `TIMEZONE_FILE_AUTOUPGRADE` 選項新增到連接至執行個體的選項群組：

   ```
   aws rds add-option-to-option-group \
       --option-group-name og-in-use-by-your-instance \
       --options OptionName=TIMEZONE_FILE_AUTOUPGRADE \
       --apply-immediately
   ```

## 升級您的資料庫引擎版本，而不更新時區檔案
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.strategies.upgrade-only"></a>

在這個案例中，您的資料庫使用的是 DSTv33，但 DSTv34 可在資料庫執行個體檔案系統上使用。您想要將資料庫引擎升級到版本 19.0.0.0.ru-2022-10.rur-2022-10.r1 (其中包括 DSTv35)，但保留時區檔案 DSTv33。您可能會因下列原因選擇此策略：
+ 您的資料不使用 `TIMESTAMP WITH TIME ZONE` 資料類型。
+ 您的資料會使用 `TIMESTAMP WITH TIME ZONE` 資料類型，但您的資料不會受到時區變更的影響。
+ 您想要延遲更新時區檔案，因為您無法容忍額外的停機時間。

您的策略取決於下列哪個可能性是真的：
+ 您的資料庫執行個體並未與包含 `TIMEZONE_FILE_AUTOUPGRADE` 的選項群組相關聯。在您的 `modify-db-instance` 命令中，請勿指定新的選項群組，這樣 RDS 就不會更新您的時區檔案。
+ 您的資料庫執行個體目前與包含 `TIMEZONE_FILE_AUTOUPGRADE` 的選項群組相關聯。在單一 `modify-db-instance` 命令中，將您的資料庫執行個體與未包含 `TIMEZONE_FILE_AUTOUPGRADE` 的選項群組建立關聯，然後將您的資料庫引擎升級至 19.0.0.0.ru-2022-10.rur-2022-10.r1。

# 時區檔案更新期間的停機時間
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.considerations"></a>

當 RDS 更新您的時區檔案時，使用 `TIMESTAMP WITH TIME ZONE` 的現有資料可能會變更。在此情況下，您的主要考量是停機時間。

**警告**  
若您新增 `TIMEZONE_FILE_AUTOUPGRADE` 選項，則您的引擎升級可能會延長停機時間。更新大型資料庫的時區資料可能需要花費數小時或數天。

時區檔案更新的長度視下列因素而定：
+ 您資料庫中 `TIMESTAMP WITH TIME ZONE` 資料的總量
+ 資料庫執行個體組態
+ DB instance class (資料庫執行個體類別)
+ 儲存組態
+ 資料庫組態
+ 資料庫參數設定

當您執行下列動作時，可能會出現額外的停機時間：
+ 資料庫執行個體使用過期時區檔案時，請將選項新增至選項群組
+ 當新引擎版本包含一個新版本的時區檔案時，請升級 Oracle 資料庫引擎

**注意**  
於時區檔案更新期間，RDS for Oracle 會呼叫 `PURGE DBA_RECYCLEBIN`。

# 準備更新時區檔案
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.preparing"></a>

時區檔案升級有兩個不同的階段：準備和升級。雖然並非必要，但強烈建議您執行準備步驟。於此步驟中，您可以找出將受執行 PL/SQL 程序 `DBMS_DST.FIND_AFFECTED_TABLES` 影響的資料。如需準備視窗的詳細資訊，請參閱 Oracle 資料庫文件中的[使用時區資料升級時區檔案和時間戳記](https://docs.oracle.com/en/database/oracle/oracle-database/19/nlspg/datetime-data-types-and-time-zone-support.html#GUID-B0ACDB2E-4B49-4EB4-B4CC-9260DAE1567A)。

**如要準備更新時區檔案**

1. 使用 SQL 用戶端連線至您的 Oracle 資料庫。

1. 決定目前使用的時區檔案版本。

   ```
   SELECT * FROM V$TIMEZONE_FILE;
   ```

1. 決定您資料庫執行個體上可用的最新時區檔案版本。

   ```
   SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
   ```

1. 決定具有類型 `TIMESTAMP WITH LOCAL TIME ZONE` 或 `TIMESTAMP WITH TIME ZONE` 資料欄的資料表總大小。

   ```
   SELECT SUM(BYTES)/1024/1024/1024 "Total_size_w_TSTZ_columns_GB"
   FROM   DBA_SEGMENTS
   WHERE  SEGMENT_TYPE LIKE 'TABLE%'
   AND    (OWNER, SEGMENT_NAME) IN
            (SELECT OWNER, TABLE_NAME
             FROM   DBA_TAB_COLUMNS
             WHERE  DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE');
   ```

1. 決定具有類型 `TIMESTAMP WITH LOCAL TIME ZONE` 或 `TIMESTAMP WITH TIME ZONE` 資料欄的區段名稱和大小。

   ```
   SELECT OWNER, SEGMENT_NAME, SUM(BYTES)/1024/1024/1024 "SEGMENT_SIZE_W_TSTZ_COLUMNS_GB"
   FROM   DBA_SEGMENTS
   WHERE  SEGMENT_TYPE LIKE 'TABLE%'
   AND    (OWNER, SEGMENT_NAME) IN
            (SELECT OWNER, TABLE_NAME
             FROM   DBA_TAB_COLUMNS
             WHERE  DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE')
   GROUP BY OWNER, SEGMENT_NAME;
   ```

1. 執行準備步驟。
   + 程序 `DBMS_DST.CREATE_AFFECTED_TABLE` 會建立資料表，來儲存任何受影響的資料。您將此資料表的名稱傳遞給 `DBMS_DST.FIND_AFFECTED_TABLES` 程序。如需詳細資訊，請參閱 Oracle 資料庫文件中的 [CREATE\$1AFFECTED\$1TABLE 程序](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DST.html#GUID-C53BAABA-914A-404C-9CD5-823257BE0B00)。
   + 此程序 `CREATE_ERROR_TABLE` 會建立一個資料表來記錄錯誤。如需詳細資訊，請參閱 Oracle 資料庫文件中的 [CREATE\$1ERROR\$1TABLE 程序](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DST.html#GUID-6A7EA024-B02D-4486-B1D6-EF6ABF5DE507)。

   下列範例會建立受影響的資料和錯誤資料表，並找出所有受影響的資料表。

   ```
   EXEC DBMS_DST.CREATE_ERROR_TABLE('my_error_table')
   EXEC DBMS_DST.CREATE_AFFECTED_TABLE('my_affected_table')
   
   EXEC DBMS_DST.BEGIN_PREPARE(new_version);
   EXEC DBMS_DST.FIND_AFFECTED_TABLES('my_affected_table', TRUE, 'my_error_table');
   EXEC DBMS_DST.END_PREPARE;
   
   SELECT * FROM my_affected_table;
   SELECT * FROM my_error_table;
   ```

1. 查詢受影響和錯誤資料表。

   ```
   SELECT * FROM my_affected_table;
   SELECT * FROM my_error_table;
   ```

# 新增時區檔案自動升級選項
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.adding"></a>

當您將選項新增至選項群組時，選項群組會處於下列其中一種狀態：
+ 現有的選項群組目前連接至少一個資料庫執行個體。當您新增選項時，使用此選項群組的所有資料庫執行個體都會自動重新啟動。這會導致短暫的中斷。
+ 現有的選項群組未連接至任何資料庫執行個體。您計劃新增選項，然後將現有選項群組與現有資料庫執行個體或新的資料庫執行個體建立關聯。
+ 您可以建立新的選項群組並新增選項。您計劃將新的選項群組與現有的資料庫執行個體或與新的資料庫執行個體建立關聯。

## 主控台
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.console"></a>

**如要將時區檔案自動升級新增至資料庫執行個體**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 判斷要使用的選項群組。您可以建立新的選項群組或使用現有的選項群組。如果您要使用現有的選項群組，請跳到下一個步驟。否則請使用下列設定來建立自訂資料庫選項群組：

   1. 針對 **Engine** (引擎)，選擇適用於資料庫執行個體的 Oracle Database 版本。

   1. 針對 **Major engine version (主要引擎版本)**，請選擇適用於資料庫執行個體的版本。

   如需詳細資訊，請參閱[建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 選擇您要修改的選項群組，然後選擇 **Add option (新增選項)**。

1. 在 **Add option (新增選項)** 視窗中，執行下列作業：

   1. 選擇 **TIMEZONE\$1FILE\$1AUTOUPGRADE**。

   1. 若要在所有關聯的資料庫執行個體新增選項時隨即啟用選項，請在 **Apply Immediately (立即套用)**​ 選擇 **​Yes (是)**。如果您選擇了 **No (不)** (預設)，選項將會在下一個維護時段為每個關聯的資料庫執行個體啟用。

1. 當您滿意設定後，選擇 **Add option (新增選項)**。

## AWS CLI
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.CLI"></a>

下列範例使用 AWS CLI [add-option-to-option-group](https://docs.aws.amazon.com/cli/latest/reference/rds/add-option-to-option-group.html) 命令，將 `TIMEZONE_FILE_AUTOUPGRADE`選項新增至名為 的選項群組`myoptiongroup`。

針對 Linux、macOS 或 Unix：

```
aws rds add-option-to-option-group \
    --option-group-name "myoptiongroup" \
    --options "OptionName=TIMEZONE_FILE_AUTOUPGRADE" \
    --apply-immediately
```

在 Windows 中：

```
aws rds add-option-to-option-group ^
    --option-group-name "myoptiongroup" ^
    --options "OptionName=TIMEZONE_FILE_AUTOUPGRADE" ^
    --apply-immediately
```

# 更新時區檔案後，檢查您的資料
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.checking"></a>

我們建議您於更新時區檔案後檢查您的資料。在準備步驟期間，RDS for Oracle 會自動建立下列表格：
+ `rdsadmin.rds_dst_affected_tables` - 列出包含受更新影響之資料的表格
+ `rdsadmin.rds_dst_error_table` - 列出更新期間產生的錯誤

這些表格獨立於您在準備視窗中建立的任何表格。如要查看更新的結果，請查詢資料表，如下所示。

```
SELECT * FROM rdsadmin.rds_dst_affected_tables;
SELECT * FROM rdsadmin.rds_dst_error_table;
```

如需有關受影響資料和錯誤資料表結構描述的詳細資訊，請參閱 Oracle 文件中的 [FIND\$1AFFECTED\$1TABLES 程序](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DST.html#GUID-1F977505-671C-4D5B-8570-86956F136199)。