プラガブル・データベースの作成

 この記事ではプラガブル・データベースの作成について解説します。

 新規PDBの作成

## CDBに接続
sqlplus / as sysdba
-- シードからPDBを新規作成
create pluggable database PDB1 admin user mypdb1_admin identified by password role=(connect) file_name_convert=('pdbseed','mypdb1');
-- PDBのオープン
alter pluggable database MYPDB1 open;


 PDBのクローニング(同一CDB内)

## CDBに接続
sqlplus / as sysdba
-- 同一CDBのPDBクローン(OMF環境)
create pluggable database pdb2 from pdb1;
-- PDBのオープン
alter pluggable database pdb2 open;


 リモートCDBからのクローニング

## CDBに接続
sqlplus / as sysdba
-- PDB作成権限の付与
gtant create pluggable database to system container=all;
-- DBリンクの作成
create database link link_clone connect to system identified by password using 'cdb1'
-- リモートCDBからのクローニング
create pluggable database pdb3 from pdb3@link_clone file_name_convert=('/u01/app/oracle/oradata/CDB1/pdb3', '/u01/app/oracle/oradata/CDB2/pdb3');
-- PDBのオープン
alter pluggable database pdb3 open;


 PDBのアンプラグ/プラグ

## CDBに接続
sqlplus / as sysdba
-- PDBのクローズ
alter pluggable database pdb1 close immediate;
-- PDBのアンプラグ
alter pluggable database pdb1 unplug into 'pdb1.xml';
-- PDBの削除
drop pluggable database pdb1;
-- PDBのプラグ
create pluggable database pdb1 using 'pdb1.xml' nocopy;
-- PDBのオープン
alter pluggable database pdb1 open;


 非CDBのプラグイン

## マニュアル参照
## 非CDBに接続
sqlplus / as sysdba
-- DBの停止
shutdown immediate
-- 読み取り専用でオープン
startup open read only
-- xmlファイルの作成
BEGIN
  DBMS_PDB.DESCRIBE(
    pdb_descr_file => '/tmp/noncdb.xml');
END;
/
-- 互換性チェック
SET SERVEROUTPUT ON
DECLARE
  compatible BOOLEAN;
BEGIN
  compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
    pdb_descr_file => '/tmp/noncdb.xml',
    pdb_name       => 'NONCDB_PDB'
  );
  IF compatible THEN
    DBMS_OUTPUT.PUT_LINE('Compatible');
  ELSE
    DBMS_OUTPUT.PUT_LINE('Not Compatible');
  END IF;
END;
/
-- 非CDBの停止
shutdown immediate
-- SQL*Plusの終了
exit
## ターゲットCDBに接続
sqlplus / as sysdba
-- 非CDBの接続
CREATE PLUGGABLE DATABASE noncdb_pdb
  USING '/tmp/noncdb.xml'
  COPY
  FILE_NAME_CONVERT = (
    '/u01/app/oracle/oradata/NONCDB/', 
    '/u01/app/oracle/oradata/CDB/noncdb_pdb/'
  );
-- PDBへ接続
ALTER SESSION SET CONTAINER = noncdb_pdb;
-- スクリプトの実行
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
-- PDBのオープン
alter pluggable database noncdb_pdb open;


 非CDBのリソースの移動

## 非CDBに接続
sqlplus / as sysdba
-- ディレクトリオブジェクトの作成
create directory dir as '/home/oracle';
-- SQL*Plusの終了
exit
## スキーマ単位のエクスポート
expdp system/password directory=dir dumpfile=hr.dmp schema='HR'
## ターゲットCDBに接続
sqlplus / as sysdba
-- PDBへ接続
alter session set container=pdb1;
-- ディレクトリオブジェクトの作成
create directory dir as '/home/oracle';
-- SQL*Plusの終了
exit
## スキーマ単位のインポート
impdp system/Welcome_1 directory=dir dumpfile=hr.dmp schema='HR' remap_tablespace='USERS:SYSTEM'


 PDBの削除

## CDBに接続
sqlplus / as sysdba
-- PDBのクローズ
alter pluggable database pdb1 close;
-- PDBの削除
drop pluggable database pdb1 including datafiles;