4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Oracle12cR1 プラガブル・データベース(PDB)のUnplug/Plug

Last updated at Posted at 2017-05-14

Oracle Database 12cR1 マルチテナント・アーキテクチャ環境でのお勉強

概要

PDBをCDBからアンプラグして、別のCDBにプラグする。

環境

macOS 10.12 Sierra
Oracle VM VirtualBox 5.1.20 Mac OS X (64-bit)
Oracle Linux 7 Update x86-64
Oracle Database 12c Release 1 (12.1.0.2)

プラガブル・データベース(PDB)のアンプラグ

PDBをアンプラグするCDBの事前確認

接続先DBの確認

SQL> col name for a10
SQL> SELECT name FROM v$database;

NAME
----------
CDB

SQL> SELECT name, open_mode FROM v$pdbs;

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

PDBをアンプラグ

12cR1では、アンプラグ時にPDBをクローズしていない場合、下記のエラーが出力される。
12cR2ではオンラインでの対応が可能である模様。

SQL> ALTER PLUGGABLE DATABASE pdb1 UNPLUG INTO 'PDB1.xml';
ALTER PLUGGABLE DATABASE pdb1 UNPLUG INTO 'PDB1.xml'
*
行1でエラーが発生しました。:
ORA-65025:
プラガブル・データベースPDB1はすべてのインスタンスでクローズしていません。

PDB1をクローズする。

SQL> ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE;

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

SQL> SELECT name, open_mode FROM v$pdbs;

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

PDB1をアンプラグする。

SQL> ALTER PLUGGABLE DATABASE pdb1 UNPLUG INTO 'PDB1.xml';

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

PDBアンプラグ後の状態について

PDBをアンプラグすると、プラグイン定義用XMLファイルが生成される。

SQL> !locate PDB1.xml
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/PDB1.xml

また、PDBを削除するまで定義情報は存在する。

SQL> SELECT name, open_mode FROM v$pdbs;

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

SQL> col pdb_name for a10
SQL> SELECT pdb_name, status FROM cdb_pdbs;

PDB_NAME   STATUS
---------- ---------------------------
PDB$SEED   NORMAL
PDB1	   UNPLUGGED
PDB2	   NORMAL

PDBを削除

SQL> DROP PLUGGABLE DATABASE pdb1 KEEP DATAFILES;

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

SQL> SELECT name, open_mode FROM v$pdbs;

NAME	   OPEN_MODE
---------- ------------------------------
PDB$SEED   READ ONLY
PDB2	   READ WRITE

SQL> SELECT pdb_name, status FROM cdb_pdbs;

PDB_NAME   STATUS
---------- ---------------------------
PDB$SEED   NORMAL
PDB2	   NORMAL

プラガブル・データベース(PDB)のプラグ

PDBをプラグするCDBの事前確認

SQL> col name for a10
SQL> SELECT name FROM v$database;

NAME
----------
CDB2

SQL> col pdb_name for a10
SQL> SELECT name, open_mode FROM v$pdbs;

NAME	   OPEN_MODE
---------- ------------------------------
PDB$SEED   READ ONLY

PDBがCDBと互換性があるか確認

DBMS_PDB.CHECK_PLUG_COMPATIBILITYを使用することで、互換性を確認できる。
https://docs.oracle.com/cd/E49329_01/server.121/b71301/cdb_plug.htm#CEGJBJJE

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

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

出力がNOの場合はPDBに互換性がなく、PDB_PLUG_IN_VIOLATIONSビューにレコードが生成される。

SQL> SELECT message, action FROM pdb_plug_in_violations WHERE name='PDB1';

レコードが選択されませんでした。

今回は問題なかったため、レコードは生成されなかった。

PDBをプラグ

SQL> CREATE PLUGGABLE DATABASE pdb1 USING 'PDB1.xml' NOCOPY;

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

PDBをオープン

SQL> ALTER PLUGGABLE DATABASE pdb1 OPEN;

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

SQL> SELECT name, open_mode FROM v$pdbs;

NAME	   OPEN_MODE
---------- ------------------------------
PDB$SEED   READ ONLY
PDB1	   READ WRITE

SQL> SELECT pdb_name, status FROM cdb_pdbs;

PDB_NAME   STATUS
---------- ---------------------------
PDB$SEED   NORMAL
PDB1	   NORMAL

PDBをCDBからアンプラグして、別のCDBにプラグできることを確認できた。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?