プラガブルデータベース概要

プラガブルデータベース(以下、PDB)とは12cで新たに追加された仮想DBのような機能です。 PDBを利用することで以下のような機能を実現することができます。
  • 一つのインスタンス上で複数の仮想的なデータベース(=PDB)を稼働させる
  • PDBを他プラットフォームで稼働させる
  • テンプレートを利用したデータベースの簡易な追加・削除


PDBの構成や役割

・PDBを利用するデータベースをCDB(マルチテナントコンテナデータベース)と呼びます

・CDBは主にPDBを統括する親DB(ROOT$CDB)とテンプレート用DB(PDB$SEED)、PDB(複数可)で構成されます

・ROOT$CDBはPDBの統括用DB、PDB$SEEDはPDBを作成するクローニング用テンプレートのような役割を持ちます。

・ROOT$CDBやPDB$SEEDの中にアプリケーション用のスキーマを作成することはできません。 (ORA-65096: 共通ユーザーまたはロール名が無効です が発生します。また、一応表等はROOT$CDBに作成することはできるようです) なお、PDB$SEEDはそもそも読み取り専用でOPENされており書き込みできないようになっています。ユーザ用オブジェクトはPDBに作成します

PDBのアーキテクチャ

アーキテクチャとしては今までのデータベースとあまり差異はなく既存の仕組みを踏襲した実装になっているようです。 ポイントは以下の通りです。

・SGA,ORACLE_HOME、REDOログ、制御ファイル、UNDOはプラガブルDB間で共有される(つまり、これらに障害がでた場合全PDBに影響がでる)

・プロセスの仕組みも既存DBとほぼ変わりはない

・UNDO以外の表領域(SYSTEM、SYSAUX、TEMP、ユーザ固有の表領域等)は各プラガブル別に独立したファイルとして分離される

PDBの起動と停止

PDBの起動と停止は以下の手順で行います。

①インスタンスを起動する(コマンドや手順などは通常のDBと同じ。DBを起動させるとROOT$CDBとPDB$SEEDがOPENし、PDBはMOUNT状態になる(12.1.0.1ではこの動作は変更できないが12.1.0.2以降「CDB再起動後のPDB状態管理」の新機能によりCDB起動時にPDBも自動的にOPENすることができる))

sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 木 7月 18 00:27:42 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.



Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
アイドル・インスタンスに接続しました。

SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 1603411968 bytes
Fixed Size                  2403160 bytes
Variable Size             520094888 bytes
Database Buffers         1073741824 bytes
Redo Buffers                7172096 bytes
データベースがマウントされました。
データベースがオープンされました。

②PDBを起動する(orap1がPDBの名前)

SQL> alter pluggable database orap1 open;

プラガブル・データベースが変更されました。

②PDBを停止する

SQL> alter pluggable database orap1 close immediate;

プラガブル・データベースが変更されました。

PDBへの接続

通常のローカル接続で接続した場合CDB$ROOTに接続されます。 PDBに接続するときはtnsnames.ora等の接続定義でサービス名にPDB名を指定することでPDBに直接接続することができます。

ORAP1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orap1)
    )
  )

また、SYSやSYSTEMなどの組み込みユーザでかつ権限がある場合はalter session set containerで処理対象とするPDBを変更することもできます

SQL> conn / as sysdba
接続されました。
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container = orap1;

セッションが変更されました。

SQL> show con_name

CON_NAME
------------------------------
ORAP1

PDBの作成

PDBはcreate pluggable database句で作成します。以下のコマンドはorap3という名前のPDBをPDB$SEEDからコピーして作成します。 その他、既存PDBからクローンを作成するといったことができるようです。

create pluggable database orap3
 admin user sys identified by change_on_install roles =(dba)
 default tablespace test datafile 'J:\oracle\oradata\ORCL121\ORAP3\TEST.DBF' size 250M autoextend
 on file_name_convert = ('J:\oracle\oradata\ORCL121\pdbseed\' , 'J:\oracle\oradata\ORCL121\ORAP3') 

ディクショナリ

・V$CONTAINER
コンテナDBの一覧を表示する(全コンテナが参照できるのはCDB$ROOTから参照した場合のみ)。各コンテナの名前やID、起動状態等を確認することもできる
・V$SESSION
新たに追加されたCON_ID列で各セッションが接続しているコンテナを識別可能
★ORACLE案件承ります