[アップデート] RDS for OracleでOracle Multitenantのコンテナデータベースがサポートされました

2021.06.06

しばたです。

少し前のはなしですがRDS for OracleでOracle Multitenantのコンテナデータベースがサポートされました。

この更新について少し思うところがあるので、私見を交えながら解説していきます。

Oracle Multitenantとは?

Oracle MultitenantはOracle 12cから導入された新機能で、Oracle Databaseをマルチテナント環境向けに提供するための仕組みとなります。
概要についてはアシストさんのこちらの記事が分かりやすいのでまずはこちらをご覧ください。

かつてOracle Databaseをマルチテナント向けに提供する場合は

  • スキーマを分ける
  • Oracleインスタンスを分ける

の2つの方法を採る必要がありましたが、それぞれ

  • スキーマ分割では厳密にマルチテナントとは言えない
  • Oracleインスタンス分割では基盤の運用コストやライセンスコストがかさむ

といった問題があり、これを解消するためにプラガブル・データベース(PDB)という形の論理的に独立したOracleインスタンスを作成できるのがOracle Multitenantとなります。  

Oracle Multitenantではハードウェアは集約しつつ論理的にOracleインスタンスを分割できるため、基盤の運用コストやライセンスコストを抑えつつマルチテナント環境を用意できるというわけです。

そして先述のアシストさんの記事にもある通りOracle 20c以降 *1はOracle Multitenant構成のみがサポート対象になっています。

RDSでのOracle Multitenantサポートは何を意味するのか?

ここでRDS for Oracleに話を戻すと、RDS自体がすでにAWSが提供するマルチテナント環境であり基盤の運用もAWSがやってくれます。
RDS上にさらに利用者がマルチテナント向けの環境を作るメリットがどの程度あるかと言われると私としては正直なんとも言えません。

残念ながらAWSからはこの更新のユースケースについて表明されていません。
加えてドキュメントを読み込んでいくと、

Currently, RDS for Oracle supports a subset of multitenant architecture called the single-tenant architecture. In this case, your CDB contains only one PDB. The single-tenant architecture uses the same RDS APIs as the non-CDB architecture. Your experience with a non-CDB is mostly identical to your experience with a PDB. You can't access the CDB itself.

と、現時点ではPDBを1つしか作ることのできない旨が記載されており「マルチテナントにできないマルチテナントサポート」という謎な状況であることも判明します。

このため、私個人の考えとしては、今回の更新はマルチテナント対応のためのOracle Multitenaltサポートではなく、Oracle Multitenalt以外の構成が非サポートになる将来のバージョンに備えた準備と捉えるのが適切だと考えています。

このあたりについては将来的にAWSから何らかのアナウンスが出てくれると嬉しいですね。

試してみた

この様にちょっとAWSの意図が見えない更新ですが、とりあえず実際に試してみることにします。

検証環境

今回は東京リージョンに用意したVPC環境にOracle 19c SE2の環境を作っていきます。
VPCやセキュリティグループは既に準備済みの状態から開始します。

0. 事前準備

RDSのOracle Multitenalt環境ではパラメーターグループとオプショングループが独自のものとなります。

  • パラメーターグループ : oracle-ee-cdb-19, oracle-se2-cdb-19
  • オプショングループ : oracle-ee-cdb, oracle-se2-cdb

このためそれぞれテスト用のパラメーターグループとオプショングループを用意しておきます。

1. RDSインスタンスの作成

ここからRDSインスタンスの作成を開始します。

マネジメントコンソールから新規インスタンスの作成を開始し、エンジンに「Oracle」を選びます。
すると「Use multitenalt architecture」のチェック欄が増えてますので、この欄にチェックを付け、エディションを選択します。

今回は「Standard Edition Two」としています。
バージョンは現在最新の「Oracle 19.0.0.0.ru-2021-04.ru-2021-04.r1」のみサポートされていますのでこれをそのまま選択しています。

その他の項目は基本的に通常のOracle RDSと同様です。

追加設定で先ほど作成したパラメーターグループとオプショングループを指定しています。

あとはRDSを作成開始しできあがるのを待つだけです。

2. RDSに接続してみる

作成が完了した状態は下図の様にエンジン名に「(CDB)」が付く形となります。

それ以外はマネジメントコンソールから確認できる項目に違いは無い様です。

RDSに接続する際はRDS作成時に指定した「最初のデータベース名」が「PDB名」になるとのことなので、ドキュメントにある通りよしなに接続設定をした上接続してください。

# SQL*Plusでの接続例 : SIDにPDB名を指定する
sqlplus 'dbuser@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=endpoint)(PORT=port))(CONNECT_DATA=(SID=pdb_name)))'

ちなみに管理用のコンテナ・データベース(CDB)はRDSCDBという名前で固定されユーザーが接続することはできないそうです。

あとは通常のRDSと同様に操作できます。
ユーザーからはPDBが独立したデータベースに見えるため非Multitenalt環境と大差は無いのですが、V$DATABASEビューを確認するとCDB構成であることは確認できます。

-- V$DATABASE の CDB 列でMultitenant構成か否かは判別可能
SELECT NAME, CREATED, PLATFORM_NAME, CDB
  FROM V$DATABASE

(CDB = YES なのでMultitenant構成であることがわかる)

また、PDB環境にいるのでV$CONTAINERSからは自身の情報のみが参照可能です。

-- V$CONTAINERS でCDB, PDBの一覧を取得可能
SELECT NAME, CON_ID, DBID, CON_UID, GUID
  FROM V$CONTAINERS
 ORDER BY CON_ID

(コンテナIDが3なのでORCLはPDBであることがわかる)

その他の情報についてはOracle Multitenant 管理者ガイドを参考に調査すると良いでしょう。

補足. Oracle Multitenant構成の制限事項

Oracle Multitenant構成の制限事項について以下のドキュメントに記載されていますので利用を検討する方は一読しておくと良いでしょう。

最後に

簡単ですが以上となります。

現時点では利用すべきユースケースに不明瞭な点がありますが、ユーザーとして利用する分には通常のRDSとほとんど変わりなく構築し利用することができました。
将来的に非Multitenalt構成がサポートされなくなるのを見据えて早めに試しておくのも良いかもしれません。

脚注

  1. Oracle 20cはプレビューバージョンのみの提供だったため実質Oracle 21c以降