最近のOracleのデータベースのインスタンスを作成する時に「コンテナ・データベース(CDB)として作成する」ができる様だ。
今までのデータベース(区別するためにプラガブル・データベース(PDB)と名前が付いている)を複数個格納できるコンテナなデータベースらしい。
各データベース(CDB,PDB)の接続方法は
- 新たなコンテナ・データベース(CDB)はローカル接続のみ。
- 今までのデータベース(PDB)はリモート接続のみに変わる。
ということで、一般ユーザ(アプリを含む)からは、何も変わらない気がするけどね。
ただ、安易にCDBを作成するとPDBの接頭語を指定してpdb1,pdb2,pdb3とか名前が自動的に割り振られてしまうようなので、リモート接続のインスタンス(あるいはサービス名?)は変更しないといけなさそう。
そんな訳で、コンテナDBの管理者に
- CDBにローカル接続
- CDBで共通ユーザを作って、ログ収集用とか最適化用とかIMPORT/EXPORT用とかロールを割当る。
- 共通ユーザ名は「C##またはc##」の接頭語が必要らしい。
- ALTER SESSION SET CONTAINER = ${PDBの名前}; でPDBを指定して、
- 各PDBの管理者や一般ユーザのアカウントの登録とロールを設定する。
をしてもらえば、後は概ね今まで通りで良いんじゃないのかな?
各PDBのテーブル登録は各PDBの管理者がリモートできるから便利になるかもかも
後、データベース・サーバの移行は・・・
移行元サーバのデータベースがCDBなら、
- 移行先サーバで空のCDBを作成
- SQL Developerの接続先に移行先・元サーバを追加
- SQL Developerで移行元サーバの移行したいPDBで
- 「状態の変更」
- 「プラガブル・データベースの切断」
- 移行したいPDBをフォルダ毎、移行先サーバへコピー(これが難物)
- SQL Developerで移行先サーバで
- CDBで「プラガブル・データベースのプラグイン」
- アンプラグした時に生成したXMLファイルをPDB名を指定
となるらしい。
EXPORT/IMPORTの方が手順が短いけど、IMPORTで難解なエラーに悩むかもしれない事を考えると、楽そうではある。
最もDBが巨大なファイル(100GBとか)になっていたら、rsyncするか、DB移行アプリでも作って一週間も動かし続けるとかかもしれないけどね。
参考文献1:ユージ&ギョータの実践データベース講座