Oracle12cの目玉機能! マルチテナント・アーキテクチャをぶったぎってみた

 
こんにちは。都築です。

Oracle12cでは色々と機能が追加されていますが、やはり大きな目玉はマルチテナント・アーキテクチャではないでしょうか。

これまでOracle12cのインストール、環境構築の方法をご紹介させていただきましたが、今回はそのマルチテナント・アーキテクチャについてご紹介したいと思います。

マルチテナント・アーキテクチャとは

マルチテナント・アーキテクチャは、複数のデータベースを1つのインスタンスに統合できる技術のことです。

oracle_multitenant1

従来のOracleでデータベースを複数作成した場合、個々に管理する必要がありました。
そのため、共通の部分についても、個々に設定する手間が生じてしまっていました。

一方、複数スキーマの場合も、複数データベースに確保されていた独立性がなくなるため、メモリやCPUといったリソースの割り当て方法やセキュリティ対策を十分に検討しなければなりません。

Oracle12cではマルチテナント・コンテナ・データベース(CDB)が、その中に複数のプラガブル・データベース(PDB)と呼ばれる仮想的なデータベースを持つことで、独立性を保ちつつ、複数のデータベースを集約し一元管理することができるようになりました。

マルチテナント・コンテナ・データベース(CDB)の利点

マルチテナント・コンテナ・データベース(CDB)の利点といえば多々あります。

  • CDB内でプロセスやメモリ、メタデータが共有されるためリソースが低減される。
  • データベースの新規作成やコピーといった新規環境構築がPDBをコピーするだけで高速で行える。
  • 共通的な部分は既にCDBで統合されているため、統合する場合の負荷が少ない。
  • アップグレードやバックアップなどをCDB単位で行うことができるため、運用業務がシンプルになる。
  • PDBを分けることにより、システム間の独立性が保てる。

主だったものを上げてみましたが、やはりパッチ適用やアップグレード、バックアップ、セキュリティといった運用に関わることが簡単になるという点が大きいのではないでしょうか。

マルチテナント・コンテナ・データベース(CDB)の構成

oracle_multitenant2

マルチテナント・コンテナ・データベース(CDB)はCDB$ROOTPDB$SEEDPDBという3種類のコンテナから構成されています。
コンテナはマルチテナント・アーキテクチャに含まれるデータベースにおおむね相当すると考えられますが、それぞれ下記の通り、役割や保持するデータが異なっています。

CDB$ROOT(ルート)

マルチテナント・コンテナ・データベース(CDB)の基盤となるコンテナです。
1つのCDBに対して必ず1つ存在し、CDB全体で共有するオブジェクトやメタデータの情報が格納されます。
オブジェクトの追加や変更は不可となっており、ルートのデータ・ディクショナリには、データベース全体で共有する情報として付属するすべてのPDBの情報が含まれます。

PDB$SEED(シード)

PDBを新規に作成するときのひな形(テンプレート)です。
CDB作成時に1つだけ作成されますが、読み取り専用で、オブジェクトの追加や変更はできません。
基本的に、このPDB$SEEDをコピーしてPDBを作成していきます。

PDB(プラガブル・データベース)

マルチテナント・アーキテクチャに統合するデータベースに相当します。
スキーマや表領域を含む論理的なセットで、同一CDB内に複数作成可能です。(シードを除いて最大252)
PDB間は排他的な関係にあり、データは論理的に分離されていて、各PDBはアプリケーションの分離性やセキュリティが担保されています。

また、CDBからPDBを取り外したり(Unplug)、取り外したPDBを別のCDBまたは以前と同じCDBに取り付ける(Plug)ことができます。
なお、Standard Editionでは2つ以上のPDBは作成できません。

コンテナ間で共有されるもの・されないもの

マルチテナント・アーキテクチャでは、1つのインスタンス内に複数のコンテナが存在する構成になっています。
上図のように、インスタンスが提供するメモリやバックグラウンドプロセスなどのリソースを、複数のコンテナで共有する形になります。
また、データベースの構成ファイルについてもREDO、UNDOなどの一部については、複数のコンテナで共有する形になります。

一方、SYSTEM、SYSAUX、TEMP、USERS表領域は各コンテナが固有の表領域を持ちます。
CDB$ROOT、PDB$SEED、PDBそれぞれでSYSTEM表領域が存在する形になります。

また、ユーザーについてはコンテナ間で共有される共通ユーザーと共有しないローカルユーザーに分かれます。
上図のオレンジのSYSユーザーやSYSTEMユーザーなどはCDB$ROOTとCDB内の全PDBで共通に使用されるユーザーとしてコンテナ間で共有されていますが、上図の青色のユーザーのように特定のPDBのみに存在するユーザーはコンテナ間で共有していません。

マルチテナント・アーキテクチャでは、CDBで共通的な部分を一元管理しているので、しっかりと共有されるものとされないものを意識することが重要です。

まとめ

今回はマルチテナント・アーキテクチャの概要についてご紹介いたしましたがいかがでしたでしょうか。
Oracle12cで初めて出てくる単語も多く、聞き慣れないことも多いかと思いますが、適切な運用を行えるように1つ1つ知識として理解していきましょう。

《関連記事》
Windows環境でOracle12cを使う! ~インストール編~
Windows環境でOracle12cを使う! ~環境構築編~
Oracleでページングを実現! OFFSET句の使い方

記事をシェア
MOST VIEWED ARTICLES