Oracle 12cプラガブルデータベースって何?
前回インストールした12c。
とりあえず、コンテナデータベースを作成し、1つのプラガブルデータベースを作成しました。
何者かも分からずに。
細かいことは置いといて、自分の理解のためにざっくりとまとめます。
位置づけ
このプラガブルデータベースが、Oracle 12cの目玉であるマルチテナントの実現方法である模様。なんとなく、メタデータアーキテクチャに特化したような機能なのかと思っていたけれど違った。
Enterprise EditionのMultitenantオプションの購入が必要。
EEクラスの機能ということで、単一インスタンスで運用しているような環境には無用ということかな。
検証環境はSEで作ったつもりだったけれど、入るには入るみたいです。
概要
コンテナデータベースの下に、複数のプラガブルデータベースを定義して使うことができるみたい。プラガブルの名前通り、プラグ/アンプラグができ、別のコンテナデータベースに差し替えて使えるそうな。
プロセス
psでプロセスを見ると、あくまでコンテナデータベース分しかプロセスはあがらないみたい。
[oracle@centos64-12c ~]$ ps -ef | grep ora_ oracle 1320 1 0 21:53 ? 00:00:00 ora_pmon_orcl oracle 1322 1 0 21:53 ? 00:00:00 ora_psp0_orcl oracle 1324 1 2 21:54 ? 00:00:08 ora_vktm_orcl oracle 1328 1 0 21:54 ? 00:00:00 ora_gen0_orcl oracle 1330 1 0 21:54 ? 00:00:00 ora_mman_orcl oracle 1334 1 0 21:54 ? 00:00:00 ora_diag_orcl oracle 1336 1 0 21:54 ? 00:00:00 ora_dbrm_orcl oracle 1338 1 0 21:54 ? 00:00:00 ora_dia0_orcl oracle 1340 1 0 21:54 ? 00:00:00 ora_dbw0_orcl oracle 1342 1 0 21:54 ? 00:00:00 ora_lgwr_orcl oracle 1344 1 0 21:54 ? 00:00:00 ora_ckpt_orcl oracle 1346 1 0 21:54 ? 00:00:00 ora_lg00_orcl oracle 1348 1 0 21:54 ? 00:00:00 ora_smon_orcl oracle 1350 1 0 21:54 ? 00:00:00 ora_lg01_orcl oracle 1352 1 0 21:54 ? 00:00:00 ora_reco_orcl oracle 1354 1 0 21:54 ? 00:00:00 ora_lreg_orcl oracle 1356 1 0 21:54 ? 00:00:00 ora_mmon_orcl oracle 1358 1 0 21:54 ? 00:00:00 ora_mmnl_orcl oracle 1360 1 0 21:54 ? 00:00:00 ora_d000_orcl oracle 1362 1 0 21:54 ? 00:00:00 ora_s000_orcl oracle 1374 1 0 21:54 ? 00:00:00 ora_tmon_orcl oracle 1376 1 0 21:54 ? 00:00:00 ora_tt00_orcl oracle 1378 1 0 21:54 ? 00:00:00 ora_smco_orcl oracle 1380 1 0 21:54 ? 00:00:00 ora_aqpc_orcl oracle 1410 1 0 21:54 ? 00:00:01 ora_cjq0_orcl oracle 1412 1 0 21:54 ? 00:00:00 ora_w000_orcl oracle 1447 1 0 21:54 ? 00:00:00 ora_qm02_orcl oracle 1451 1 0 21:54 ? 00:00:00 ora_q002_orcl oracle 1453 1 0 21:54 ? 00:00:00 ora_q003_orcl oracle 1455 1 0 21:54 ? 00:00:00 ora_q004_orcl
ファイル構成
物理ファイルは?というと、コンテナとプラガブルデータベースで別々に作られてました。プラガブルデータベース単位でディレクトリができるみたい。
/u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/redo01.log /u01/app/oracle/oradata/orcl/redo02.log /u01/app/oracle/oradata/orcl/redo03.log /u01/app/oracle/oradata/orcl/sysaux01.dbf /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/temp01.dbf /u01/app/oracle/oradata/orcl/undotbs01.dbf /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/oradata/orcl/pdb1/pdb1_users01.dbf /u01/app/oracle/oradata/orcl/pdb1/sysaux01.dbf /u01/app/oracle/oradata/orcl/pdb1/system01.dbf /u01/app/oracle/oradata/orcl/pdb1/temp01.dbf /u01/app/oracle/oradata/orcl/pdbseed/pdbseed_temp01.dbf /u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf /u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
データファイル
実際に接続してデータファイルを見てみると、プラガブルデータベースの時は自分のものしか見えないみたい。
SQL> conn system/Oracle12c@orcl 接続されました。 SQL> select name from v$datafile; NAME ---------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/sysaux01.dbf /u01/app/oracle/oradata/orcl/undotbs01.dbf /u01/app/oracle/oradata/orcl/pdbseed/system01.dbf /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf /u01/app/oracle/oradata/orcl/pdb1/system01.dbf /u01/app/oracle/oradata/orcl/pdb1/sysaux01.dbf /u01/app/oracle/oradata/orcl/pdb1/pdb1_users01.dbf 9行が選択されました。 SQL> conn system/Oracle12c@pdb1 接続されました。 SQL> select name from v$datafile; NAME ---------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/undotbs01.dbf /u01/app/oracle/oradata/orcl/pdb1/system01.dbf /u01/app/oracle/oradata/orcl/pdb1/sysaux01.dbf /u01/app/oracle/oradata/orcl/pdb1/pdb1_users01.dbf
ユーザ(スキーマ)
pdb1にappというユーザを作っていますが、それがどう見えるかというと、プラガブルデータベースで閉じているようで、コンテナデータベースからすら見えません。
SQL> conn system/Oracle12c@orcl 接続されました。 SQL> select username from dba_users where account_status = 'OPEN'; USERNAME ------------------------------ SYS SYSTEM SQL> conn system/Oracle12c@pdb1 接続されました。 SQL> select username from dba_users where account_status = 'OPEN'; USERNAME ------------------------------ APP PDBADMIN SYS SYSTEM
何が嬉しいのか
新機能や特徴、「こんなに素晴らし」というのはOracle社のサイトや各種メディア記事で確認できます。
これまで、DBの分離はインスタンスかスキーマか、という単位での分離でしたが、プラガブルデータベース単位で分離することで、独立性を高めながらもリソースを有効活用することができるようになったのかな。
イメージはWebLogicで採用されているドメインモデル(管理サーバと管理対象サーバ)に近い。
スキーマ単位の分離だと運用上不都合があったような環境では有効に使われるのだと思う。
例えば、アプリ単位でDB管理者がいるような時で、他のアプリ情報を見せたくなかったりといったようなセキュリティ事情とか。
バックアップ・リストアであれば、データファイルは別々なので個別運用できるみたいだけど、起動停止やパッチ適用のタイミングなんかの運用を別にしたいような時には向かないっぽい。
パッケージをPaaSやSaaSで提供して、DB管理はユーザごとに別々、なんて使い方はできるんだろうな。
プラグ/アンプラグは検証環境の都合と今のところ興味がないので今は触れないでおきます。