在 Amazon RDS for Oracle 中執行主要版本升級時應考慮哪些因素?

上次更新日期:2021 年 9 月 28 日

我有一個執行 Oracle 的 Amazon Relational Database Service (Amazon RDS) 資料庫執行個體。我想知道在執行主要版本升級時必須考慮的因素。

簡短描述

當 Amazon RDS 開始支援新版本的 Oracle 資料庫時,您可以選擇更高版本,然後執行主要版本升級來升級現有的 Oracle 資料庫版本。主要版本可能包括更新、新功能、安全性修正、最佳化工具增強功能,以及效能改善。在升級生產資料庫之前,最佳實務是針對非生產環境中的新版 Oracle 資料庫測試應用程式的功能、相容性和效能。

注意:如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI

解決方案

升級之前

以下是執行主要版本升級之前要記住的一些事項:

升級路徑:驗證從目前 Oracle 資料庫版本到預定主要版本之 Oracle 資料庫的支援升級路徑。您可以執行下列 AWS Command Line Interface (AWS CLI) 命令來檢查有效的升級路徑。

對於 Windows:

aws rds describe-db-engine-versions --engine engine-edition --engine-version current-engine-version --query "DBEngineVersions[*].ValidUpgradeTarget[?IsMajorVersionUpgrade==`true`].EngineVersion"

對於 Linux、macOS 或 Unix:

aws rds describe-db-engine-versions --engine engine-edition --engine-version current-engine-version --query 'DBEngineVersions[*].ValidUpgradeTarget[?IsMajorVersionUpgrade==`true`].EngineVersion'

請務必取代上述命令中的下列值:

  • engine-edition 取代為資料庫引擎的版本。
  • current-engine-version 取代為資料庫引擎的目前版本。

假設您有一個用於 Amazon RDS for Oracle 12.1.0.2.v10 執行個體。若要了解可將 RDS for Oracle 執行個體升級至的所有有效主要版本,請執行下列命令。

對於 Windows:

aws rds describe-db-engine-versions --engine oracle-ee --engine-version 12.1.0.2.v10 --query "DBEngineVersions[*].ValidUpgradeTarget[?IsMajorVersionUpgrade==`true`].EngineVersion"

對於 Linux、macOS 或 Unix:

aws rds describe-db-engine-versions --engine oracle-ee --engine-version 12.1.0.2.v10 --query 'DBEngineVersions[*].ValidUpgradeTarget[?IsMajorVersionUpgrade==`true`].EngineVersion'

執行個體類別:驗證您將要升級的主要版本支援目前的執行個體類別。如需有關 RDS for Oracle 支援之執行個體類別的資訊,請參閱支援的 Oracle 資料庫執行個體類別。您也可以執行下列 AWS CLI 命令來檢查受支援的執行個體類別。

對於 Windows:

aws rds describe-orderable-db-instance-options --engine engine-edition --engine-version new-engine-version --region example-region --query "OrderableDBInstanceOptions[*].DBInstanceClass"

對於 Linux、macOS 或 Unix:

aws rds describe-orderable-db-instance-options --engine engine-edition --engine-version new-engine-version --region example-region --query 'OrderableDBInstanceOptions[*].DBInstanceClass'

請務必取代上述命令中的下列值:

  • engine-edition 取代為資料庫引擎的版本。
  • new-engine-version 取代為您打算升級到的新版本。
  • example-region 取代為您正在使用的區域。

例如,假設您要升級為 RDS for Oracle 12.2.0.1.ru-2020-10.r1 執行個體。若要了解支援特定區域中主要版本的執行個體類別,請執行下列命令:

aws rds describe-orderable-db-instance-options --engine oracle-ee --engine-version 12.2.0.1.ru-2020-10.rur-2020-10.r1 --region us-east-1 --query "OrderableDBInstanceOptions[*].DBInstanceClass"

請務必將命令中 us-east-1 取代為您選擇的「區域」。

用戶端相容性:確認 Oracle 用戶端/驅動程式版本與新的主要版本相容。檢查驅動程式是否必須與主要版本升級一起升級。如需互通性的相關資訊,請參閱 Oracle 文件中的 Oracle 資 料庫用戶端和 Oracle 資料庫互通性

