プラガブルデータベース概要
プラガブルデータベース(以下、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列で各セッションが接続しているコンテナを識別可能