RDS for Oracle 21cへのインプレースアップグレードを実施してみた

# はじめに
先日発表された [RDS for Oracleの非CDB構成のCDB構成への変更](https://qiita.com/asahide/items/31e27ab7c77a7139dad7) にともない、サポートされている RDS for Oracleの環境は全て CDB構成 に変更することが可能となりました。また、CDB構成に変更することで、RDS for Oracleの上位バージョンへのアップグレードをインプレースで行うことが可能となります。（現在は19c→21cのみ）

CDB構成に変更したデータベースのアップグレードを実施してみます。
なお、通常のOracle Databaseは [ダウングレードもサポートされています](https://docs.oracle.com/en/database/oracle/oracle-database/21/upgrd/downgrading-oracle-db-after-upgrade.html#GUID-59F92E2A-DC4D-46A3-9AC9-63F47BE4A86F) が、RDS の場合はダウングレードはサポートされないため、事前にバックアップを取っておきましょう。

# 21cへのインプレースアップグレード
## アップグレードの準備
今回は以下の CDB構成 19cの ru-2022-10 バージョンをターゲットにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/ab1f9c22-8acb-b842-aeb8-24297163daaf.png)

アップグレード自体は他と同様、「変更」から行うことが可能です。
アップグレードも [前提事項](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Oracle.Major.html) があり、インスタンスクラスやバージョンによってチェックに引っかかる場合があります。以下はオプショングループが適切に設定されていない場合のエラーの例です。ちなみに、19cではサポートされているが21cではサポートされていないオプション（[EFS Integration](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-efs-integration.html)等）がありますので、確認しておきましょう。

![02-henkou-01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/42c87609-62d5-ee96-c401-fc2a67b1a6ac.png)

一点注意ですが、[RDS for Oracleのガイド](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Oracle.Major.html#USER_UpgradeDBInstance.Oracle.Major.gathering-stats) によると、アップグレード前に「GATHER_DICTIONARY_STATS」でディクショナリ統計を取得しておいた方がよい記載がありますが、[Oracle 21c のアップグレードガイド](https://docs.oracle.com/en/database/oracle/oracle-database/21/upgrd/database-preparation-tasks-to-complete-before-upgrades.html#GUID-58C1A4B9-32F4-44E5-B82B-5D0EC78A6AE2)にはその記載はありませんので、21cにアップグレードする場合には手順を確認しましょう。（[12.2のアップグレードガイド](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/upgrd/database-preparation-tasks-to-complete-before-upgrades.html#GUID-58C1A4B9-32F4-44E5-B82B-5D0EC78A6AE2)には記載があるが、[19cのアップグレードガイド](https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/database-preparation-tasks-to-complete-before-upgrades.html#GUID-58C1A4B9-32F4-44E5-B82B-5D0EC78A6AE2)には記載がない）

## アップグレードの実施

アップグレード自体は「変更」で「DBインスタンスの変更」を押下することで開始されます。
ログから確認すると約1時間程度でした(t3.small)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/5de93eb7-7960-1ffa-de4e-ecf4a6a547c5.png)

また、19:23 の The engine version upgrade started. の箇所のアラートログを確認すると、以下のように出力されており、こちらも AutoUpgrade が実行されていると推測できます。

```sql:21cアップグレード時のアラートログ抜粋
2023-06-09T19:24:19.092091+09:00
＜中略＞
Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 - Production
Version 21.10.0.0.0.
＜中略＞
ALERT: Compatibility of the database is changed from 19.0.0.0.0 to 21.0.0.0.0.
Increased the record size of controlfile section 15 to 104 bytes
Control file expanded from 544 blocks to 546 blocks
＜中略＞
2023-06-09T19:24:26.805228+09:00
alter database open upgrade
2023-06-09T19:24:26.823557+09:00
Smart fusion block transfer is disabled:
  instance mounted in exclusive mode.
Buffer Cache Full DB Caching mode changing from FULL CACHING DISABLED to FULL CACHING ENABLED 
2023-06-09T19:24:26.837327+09:00
Crash Recovery excluding pdb 2 which was cleanly closed.
2023-06-09T19:24:26.837391+09:00
Crash Recovery excluding pdb 3 which was cleanly closed.
Endian type of dictionary set to little
Switching redo format version from 19.0.0.0.0 to 21.0.0.0.0 at change xxxxxxxxxxxxxxxx
＜後略＞
```

アップグレード完了後、エンジンバージョンも上がっていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/73006f19-a72b-63bd-2296-99e098760052.png)


# まとめ
非CDB構成からCDB構成への変更を行う唯一の理由は、データベースのメジャーアップグレードになりますので、21cへのアップグレード自体はニーズはほぼないと思いますが、今後の23cが出た場合を見越していったん21cへアップグレードを試してみました。
RDS for Oracle自体のアップグレードは非常に簡単ですが、実際の[Oracle database 21cのアップグレードガイド](https://docs.oracle.com/en/database/oracle/oracle-database/21/upgrd/oracle-database-upgrade-guide.pdf)自体は577ページあります。アプリケーションが動くかどうか、性能は出るか、運用は回るか、等いろいろと検証が必要になると思います。
RDS自体は古いバージョンを使い続けることはできなくなっているため、バージョンアップはどこかで必ず必要となります。計画的に実施していきましょう！

#### おまけ

アップグレード自体はOracleのパッチバージョンRU(Release Update)が同じ月以降にリリースされたバージョンにしかアップグレードできません。以下のように、現在のバージョンが19cの2022-07 RUだと21cも2022-07以降に（左）、19c 2023-01r2だと 21cも2023-01r2以降が対象となります（右）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/a358a078-41c1-80c8-dee3-636c929f2647.png)