Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Amazon RDS for Oracle でメジャーバージョンアップグレードを実行する際にどのような要素を考慮すべきですか?
Oracle を実行している Amazon Relational Database Service (Amazon RDS) DB インスタンスがあります。メジャーバージョンアップグレードを実行する際に考慮しなければならない要素を知りたいと考えています。
簡単な説明
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 DB インスタンスクラスを参照してください。次の 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 Database Client and Oracle Database Interoperability に関する Oracle のドキュメントを参照してください。
アップグレード方法: メジャーバージョンのアップグレードは、次のいずれかの方法で実行できます。
- RDS インスタンスを変更し、新しいメジャーバージョンを適用します。
注: この方法を使用すると、多少のダウンタイムが発生します。 - メジャーバージョンを使用して新しい RDS インスタンスを作成し、AWS Data Migration Service (AWS DMS) を使用してデータを移行します。
注: AWS DMS は最小限のアプローチを使用してデータを移行し、データを効率的に移行するために必要なオブジェクトのみを作成します。AWS DMS は、テーブル、プライマリキー、場合によっては一意のインデックスを作成しますが、ソースからデータを効率的に移行するために必要のない他のオブジェクトは作成しません。例えば、AWS DMS は、セカンダリインデックス、非プライマリキー制約、またはデータのデフォルトを作成しません。詳細については、High-level view of AWS DMS を参照してください。
ユースケースに基づいてアップグレードを実行するには、次のいずれかの方法を選択します。
カスタムパラメータグループ: インスタンスにカスタムパラメータグループがある場合は、新しいメジャーバージョンのために新しいパラメータグループを作成し、カスタムパラメータを適切に設定します。現在使用しているカスタムパラメータを識別するには、既存のカスタムパラメータグループを現在のバージョンのデフォルトパラメータグループと比較します。
カスタムオプショングループ: インスタンスにカスタムオプショングループがある場合は、メジャーバージョンのために新しいカスタムオプショングループを作成します。オプショングループに、タイムゾーンや Oracle Transparent Data Encryption などの永続オプションまたは恒久オプションがある場合は、新しいカスタムオプショングループに同じ永続オプションまたは恒久オプションを含める必要があります。メジャーバージョンのアップグレードとともに、タイムゾーンファイルのバージョンをデータベースインスタンスで使用可能な最新バージョンにアップグレードするには、新しいカスタムオプショングループに 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 DB インスタンスで sys.aud$ テーブルを削除するにはどうしたらいいですか? を参照してください。 また、DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL プロシージャを使用して、監査証跡を削除することもできます。
パスワード: 次のクエリを実行して、古いバージョンのパスワードを使用していないことを確認します。
SQL> SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;
クエリの結果から、ユーザーが 10g バージョンのパスワードのみを使用していることが判明した場合は、新しいバージョンのパスワードを使用してユーザーを再作成できるかどうかを確認します。ユーザーパスワードのバージョンを修正できない場合は、SQLNET.ALLOWED_LOGON_VERSION_SERVER パラメータを適切に設定して、接続エラーを回避します。
パラメータ sqlnetora.sqlnet.allowed_logon_version_server が RDS for Oracle インスタンスで定義されている場合、このパラメータは、データベースサーバーへの接続時に許可される認証プロトコルの最小バージョンを示します。8 に設定すると、ほとんどのパスワードバージョンが許可され、DBA_USERS.PASSWORD_VERSIONS の値である 10G、11G、および 12C の任意の組み合わせが許可されます。
パラメータ sqlnetora.sqlnet.allowed_logon_version_client が RDS for Oracle インスタンスで定義されている場合、このパラメータは、データベースがクライアントとして機能するときに使用される最小認証プロトコルを示します。
詳細については、Oracle のドキュメントの Checking for accounts using case-insensitive password version を参照してください。
DBMS_JOB: DBMS_JOB パッケージは、Oracle データベース 12c Release 2 のアップグレードに伴って廃止されました。バージョン 19c にアップグレードする場合は、アップグレード前にすべての DBMS_JOB ジョブを DBMS_SCHEDULER ジョブに変換するのがベストプラクティスです。アップグレード中、Oracle は DBMS_JOB ジョブを DBMS_SCHEDULER ジョブに変換します。詳細については、Support for DBMS_JOB に関する Oracle のドキュメントを参照してください。DBMS_JOB エントリが多数ある場合は、アップグレードに時間がかかる場合があります。
FreeStorageSpace: インスタンスがストレージ容量に近づいていないことを確認します。FreeStorageSpace CloudWatch メトリクスを確認して、アップグレードを正常に完了するのに十分な空きストレージ容量があることを確認してください。詳細については、Amazon RDS の空きストレージ容量をモニタリングする CloudWatch アラームを作成して、ストレージが満杯になる問題を防ぐにはどうすればよいですか? を参照してください。
メンテナンスアクション: Amazon RDS コンソールで、インスタンスに保留中のメンテナンスアクションがあるかどうかを確認します。これらのアクションは、アップグレードウィンドウ中に適用されます。マルチ AZ インスタンスについては、オペレーティングシステムの更新が不要な場合、プライマリアップグレードとスタンバイアップグレードが同時に実行されます。オペレーティングシステムの更新が必要な場合、Amazon RDS は マルチ AZ 配置での Oracle のアップグレードで概要が説明されているようにアップグレードを適用します。
手動スナップショット: 次の理由により、RDS for Oracle データベースインスタンスの手動スナップショットを作成します。
- スナップショットは、そのバージョンが Amazon RDS でサポートされている限り、以前のバージョンにロールバックするために使用できます。
- 自動スナップショットは、通常、メジャーバージョンのアップグレードプロセスの一環として作成されます。Amazon Elastic Block Store (Amazon EBS) のスナップショットは増分であるため、新しいスナップショットではバックアップに対する変更が少なくなります。したがって、手動スナップショットを作成すると、自動スナップショットの作成にかかる時間と、アップグレードの完了にかかる合計時間が短縮される可能性があります。
現在の設定: 次のクエリを実行して、インスタンスの現在の設定を表示し、出力を保存します。出力には、現在の RDS for Oracle インスタンスにアタッチされているオプショングループ、パラメータグループ、セキュリティグループ、およびタグに関する情報が提供されます。スナップショットからロールバックして復元を実行したり、ポイントインタイムリカバリを実行したりするには、次のコマンドから取得した情報を使用します。
> aws rds describe-db-instances --db-instance-identifier example-instance-name --region example-region
クエリの次の値を置き換えてください。
- example-instance-name を RDS for Oracle インスタンスの名前に置き換えます。
- example-region を任意のリージョンに置き換えます。
UNDO 表領域: アップグレード中のサイズ変更オペレーションを回避するために、UNDO 表領域が適切なサイズに設定されていることを確認してください。
トリガー: 次のクエリを実行して、ログオン、ログオフ、および起動トリガーを一覧表示します。
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 コンソールで以下を確認することで、アップグレードの進捗をモニタリングできます。
- インスタンスの [Logs & events] (ログとイベント) タブにあるアラートログ
- インスタンスの [Logs & events] (ログとイベント) タブにある [Recent events] (最近のイベント)
アップグレード後
- データベースに接続した後、次のクエリを実行してパッチバージョンを確認します。
SQL> SELECT * FROM sys.registry$history; SQL> SELECT INSTALL_ID,PATCH_ID,ACTION,STATUS,ACTION_TIME,DESCRIPTION FROM DBA_REGISTRY_SQLPATCH;
- Amazon RDS は、パッチを適用してから 1 時間以内に lsinventory-dbv.txt ファイルを更新します。このファイルは、Amazon RDS コンソールのインスタンスの [Logs & events] (ログとイベント) タブからダウンロードできます。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 に設定して実行できます。
