201: オンプレミスのPDBをBaseDBに移動しよう
Base Database Service (BaseDB)では、12c 以降のデータベースをプロビジョニングした場合、デフォルトでマルチテナント・コンテナ・データベース(CDB)で作成されます。 CDB で構成されているオンプレミスのデータベースから BaseDB へ移行する場合、PDB のアンプラグ・プラグを行う事で簡単に移行可能です。 その際、両データベースのバージョンに差異があった場合は autoupgrade 等のツールを利用する事で、バージョンアップも行う事が可能です。
ここでは、オンプレミスのデータベース(19.12.0.0.0)から BaseDB(19.12.0.0.0)へ PDB を移行する手順をご紹介します。
前提条件 :
-
移行元のデータベースがCDB で構成されていること
-
Oracle Cloud で Oracle Database を使おう を通じて Oracle Database の作成が完了していること
**所要時間 :** 約1時間30分
まずは移行元のデータベースから、移行対象の PDB をアンプラグします。 アンプラグは Database Configuration Assistant ツールを使って行う事も可能ですが、今回はコマンドでの実施手順を紹介します。
- 対象 PDB の構成確認します PDB の移動にあたってデータファイルを BaseDB に持っていく必要があります。 まずは下記 SELECT 文にて対象 PDB で使用しているデータファイルのディレクトリを確認します。
alter session set container=<pdb_name>;
select tablespace_name, file_name from dba_data_files;
(作業イメージ)

- 対象 PDB をクローズします
alter pluggable database <pdb_name> close;
- 対象 PDB のアンプラグします
alter pluggable database testpdb unplug into '<任意のディレクトリ>/testpdb.xml';
-
対象 PDB で使用しているデータファイル、及びアンプラグ時に生成された xml ファイルを BaseDB 上のディレクトリにコピーします
-
移行元のデータベースにはアンプラグした PDB の情報が残りますので、必要に応じて削除して下さい。
以上で PDB のアンプラグ完了です。
- アンプラグ時に生成された xml ファイルを開き、データファイルのパスを BaseDB 上のパスに書き換えます
※次の例では、データファイル及び xml ファイルを BaseDB 上の/home/oracle/work/ディレクトリ配下に配置しています。
- 書き換え前
- 書き換え後
- CDB に接続し、PDB のプラグを実行します
create pluggable database <pdb_name> using '<xmlファイルのフルパス>'
file_name_convert = ('<データファイルの配置ディレクトリ>','<データファイルの再配置先>');
(作業イメージ)
※testpdb2 という名前でプラグしており、ASM ディスクグループ上に再配置する為に"+DATA" を指定

- プラグした PDB をオープンします
alter pluggable database <pdb_name> open;
- PDB_PLUG_IN_VIOLATIONS ビューを確認し、TYPE 列値が’ERROR’となっているものがないか確認します
※TYPE 列=‘ERROR’となっている項目がある場合、ACTION 列の内容に従ってエラーを解消する必要があります
select * from pdb_plug_in_violations where status ='RESOLVED';
BaseDB 上のデータベースでは、セキュリティ観点から表領域の暗号化を強く推奨しており、非暗号化の表領域を新規作成する事ができません。 移行元のデータベースで表領域を暗号化していない場合、プラグ後の PDB も表領域は暗号化されていない為、次の手順にて暗号化する事が可能です。
- プラグした PDB 用の TDE マスター暗号化鍵を生成します
alter session set container=<PDB_NAME>;
administer key management set key force keystore identified by "<TDE wallet password>" with backup;
- 表領域の暗号化変換を行います
alter session set container=<PDB_NAME>;
alter tablespace <TABLESPACE_NAME> encryption online encrypt;
- PDB を再起動し、pdb_plug_in_violations ビューに"PENDING"となっている項目がない事を確認します
select * from pdb_plug_in_violations where status <> 'RESOLVED';
なお、プラグしたPDBがOCIコンソール上に表示されるまでタイムラグがありますので、暫くお待ち頂いてからご確認下さい。
以上で、この章の作業は完了です。