Oracle12c 新機能

update:

第1回「Oracle12c マルチテナント・アーキテクチャによるDB 統合」

著者:吉田 宗弘

1. Introduction

1.1 はじめに

2013年7月にOracle Database の最新版であるOracle Database 12c (以下Oracle12c)がリリースされて1年が経過します。Oracle Database はこれまでもバージョンアップの度に様々な機能拡張が行われてきましたが、Oracle12c 新機能の目玉は何と言っても「マルチテナント・アーキテクチャ」です。これまでのOracle Database は、Instance (SGA とBackground Process から構成されるメモリ上のリソース) とDatabase (データファイルや制御ファイル等から構成されるストレージ上のリソース) が1:1 (RAC 構成の場合は、N:1) に対応してきました。つまり新しくDatabase を作成するには、専用のInstance も作成する必要がある事を意味しています。そのため社内に存在する多数のDatabase を単純に少数のマシンに統合しようとすると、大量のプロセスを動作させるために大量のCPU, メモリが必要となります。スキーマ統合 (アプリケーション毎にスキーマを分割して1つのDatabase共用させる方法) を行う事で必要となるCPU やメモリを削減する事も可能ですが、スキーマ統合にはスキーマ名の衝突を回避するためのアプリケーションの改修が必要となります。更にユーザに付与されている権限によっては、他のアプリケーションのデータに容易にアクセスできてしまうと言ったセキュリティ上の問題も存在します。これらの問題がDatabase 統合を妨げる (または統合の集約率が低い) 最大の要因でした。Oracle12c ではこれらの問題を解決し、Database 統合の集約率を大幅に向上させるため新たにマルチテナント・アーキテクチャが導入されました。今回は、マルチテナント・アーキテクチャの構成と、同機能を使用したDB のアップグレード/DB 統合について確認していきたいと思います。尚、マルチテナント・アーキテクチャについては、セミナー資料等でも詳細な解説がされています。そのため本書ではセミナー資料等と重複する内容は最小限に留めていますので、巻末の参考URL で紹介されている資料も併せて確認して下さい。

1.2 マルチテナント・アーキテクチャの構成

先ずは従来の構成と、マルチテナント・アーキテクチャ構成を比較してみます。

従来の構成とマルチテナント・アーキテクチャ構成の比較

上図のように、マルチテナント・アーキテクチャでは、制御ファイル, Redo Log ファイル, Database を管理するためのディクショナリ等は、コンテナ・データベース (以下CDB) と呼ばれるDatabase によって管理されます。ユーザ・データは、プラガブル・データベース (以下PDB) と呼ばれるDatabase によって管理され、CDBに組込む事によって使用可能となります。Instance はCDBに紐付き、CDBに組込まれている全てのPDB間で共有されるため、これまで以上に多くのデータベースを統合する事が可能になります。
またPDB同士は、お互いに独立したデータベースとして分離されるため、スキーマ統合のようにアプリケーションを改修する必要は基本的にありません。
このような構成を取っているため、CDBに対してPatch の適用を実施するだけで、全てのPDBもPatch が適用された状態となります。またPDBは、CDBから切離して別のCDBに組込む事が可能なため、PDBをバージョンアップ済のCDBに組込む事で、バージョンアップを行う事が可能です。

[注意]
・マルチテナント・アーキテクチャ構成を使用した場合、ログスイッチや制御ファイルのバックアップ等一部の操作はCDBからしか行う事ができません。
・PDBを別のCDBに組込む場合は、エンディアン/文字コードセットが同一である 必要があります。
・自動ILM やフラッシュバック機能等、マルチテナント・アーキテクチャとの併用に 制限がある機能があります。

マルチテナント・アーキテクチャ環境のPatch 適用/アップグレードは、コンテナ・ データベースに対して実施する。

マルチテナント・アーキテクチャ環境のアップグレードイメージ

また、以下の図のように、アップグレード済のCDB にPDB を移動する事でアップグレードが可能
PDBの移動によるアップグレードイメージ

1.3 マルチテナント・アーキテクチャでのDB 作成とその構成

マルチテナント・アーキテクチャ構成のDB を作成するには、dbca を使用するのが簡単です。以下に、マルチテナント・アーキテクチャ構成のDB を作成した際のdbca の画面ショットを示します。


マルチテナント・アーキテクチャ構成のDB を作成した際のdbca の画面ショット

マルチテナント・アーキテクチャでDatabase を作成した際の構成を以下に示します。
マルチテナント・アーキテクチャDatabaseの全体構成

[構成要素の説明]

ルート(CDB$ROOT)
・データベース全体で共有するオブジェクトやメタデータを含む
 – Oracle データベースによって提供されるスキーマ
 – ユーザが作成するスキーマ (C## で始まる共通ユーザ)
・データベース作成時に1つのみ作成される
・オブジェクトの追加や変更は不可
・ルートのデータ・ディクショナリには データベース全体で共有する情報として、付属するすべてのPDBの情報が含まれる

シード(PDB$SEED)
・PDB を新規作成する際に使用するテンプレートで、以下の目的で使用される。
・Database Configuration Assistant (DBCA) によるデータベース作成時や作成後に、PDB を作成する場合
・ データベース作成後に、手動で PDB を作成する場合
・データベース作成時に1つのみ作成される
・読取り専用
・オブジェクトの追加や変更は不可

プラガブル・データベース(PDB)
・スキーマや表領域を含む論理的なセット
・EEの場合、同一CDB 内に複数作成することが可能
(シードを除いて最大252)
 (SE/SE One では、シードを除いて1つのみPDB を作成可能)
・PDB 間は排他的な関係にあり、データは論理的に分離される
・CDB から取り外した後、再度組込んだり、異なる CDB へ組込む事が可能

マルチテナント・アーキテクチャDatabase の物理構造を以下に示します。

マルチテナント・アーキテクチャDatabase の物理構造


それぞれのデータベースは、個別のSYSTEM, SYSAUX, TEMP, ユーザ表領域を持
ちます。(PDB$SEED はテンプレートのため、ユーザ表領域を持ちません。)
UNDO 表領域, Redo Log ファイル, 制御ファイルは、CDB によって管理されます。

マルチコンテナ・アーキテクチャの導入に伴い、CDB$ROOT 及び全てのPDB 情報
を一覧するためのデータ・ディクショナリが新たに導入されました。

データ・ディクショナリの拡張

[拡張されたデータ・ディクショナリの例]
拡張されたデータ・ディクショナリの例

1.4 目的のDB への接続

前節までで、CDB/PDB の作成が完了しました。それでは実際にCDB/PDB に接続してみましょう。

1.5 PDB の自動オープン/クローズ

PDB 作成直後は、PDB はオープンされた状態となりますが、Instance を再起動すると、PDB$SEED を除くPDB は以下のようにMOUNT 状態となります。PDB を使用可能にするためには、Alter pluggable database 文を使用して明示的にPDB をオープンする必要があります。このままでは以前のバージョンで使用していたDatabase の起動スクリプトを修正する必要があります。しかし以下のように、CDB のSYS スキーマにDB Event Trigger を仕掛けるとInstance (CDB) の起動/停止に合わせてPDB のオープン/クローズを自動で行わせる事ができます。

(→次のページへ続く