TOP>企業情報>コラム>技術情報>徹底解説!Oracle Database 12cのすべて Vol.2

徹底解説!Oracle Database 12cのすべて Vol.2

前回はOracle Database 12cで新しく実装されたマルチテナント機能(Oracle Multitenant)の概要を紹介しました。第2回目となる今回は、Oracle Multitenantの環境を実際に構築し、操作しながら仕組みを解説していきます。

Vol.2 グングン仕組みがわかる!12cのマルチテナントを触ってみよう

誰でも簡単にマルチテナントを構築できる


前回は12cの目玉機能であるOracle Multitenantの概要を紹介しました。Oracle Multitenantは「データベースの中にデータベースを作成する機能」であり、11gR2以前と比べてアーキテクチャが大きく変更されています。今回は、その仕組みをより詳しく理解するために、12cのマルチテナント環境を実際に構築し、操作してみます。

まず始めに、12cのソフトウェアをインストールします。インストールに自信がない方でも、コマンドが1つひとつ書かれた日本語の手順書がありますので、これを利用すれば手順を間違えることなく短時間でインストールできます。12cのソフトウェアとインストール手順書はOracle.comのアカウントがあれば、Oracle Technology Network(OTN)からダウンロードすることができます。

Oracle Databaseソフトウェアとインストール手順書のダウンロード

Oracle Databaseソフトウェアとインストール手順書のダウンロード

12cダウンロード:http://www.oracle.com/technetwork/jp/database/enterprise-edition/downloads/index.html

2013年8月末時点で、12cが対応しているプラットフォームは以下のとおりです。いずれも64bitのみの対応になります。なお、Oracle Clientは12cになっても32bit版が引き続き提供されています。

12c対応プラットフォーム

12c対応プラットフォーム

Certified Matrix:http://www.oracle.com/jp/system-requirement/db-matrix-195845-ja.html

マルチテナントの構築で重要な2つのステップ


今回はLinux環境にインストールを行います。ソフトウェアをダウンロードしたら、手順書に従ってインストールを行います。Oracle Universal Installer(OUI)を立ち上げたら、あとは画面に従って情報を入力していくだけですので非常に簡単です。マルチテナントを構築する場合、途中のエディション選択画面でEnterprise Editionを選択してください。

データベース・エディションの選択

データベース・エディションの選択

Standard Edition OneとStandard Editionでもマルチテナントを構築できますが、作成可能なプラガブル・データベース(PDB)の数が1つに制限されています。これはあらかじめPDBとしてデータベースを作成しておくことで、Unplug/Plugによって簡単にEE環境へデータベースを移行/バージョンアップできるようにするための措置です。複数のPDBを作成する場合は、Enterprise Editionを使用します。

マルチテナントとライセンスの関係

マルチテナントとライセンスの関係

ソフトウェアのインストールが完了したら、Database Configuration Assistant(DBCA)を使用してデータベースを作成します。マルチテナントを構築する場合、『コンテナ・データベースとして作成』にチェックを入れてください。同時にPDBを作成したい場合は、PDBの数と接頭辞を入力します。以下のように入力すると、『pdb1』『pdb2』『pdb3』という3つのPDBが作成されます。

コンテナ・データベースとPDBの作成

コンテナ・データベースとPDBの作成

あとは画面に従って情報を入力していけば、データベースの作成は完了です。

マルチテナントのデータベースに接続してみよう


データベースを作成したら、早速接続してみましょう。今回の環境には、『cdb1』というコンテナ・データベース(CDB)の中に、『pdb1』『pdb2』『pdb3』という3つのプラガブル・データベース(PDB)があります。それぞれに接続しながら、内部構造を見ていきます。

今回の環境

今回の環境

まず、CDBに接続します。特別な方法は必要なく、11gR2以前のデータベースと同じようにSQL*Plusでローカル接続することができます。

CDBに接続


どこに接続されたのかを確認するには、SHOWコマンドを使用します。CDBに接続した場合、SHOWコマンドの結果は『CDB$ROOT』になります。ROOTとは12cのマルチテナントから新しく登場した概念で、データベース全体で共有するオブジェクトやメタデータを持つという意味です。12cのマルチテナントでは各PDBにアプリケーションのデータを格納して利用しますが、Oracle固有のオブジェクトであるデータ・ディクショナリなどは、CDB$ROOTに格納されています。

データ・ディクショナリ


続いてPDBに接続します。PDBへの接続にも特別な方法は必要ありません。PDBを作成すると同名のサービスも併せて作成されるため、このサービス名をクライアントから指定するだけです。今回の環境では『pdb1.world』『pdb2.world』『pdb3.world』というサービスがリスナーに登録されています。

PDBに接続


サービスが登録されていることを確認したら、11gR2以前と同じくtnsnames.oraにエントリを記述するか、EZCONNECT(簡易接続ネーミング)を使用して接続します。今回はEZCONNECTを使用してpdb1に接続します。

EZCONNECTを使用してpdb1に接続


一度接続した後に接続先を切り替えたい場合は、ALTER SESSION文を使用します。例えば以下のコマンドを実行すると、pdb1からpdb2に接続先を切り替えることができます。

