きさま!見ているなッ!!

【Oracle】CDBからPDBを切断して再接続する

  • 2019-09-08
  • 2019-09-08
  • Oracle

マルチテナント環境では、マルチテナント・コンテナ・データベース(CDB)からプラガブル・データベース(PDB)を切断して、別の CDB に切断した PDB を接続することができます。

今回は、PDB の切断と再接続について、下記の 2 パターンでご紹介します。

※処理フローは、どちらも「PDB 切断 → PDB 削除 → PDB 再接続」ですが、各処理の方法で異なる部分があります。また、同じ CDB を使用して、切断→再接続を実施します。

・パターン1

処理説明
PDBの切断XMLメタデータ・ファイルを作成し、切断する。
PDBの削除データファイルを保持したまま削除する。
PDBの再接続XMLメタデータ・ファイルとデータファイルを使用して、再接続する。

・パターン2

処理説明
PDBの切断PDBアーカイブ・ファイル(XMLメタデータ・ファイルとPDBのデータファイルなどを含む圧縮ファイル)を作成し、切断する。
PDBの削除データファイルも削除する。
PDBの再接続PDBアーカイブ・ファイルを使用して、再接続する。

環境

・環境情報

OSRDBMS
CentOS 7.6Oracle Database 12c R2 Enterprise Edition

・CDB 情報

データベース名CDB
データベースタイプ単一インスタンス
アーキテクチャマルチテナント
データベース記憶域ローカル・ストレージ
高速リカバリ領域ローカル・ストレージ
UNDOモードローカル
データベース・ログ・モードアーカイブ・モード

・PDB 情報

PDB名PDB1
PDBローカル管理者PDB1ADM
PDBのデータファイルの場所/u01/app/oracle/oradata/pdb1/
オープン・モード読取り/書込みモード
PDB名PDB2
PDBローカル管理者PDB1ADM
PDBのデータファイルの場所/u01/app/oracle/oradata/pdb2/
オープン・モード読取り/書込みモード

PDB の作成については、こちらの記事をどうぞ。

共通

環境変数の設定

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export ORACLE_HOSTNAME=testdb.oracle12c.jp
export ORACLE_SID=cdb

必要な環境変数を設定します。

環境変数設定値説明
ORACLE_BASE/u01/app/oracleOracleディレクトリ・ツリーのルート
ORACLE_HOME/u01/app/oracle/product/12.2.0/dbhome_1Oracleソフトウェアのインストール先
ORACLE_HOSTNAMEtestdb.oracle12c.jpPCのホスト名
ORACLE_SIDcdbインスタンス識別子(SID)

ディレクトリ作成

mkdir -p /home/oracle/unplug

PDB のXMLメタデータ・ファイルおよび PDB アーカイブ・ファイルの保存先ディレクトリを作成します。

CDBルートに接続

$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on 金 9月 6 03:53:53 2019

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



Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
に接続されました。
SQL> 
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL>

CDB ルートに接続します。

PDBクローズ

SQL> ALTER PLUGGABLE DATABASE ALL CLOSE;

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

SQL> 
SQL> set lin 1000
SQL> col name for a20
SQL> SELECT name, open_mode FROM v$pdbs;

NAME                 OPEN_MODE
-------------------- ------------------------------
PDB$SEED             READ ONLY
PDB1                 MOUNTED
PDB2                 MOUNTED

SQL>

PDB をクローズします。

パターン1

PDB1の切断

SQL> ALTER PLUGGABLE DATABASE pdb1 UNPLUG INTO '/home/oracle/unplug/pdb1.xml';

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

SQL>

UNPLUG INTO 句に XMLメタデータ・ファイルの名前と場所を指定します。

PDB1の削除

SQL> DROP PLUGGABLE DATABASE pdb1 KEEP DATAFILES;

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

SQL>

データファイルを保持したまま PDB1 を削除します。

PDB1の再接続

PDB1とCDBの互換性チェック

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    compatible CONSTANT VARCHAR2(3) := 
  3      CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
  4             pdb_descr_file => '/home/oracle/unplug/pdb1.xml',
  5             pdb_name       => 'PDB1')
  6      WHEN TRUE THEN 'YES'
  7      ELSE 'NO'
  8  END;
  9  BEGIN
 10    DBMS_OUTPUT.PUT_LINE(compatible);
 11  END;
 12  /
YES

PL/SQLプロシージャが正常に完了しました。

SQL>

上記の PL/SQL ブロックを実行し、PDB と CDB の互換性をチェックします。出力結果が「NO」の場合は、互換性がないので、PDB_PLUG_IN_VIOLATIONSビューをチェックしましょう。

PDB1再接続

SQL> CREATE PLUGGABLE DATABASE pdb1 USING '/home/oracle/unplug/pdb1.xml'
  2  NOCOPY
  3  ;

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

SQL>

XMLメタデータ・ファイルを指定します。また、PDB1 のデータファイルは削除していないので、NOCOPY も指定します。

PDB1オープン

SQL> ALTER PLUGGABLE DATABASE pdb1 OPEN;

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

SQL>

読取り/書込みモードでオープンします。

パターン2

PDB2の切断

SQL> ALTER PLUGGABLE DATABASE pdb2 UNPLUG INTO '/home/oracle/unplug/pdb2.pdb';

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

SQL>

UNPLUG INTO 句に PDBアーカイブ・ファイルの名前と場所を指定します。

PDB2の削除

SQL> DROP PLUGGABLE DATABASE pdb2 INCLUDING DATAFILES;

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

SQL>

PDB2 および、そのデータファイルも削除します。

PDB2の再接続

PDB2とCDBの互換性チェック

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    compatible CONSTANT VARCHAR2(3) := 
  3      CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
  4             pdb_descr_file => '/home/oracle/unplug/pdb2.pdb',
  5             pdb_name       => 'PDB2')
  6      WHEN TRUE THEN 'YES'
  7      ELSE 'NO'
  8  END;
  9  BEGIN
 10    DBMS_OUTPUT.PUT_LINE(compatible);
 11  END;
 12  /
YES

PL/SQLプロシージャが正常に完了しました。

SQL>

上記の PL/SQL ブロックを実行し、PDB と CDB の互換性をチェックします。出力結果が「NO」の場合は、互換性がないので、PDB_PLUG_IN_VIOLATIONSビューをチェックしましょう。

PDB2再接続

SQL> CREATE PLUGGABLE DATABASE pdb2 USING '/home/oracle/unplug/pdb2.pdb'
  2  FILE_NAME_CONVERT = ('/home/oracle/unplug/', '/u01/app/oracle/oradata/pdb2/')
  3  ;

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

SQL>

PDB アーカイブ・ファイルを指定します。PDB2 のデータファイルは削除したので、FILE_NAME_CONVERT 句を指定して、アーカイブからコピーされるようにします。

PDB2オープン

SQL> ALTER PLUGGABLE DATABASE pdb2 OPEN;

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

SQL>

読取り/書込みモードでオープンします。

まとめ

今回は、同じ CDB 上で PDB の切断と再接続を行いました。切断した PDB のファイルを別のサーバーに移動し、別の CDB に再接続させることもできます。

簡単に PDB 単位の移動ができるので、移行作業が捗りますね。

【Oracle】CDBからPDBを切断して再接続する
最新情報をチェックしよう!