升級方法:您可以使用下列其中一種方式執行主要版本升級:

  • 修改 RDS 執行個體並套用新的主要版本。
    注意:此方法涉及一些停機時間。
  • 使用主要版本建立新的 RDS 執行個體,並使用 AWS 資料遷移服務 (AWS DMS) 遷移資料。
    注意:AWS DMS 使用簡約的方法來遷移資料,並只建立有效遷移資料所需的物件。AWS DMS 會建立資料表、主索引鍵以及在某些情況下唯一索引,但不會建立任何其他物件,這些物件可以有效地從來源遷移資料。例如,AWS DMS 不會建立次要索引、非主索引鍵限制或資料預設值。如需詳細資訊,請參閱 AWS DMS 的高階檢視

選擇下列其中一種方法,根據您的使用案例執行升級。

自訂參數群組:如果您的執行個體具有自訂參數群組,請為新主要版本建立新參數群組,並適當地設定自訂參數。若要識別您目前使用的自訂參數,請將現有的自訂參數群組與目前版本的預設參數群組進行比較

自訂選項群組:如果您的執行個體具有自訂選項群組,請為主要版本建立新的自訂選項群組。如果您的選項群組中有永續性或永久選項 (例如時區或 Oracle 透通資料加密),則新的自訂選項群組中必須包含相同的永續性或永久選項。若要將時區檔案版本升級為資料庫執行個體中的最新可用版本,以及您的主要版本升級,請將 TIMEZONE_FILE_AUTOUPGRADE 選項新增至新的自訂選項群組。

字典統計資料:收集字典統計資料和固定物件統計資料可減少升級期間的執行個體停機。您可以執行下列查詢來收集統計資料:

SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

無效物件:驗證並確定您的資料庫不包含無效物件。您可以執行下列查詢來執行這項操作:

SQL> SELECT OWNER, STATUS, COUNT (*) FROM DBA_OBJECTS GROUP BY OWNER, STATUS;

如果找到無效的物件,請執行下列查詢來檢查哪個物件無效:

SQL> SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE STATUS != 'VALID';

您可以透過執行以下查詢編譯結構描述中的所有無效物件:

SQL> EXEC DBMS_UTILITY.compile_schema(schema => 'ADMIN', compile_all => false);

請務必將查詢中的 ADMIN 取代為結構描述的名稱。

稽核追蹤:請確定稽核追蹤不會很長。升級前檢查和升級可能需要較長的稽核追蹤。若要截斷稽核追蹤,請參閱如何在執行 Oracle 的 Amazon RDS 資料庫執行個體上截斷 sys.aud$ 表? 您也可以使用 DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL 程序來刪除稽核追蹤。

密碼:藉由執行下列查詢,確認您並未使用舊版的密碼:

SQL> SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;

從查詢結果中,如果您發現使用者只使用 10g 版本的密碼,請檢查是否可以使用較新版本的密碼重新建立使用者。如果您無法修正使用者密碼版本,請適當地設定 SQLNET.ALLOWED_LOGON_VERSION_SERVER 參數,以避免連線錯誤。

在 RDS for Oracle 執行個體中定義參數 sqlnetora.sqlnet.allowed_logon_version_server 時,參數表示連線至資料庫伺服器時允許的最低版本的認證通訊協定。8 位數的設定允許大多數的密碼版本,並允許 DBA_USERS.PASSWORD_VERSIONS 值 10G、11G 和 12C 的任意組合。

在 RDS for Oracle 執行個體中定義參數 sqlnetora.sqlnet.allowed_logon_version_client 時,參數表示資料庫充當用戶端時使用的最低驗證通訊協定。

如需詳細資訊,請參閱 Oracle 文件中的使用不區分大小寫的密碼版本檢查帳戶

DBMS_JOB:如果升級 Oracle 資料庫 12c 版本 2,就會中止 DBMS_JOB 套件。如果您要升級至 19c 版本,最佳實務是在升級之前將所有 DBMS_JOB 任務轉換為 DBMS_SCHEDULER 任務。在升級期間,Oracle 會將 DBMS_JOB 任務轉換為 DBMS_SCHEDULER 任務。如需詳細資訊,請參閱 Oracle 文件中的 DBMS_JOB 支援。如果您有大量的 DBMS_JOB 項目,升級可能需要更長的時間。

FreeStorageSpace:確認您的執行個體沒有接近其儲存容量。檢查 FreeStorageSpace CloudWatch 指標,確保您有足夠的可用儲存空間可供升級成功完成。如需詳細資訊,請參閱如何建立 CloudWatch 警示來監控 Amazon RDS 可用儲存空間並防止儲存空間已滿問題?