接続先を切り替えたい場合


ALTER SESSION文で切り替えが可能なのは、SYSやSYSTEMといったデータベース全体で共通して使われるユーザのみです。マルチテナントでは特定のPDBにしか存在しないローカル・ユーザを作成することもできますが、その場合はALTER SESSION文による接続先の切り替えができないため、CONNECTし直す必要があります。

ここでは12cのSQL*Plusを使用した接続を行いましたが、既存のクライアントやアプリケーションから12cに接続できるかどうか試したい場合は、接続互換性を考慮する必要があります。12cに接続することができるクライアントのバージョンは10gR2(10.2)以上のみで、10gR1(10.1)以前のクライアントでは接続がサポートされていませんので、ご注意ください。

マルチテナントの物理構造を確認しよう


無事接続できたところで、データ・ファイルやオンラインREDOログファイル、制御ファイルなどの物理構造がマルチテナントではどうなっているかを確認してみましょう。まずはCDBに接続し、V$LOGFILEビューとV$CONTROLFILEビューを参照します。

マルチテナントの物理構造を確認


制御ファイルとオンラインREDOログ・ファイルについては、マルチテナントでない場合と比べて何も変わっていません。PDBの数に比例してファイル数が増えたりすることはなく、共通して使われます。

続いて、データ・ファイルがどうなっているかを確認します。12cには『CDB』から始まる新しいディクショナリ・ビューが追加されており、例えばCDB_DATA_FILESやCDB_TEMP_FILESを参照するとROOTや全PDBの情報を一度に確認することができます。

データ・ファイルの確認


※掲載上の都合でFILE_NAME列のパスを一部省略しています。

SYSTEMやSYSAUXといったデフォルト表領域の名前とデータ・ファイルのパスが表示されました。マルチテナントの環境ではそれらが複数存在していることがわかります。例えば、SYSTEM表領域だけで見ても全部で5つ存在します。マルチテナントの環境では、ROOTやPDBがそれぞれ個別にデータ・ファイルを持っており、ここが11gR2以前のデータベースと大きく異なります。CON_ID列を参照することで、データ・ファイルがどのデータベースの持ち物であるかを判断できます。

ここまでの結果から、マルチテナント環境の物理構造が以下のようになっていることがわかります。データベース全体で共有するものと、個別に存在するものがあることを理解しておきましょう。なお、PDB$SEEDとはPDBが作成される際の初期テンプレートです。今回はDBCAからPDBを作成しましたが、その際発行されるCREATE PLUGGABLE DATABASEコマンドにおいて、PDB$SEEDの内容がコピーされるという仕組みです。なお、PDB$SEEDはCDBを作成すると自動的に1つ作成され、読み取り専用として扱われるためオブジェクトの追加や変更はできません。

マルチテナント環境の物理構造

マルチテナント環境の物理構造

マルチテナントの基本操作を試してみよう


続いて、マルチテナント特有の基本操作を試してみましょう。まずはデータベースの起動と停止を行います。11gR2以前のデータベースであればSTARTUPコマンドで起動、SHUTDOWNコマンドで停止を行っていましたが、マルチテナントの場合はPDB単位で起動と停止が行えます。まずは起動のステップから確認してみましょう。この時点でデータベースが起動している場合は、いったん以下のSHUTDOWNコマンドで停止してください。

起動のステップ


停止が完了したら、STARTUPコマンドを実行します。

STARTUPコマンドを実行


11gR2以前のデータベースであればこれで起動完了なのですが、SHOWコマンドでPDBの状態を確認すると、『MOUNTED』になっています。マルチテナントの場合はここからさらにALTER文でPDBをオープンする必要があります。

PDBをオープン


PDBを停止する場合も同様にALTER文を使用します。SHUTDOWNコマンドを発行するとすべてのPDBが停止するので注意してください。

PDBを停止


PDBの数が多い場合はALL句で全PDBをまとめて起動停止したり、特定のPDB以外を起動停止したりといった柔軟な操作が可能です。また、STARTUPと同時にPDBもオープンしたい場合は、システム・イベントのトリガーを作成して対応します。例えば、以下のようなトリガーを作成すれば、STARTUPと同時に全PDBがオープンされます。

トリガーを作成


共通ユーザとローカル・ユーザを作成しよう


12cのマルチテナントには、各PDBに共通して存在する『共通ユーザ』と、特定のPDBにしか存在しない『ローカル・ユーザ』の2種類があります。共通ユーザにはSYSやSYSTEMなどがあり、主にデータベースの管理作業で使用します。ローカル・ユーザは各アプリケーションごとのユーザです。

共通ユーザとローカル・ユーザ

共通ユーザとローカル・ユーザ

ユーザの一覧を確認するには、CDB_USERSビューを使用します。COMMON列がYESの場合は共通ユーザで、NOの場合はローカル・ユーザです。例えば、SYSは共通ユーザなのでCOMMON列がYESになります。

ユーザの一覧を確認


