Oracle 時區檔案自動升級 - Amazon Relational Database Service

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

Oracle 時區檔案自動升級

您可以TIMEZONE_FILE_AUTOUPGRADE選擇將目前的時區檔案升級到 RDS for Oracle 資料庫執行個體的最新版本。

Oracle 時區檔案的概觀

Oracle Database 時區檔案存放下列資訊:

  • 與國際標準時間 (UTC) 的偏移

  • 日光節約時間 (DST) 的轉換時間

  • 標準時間和 DST 的縮寫

Oracle Database 提供多個版本的時區檔案。當您在內部部署環境中建立 Oracle 資料庫時,請選擇時區檔案版本。如需詳細資訊,請參閱《Oracle Database 全球化支援指南》中的選擇時區檔案

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

時區檔案如何影響資料傳輸

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

當您在使用不同版本時區檔案的資料庫之間傳輸資料時,可能會發生問題。例如,如果您從時區檔案版本高於目標資料庫的來源資料庫匯入資料,則資料庫就會發出ORA-39405錯誤。在以前,您必須使用下列任一技術來解決此錯誤:

  • 利用所需的時區檔案建立一個 RDS for Oracle 資料庫執行個體,從來源資料庫匯出資料,接著將其匯入新的資料庫。

  • 使用 AWS DMS 或邏輯複寫來移轉資料。

使用 TIMEZONE_FILE_AUTOUPGRADE 選項自動更新

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

TIMEZONE_FILE_AUTOUPGRADE 選項新增至選項群組時,您可以選擇立即新增選項還是在維護時段新增選項。資料庫執行個體套用新選項後,RDS 會檢查是否可以安裝較新的 DSTV 版本檔案。目標 DSTvversion 取決於下列項目:

  • 您的資料庫執行個體目前正在執行的次要引擎版本

  • 您要將資料庫執行個體升級至其中的次要引擎版本

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

若要在支援的 RDS 版本更新中尋找可用的 DST 版本,請查看適用於 Oracle 的 Amazon Relational Database Service (Amazon RDS) 版本備註中的修補程式。例如,版本 19.0.0.0.ru-2022-10.rur-2022-10.r1 列出修補程式 34533061: RDBMS - DSTV39 UPDATE - TZDATA2022C。

更新時區檔案的策略

升級您的數據庫引擎並將選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。

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

更新時區檔案,而不升級引擎

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

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

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

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

  3. 立即更新時區檔案。

升級時區檔案和資料庫引擎版本

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

若要同時升級引擎和時區檔案,請modify-db-instance使用--option-group-name和選--engine-version項執行。您可以立即執行指令,或將其延遲至維護時段。 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.Ru-10。套用此TIMEZONE_FILE_AUTOUPGRADE選項之後,RDS 會檢查是否有新的 DST 版本,並會看到 DSTV35 是否有提供,並立即開始對 DSv35 的更新。

若要立即升級引擎,然後升級您的時區檔案,請依序執行作業:

  1. 僅使用以下 CLI 命令升級您的數據庫引擎:

    aws rds modify-db-instance \ --db-instance-identifier my-instance \ --engine-version new-version \ --apply-immediately
  2. 使用下列 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

升級您的資料庫引擎版本,而不更新時區檔案

在這個案例中,您的資料庫使用的是 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。

時區檔案更新期間的停機時間

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

警告

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

時區檔案更新的長度視下列因素而定:

  • 您資料庫中 TIMESTAMP WITH TIME ZONE 資料的總量

  • 資料庫執行個體組態

  • DB instance class (資料庫執行個體類別)

  • 儲存組態

  • 資料庫組態

  • 資料庫參數設定

當您執行下列動作時,可能會出現額外的停機時間:

  • 資料庫執行個體使用過期時區檔案時,請將選項新增至選項群組

  • 當新引擎版本包含一個新版本的時區檔案時,請升級 Oracle 資料庫引擎

注意

於時區檔案更新期間,RDS for Oracle 會呼叫 PURGE DBA_RECYCLEBIN

準備更新時區檔案

時區檔案升級有兩個不同的階段:準備和升級。雖然並非必要,但強烈建議您執行準備步驟。於此步驟中,您可以找出將受執行 PL/SQL 程序 DBMS_DST.FIND_AFFECTED_TABLES 影響的資料。如需準備視窗的詳細資訊,請參閱 Oracle 資料庫文件中的使用時區資料升級時區檔案和時間戳記

如要準備更新時區檔案
  1. 使用 SQL 用戶端連線至您的 Oracle 資料庫。

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

    SELECT * FROM V$TIMEZONE_FILE;
  3. 決定您資料庫執行個體上可用的最新時區檔案版本。

    SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
  4. 決定具有類型 TIMESTAMP WITH LOCAL TIME ZONETIMESTAMP 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');
  5. 決定具有類型 TIMESTAMP WITH LOCAL TIME ZONETIMESTAMP 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;
  6. 執行準備步驟。

    • 程序 DBMS_DST.CREATE_AFFECTED_TABLE 會建立資料表,來儲存任何受影響的資料。您將此資料表的名稱傳遞給 DBMS_DST.FIND_AFFECTED_TABLES 程序。如需詳細資訊,請參閱 Oracle 資料庫文件中的 CREATE_AFFECTED_TABLE 程序

    • 此程序 CREATE_ERROR_TABLE 會建立一個資料表來記錄錯誤。如需詳細資訊,請參閱 Oracle 資料庫文件中的 CREATE_ERROR_TABLE 程序

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

    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;
  7. 查詢受影響和錯誤資料表。

    SELECT * FROM my_affected_table; SELECT * FROM my_error_table;

新增時區檔案自動升級選項

當您將選項新增至選項群組時,選項群組會處於下列其中一種狀態:

  • 現有的選項群組目前連接至少一個資料庫執行個體。當您新增選項時,使用此選項群組的所有資料庫執行個體都會自動重新啟動。這會導致短暫的中斷。

  • 現有的選項群組未連接至任何資料庫執行個體。您計劃新增選項,然後將現有選項群組與現有資料庫執行個體或新的資料庫執行個體建立關聯。

  • 您可以建立新的選項群組並新增選項。您計劃將新的選項群組與現有的資料庫執行個體或與新的資料庫執行個體建立關聯。

主控台

如要將時區檔案自動升級新增至資料庫執行個體
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 在導覽窗格中,選擇 Option groups (選項群組)。

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

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

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

    如需詳細資訊,請參閱 建立選項群組

  4. 選擇您要修改的選項群組,然後選擇 Add option (新增選項)

  5. Add option (新增選項) 視窗中,執行下列作業:

    1. 選擇 TIMEZONE_FILE_AUTOUPGRADE

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

  6. 當您滿意設定後,選擇 Add option (新增選項)

AWS CLI

下列範例會使用新 AWS CLI 增選項至選項群組命令,將選項加入至名為的TIMEZONE_FILE_AUTOUPGRADE選項群組。myoptiongroup

對於LinuxmacOS、或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

更新時區檔案後,檢查您的資料

我們建議您於更新時區檔案後檢查您的資料。在準備步驟期間,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_AFFECTED_TABLES 程序