維護動作:在 Amazon RDS 主控台中,檢查您的執行個體是否有任何擱置維護動作。這些動作會在升級時段期間套用。對於多可用區域執行個體,如果不需要更新作業系統,則主要和待命升級會同時進行。如果需要作業系統更新,則 Amazon RDS 會在異地同步備份部署中套用 Oracle 升級中概述的升級。

手動快照:建立 RDS for Oracle 資料庫執行個體的手動快照,原因如下:

  • 只要 Amazon RDS 支援該版本,快照就可以用來復原到上一個版本。
  • 自動化快照通常是在主要版本升級過程中建立的。由於 Amazon Elastic Block Store (Amazon EBS) 快照是增量的,新的快照需要備份的變更較少。因此,建立手動快照可能會減少建立自動化快照所需的時間,以及完成升級所花費的總時間。

目前的組態:執行下列查詢以檢視執行個體的目前組態並儲存輸出。輸出提供選項群組、參數群組、安全群組以及附加至目前 RDS for Oracle 執行個體的標籤的資訊。若要回復並從快照執行還原或 point-in-time 恢復,請使用您從此命令擷取的資訊:

> aws rds describe-db-instances --db-instance-identifier example-instance-name --region example-region

請務必取代查詢中的下列值:

  • example-instance-name 取代為 RDS for Oracle 執行個體的名稱。
  • example-region 取代為您選擇的區域。

還原表空間:請確定您的還原表空間設定為適當的大小,以避免在升級期間重新調整大小作業。

觸發程序:執行下列查詢以列出您的登入、登出及啟動觸發程序:

SQL> SELECT OWNER, TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT, TABLE_OWNER, STATUS, ACTION_TYPE, TRIGGER_BODY FROM DBA_TRIGGERS WHERE TRIGGERING_EVENT LIKE '%LOGO%' or TRIGGERING_EVENT LIKE '%STARTUP%';

檢查觸發程序是否有效和正常運作。雖然觸發程序有效且編譯得很好,但觸發程序可能會在執行階段擲回錯誤,並干擾資料庫重新開機。檢查是否有任何登入、登出或啟動觸發程序會在執行時擲回錯誤。您可以執行下列查詢來停用這些觸發程序:

SQL> ALTER TRIGGER EXAMPLE-OWNER.EXAMPLE-TRIGGER DISABLE;

請務必取代查詢中的下列值:

  • EXAMPLE-OWNER 取代為使用您建立觸發程序之結構描述的名稱。
  • EXAMPLE-TRIGGER 取代為觸發程式的名稱。

例如:

--To disable AUDIT_USERS trigger in MYADMIN schema
SQL> ALTER TRIGGER MYADMIN.AUDIT_USERS DISABLE;

升級期間

啟動升級後,您可以在 Amazon RDS 主控台中檢查下列項目來監控升級進度:

  • 警示日誌位於您執行個體的記錄和事件標籤下
  • 最近事件位於執行個體的記錄和事件標籤下

升級之後

  • 在連線至資料庫之後,執行下列查詢,以驗證修正程式版本:
SQL> SELECT * FROM sys.registry$history;
SQL> SELECT INSTALL_ID,PATCH_ID,ACTION,STATUS,ACTION_TIME,DESCRIPTION FROM DBA_REGISTRY_SQLPATCH;
  • Amazon RDS 在套用修補程式的一小時內更新 lsinventory-dbv.txt 檔案。您可以從 Amazon RDS 主控台中執行個體的記錄和事件索引標籤下載此檔案。讀取 Isinventory-dbv.txt 檔案以驗證套用的修補程式。
  • 執行下列查詢來收集字典統計資料和固定物件統計資料:
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
  • 執行下列查詢,以確認有效和無效物件的數目符合升級前的物件數目:
SQL> SELECT OWNER, STATUS, COUNT(*) from DBA_OBJECTS GROUP BY OWNER, STATUS;
  • 執行以下查詢來編譯結構描述中的所有無效物件:
SQL> EXEC DBMS_UTILITY.compile_schema(schema => 'ADMIN', compile_all => false);
  • 如果由於新主要版本的最佳化工具功能而導致升級後出現查詢效能問題,請考慮使用 OPTIMIZER_FEATURES_ENABLE 參數。您可以在工作階段層級和系統層級變更此參數。例如,如果您將資料庫從 18.1 版升級為 19.1 版,但您想要保留版本 18.1 最佳化工具的行為,則可以將 OPTIMIZER_FEATURES_ENABLE 參數的值設定為 18.1.0 來執行此作業。

此文章是否有幫助?


您是否需要帳單或技術支援?