新しく共通ユーザを追加したい場合は、CDBに接続してCREATE USER文を発行します。この時、共通ユーザの名前には『c##』という接頭辞が必要になります。この接頭辞がない場合はエラーになるのでご注意ください。

共通ユーザを追加


ローカル・ユーザを追加する場合は、PDBに接続してCREATE USER文を発行します。ローカル・ユーザには接頭辞のルールがないので、自由に名前を付けることができます。

ローカル・ユーザを追加


PDBごとに異なる初期化パラメータを設定しよう


いくつかの初期化パラメータについては、PDBごとに異なる値を設定することがサポートされています。V$PARAMETERビューのISPDB_MODIFIABLE列がTRUEになっていれば、PDBごとに異なる値を設定できます。現時点ではTRUEのパラメータ数が171、FALSEのパラメータ数が196となっています。

初期化パラメータ


初期化パラメータを変更するには、今までどおりALTER SYSTEM文を使用します。CDBに接続して変更を行った場合、すべてのPDBに適用されます。PDBに接続して変更を行った場合は、そのPDBだけが変更の対象になります。

初期化パラメータを変更


PDBをUnplugして別のCDBに移動しよう


PDBは1つひとつが独立してローカル・ユーザやデータを保持しているため、USBメモリのように抜き差しして別のCDBに移動することができます。PDBを取り外すことを『Unplug』、取り付けることを『Plug』と呼びます。今回はpdb1をUnplugし、cdb2という別のデータベースにPlugしてみます。

PDBのUnplugとPlug

PDBのUnplugとPlug

まず、PDBをUnplugします。Unplugの操作はコマンド・ラインの他にDBCAやOracle Enterprise Manager Cloud Controlを使用して行うことができます。今回はDBCAを使用します。DBCAを起動したら、『プラガブル・データベースの管理』→『プラガブル・データベースの切断』の順に進みます。

プラガブル・データベースの切断(Unplug)

プラガブル・データベースの切断(Unplug)

続いて、UnplugするPDBを選択します。今回はcdb1にあるpdb1をUnplugします。UnplugされたPDBの情報はXMLのメタデータ・ファイルとRMANのバックアップで構成されるので、それらの出力先も併せて指定します。別のサーバにあるCDBにPlugしたい場合は、共有ディレクトリのパスを指定しておくと作業が楽になります。

プラガブル・データベースの選択

プラガブル・データベースの選択

これでUnplugは完了です。操作に必要な時間はデータ量に依存しますが、作業自体は非常に簡単です。Plugを行うには、再度DBCAを起動してから『プラガブル・データベースの管理』→『プラガブル・データベースの作成』の順に進みます。

プラガブル・データベースの作成(Plug)

プラガブル・データベースの作成(Plug)

Plug先として、cdb2を選択します。

Plug先として、cdb2を選択


『PDBファイルを使用してプラガブル・データベースの作成』を選択し、先ほど生成されたXMLとバックアップファイルを指定します。

Plug先として、cdb2を選択


Plug時にPDB名やデータ・ファイルのパスを変更することもできます。今回は同名のpdb1としてPlugします。

PDB名やデータ・ファイルのパスを変更


Plugが完了すると、pdb1がcdb2に移動します。SHOWコマンドで結果を確認してみましょう。

SHOWコマンドで結果を確認


同じ要領で何度でもPDBを作成することができるため、あらかじめ特定のデータを入れてテンプレート化しておき、各利用者にPDBを作成するといった運用にも使えます。今回解説したUnplugとPlugは『カット&ペースト』のような動作をしますが、『コピー&ペースト』のようにPDBのクローンを作成することもできます。これは本番のデータを開発環境で利用したい場合などに便利な機能です。

今回はマルチテナントの基本的な操作を紹介しましたが、アーキテクチャの変更やUnplug/Plugといった新しい要素が数多く盛り込まれている一方で、従来と同じ手法で管理操作ができたりといった互換性も保たれています。構築は非常に簡単ですので、是非皆さんもマルチテナントの世界を体感していただきたいと思います。

次回はセキュリティとバックアップの新機能について解説します。


執筆者紹介

岸和田隆

岸和田 隆(Takashi Kishiwada)

株式会社アシスト データベース技術本部

アシスト入社後、Oracle Database の研修講師、フィールド・ サポート、新バージョンの検証を経て、2007年 自社ブランド 「DODAI」の準アプライアンス製品の企画・開発、2009年 PostgreSQL、2011年 EDB Postgres、MySQL / MariaDB の事業立上を担当。 現在は「データベースのアシスト」を目指した活動を行っている。

岸和田の紹介記事はこちら



関 俊洋(Toshihiro Seki)

株式会社アシスト データベース技術本部

2006年、株式会社アシスト入社。データベース・システムの構築や運用トラブルの解決といったフィールド・サポート業務を経験し、その後は新製品の検証やハードウェアとデータベースを組み合わせたソリューション(DODAI)の立ち上げに従事。現在はデータベースの価値や魅力を伝えるための執筆・講演活動を行っている。『SQL逆引き大全363の極意』共著。

関の紹介記事はこちら

「徹底解説!Oracle Database 12cのすべて」 連載記事一覧

関連製品


Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る