2013年7月17日、およそ5年半振りのメジャー・バージョンアップとなるOracle 12cの国内提供が開始されました。本連載では、500を超える新機能の中から、代表的なものをピックアップしてわかりやすく解説していきます。第1回目となる今回は、12c最大の目玉であるマルチテナント機能について解説します。
新機能を理解しやすくするために、まずはこれまでのバージョンについて少しだけ振り返ってみましょう。Oracle Databaseは、その時代のトレンドにフィットするための機能を実装しながら進化を続けています。8iと9iではインターネット環境の大量トランザクション、大量データに対応するためにOracle Application Clusters(RAC)やPartitioningを実装し、10gと11gではグリッド・コンピューティングに対応するためにGrid InfrastructureやAutomatic Management(ASM)を実装してきました。この流れで考えると、12cにはクラウド対応を考慮した機能が実装されているというのがイメージできるのではないでしょうか。
12cにおける最大の特徴は、データベースのマルチテナントを実現する機能が実装された点にあります。マルチテナントとは、1つのシステム上に複数のサービス(ユーザ)が同居している環境のことで、1つの建物内に複数の店舗や企業が同居している雑居ビルによく似ています。集約率が高まるので、運営側にとっては必要な資源や運用コストを削減できるというメリットがあります。利用者側にとっても、自社ビルを建築するよりはワンフロアを借りたほうが安価でビジネスを始められます。
データベースをマルチテナント化するための手法はこれまでいくつか登場しており、代表的なものとして『仮想マシンを複数作成する』、『データベースを複数作成する』、『スキーマを複数作成する』などがあります。これらのメリット、デメリットを整理すると、12cのマルチテナントが理解しやすくなります。以下は1つのサーバ上に3つのサービスを同居させた場合のイメージ図です。
サーバ仮想化は、サービスの数だけ仮想マシンを起動し、その上でさらにデータベースを起動するという手法です。OSやデータベースのバージョンが異なっていてもマルチテナント化できるというメリットはありますが、サーバの台数は減っても管理しなければならないOSやデータベースの数は変わらないため、運用管理コストを抑える効果はありません。また、仮想化によるオーバーヘッドがあるため、他の手法と比べて集約率があまり高くならないというデメリットもあります。
データベースを複数作成してマルチテナント化した場合、サーバ仮想化と比べて管理するOSの数は減りますが、データベースの数は変わりません。データベースを起動するにはインスタンスに一定のメモリを割り当てる必要があるため、集約率には限界があります。
スキーマを複数作成した場合は集約率を高めることができますが、スキーマ名が競合している場合はスキーマ統合を検討したり、アプリケーションの改修をしたりといった作業が必要になります。また、仮想化や複数データベースの場合に確保されていた分離性がなくなるため、メモリやCPUといったリソースの割り当て方法やセキュリティ対策を十分に検討しなければなりません。
このように、従来のマルチテナント手法にはメリット、デメリットがあるため、一概に正解を導き出せないという課題がありました。この状況を打破するために登場したのが、12cのOracle Multitenantと呼ばれる機能です。Oracle Multitenantは、Enterprise Editionのオプションとして提供されます。
Oracle Multitenantを一言で表現すると、「データベースの中にデータベースを作成する機能」です。11g以前と比較すると、アーキテクチャが大きく変更されていることがわかります。
メモリ領域とバックグラウンド・プロセス群から構成されるOracleインスタンスは特に変更されていませんが、データベースがコンテナ・データベース(CDB)という名前になり、その中にあるデータ・ファイルがプラガブル・データベース(PDB)として独立しています。アプリケーションから見ると、PDBの数だけデータベースがあるように見えるという仕組みです。
さらに、プラガブル(着脱可能)という発想を活かしたユニークな機能も備わっています。作成したPDBは取り外しが可能で、別のCDBに簡単に移動させることができます。PDBは1つひとつが独立してデータを保持しているため、USBメモリのように抜き差しするだけで移動が完了します。PDBを取り外すことを『Unplug』、取り付けることを『Plug』と呼びます。
また、PDBにはコピー(クローニング)機能もあり、開発やテストのために同じデータを持ったPDBを複数作成することができます。
同一のCDB内にコピーを作成できるのはもちろんのこと、ネットワーク上にある別のCDBにコピーを作成することもできます。コピーはPDBのサイズが大きいほど時間が掛かりますが、ストレージのスナップショット(Oracle System、ZFS、NetApp)に対応したコマンドも用意されているため、それらを組み合わせると短時間でコピーを作成できます。