2013年8月1日木曜日

Oracle 12c プラガブルDB(PDB)を別のCDBにアンプラグ→プラグインしてみる

今回は、Oracle DB 12c のプラガブル・データベース(PDB)を
コンテナ・データベース(CDB)からアンプラグして、
別のPDBにプラグインしてみます。

構成
  • アンプラグ→プラグインするPDB: pdb3orcl
  • アンプラグする元のCDB: orcl (サーバのホスト名は sv12c1 )
  • プラグインする先のCDB: oradb (サーバのホスト名は sv12c00 )
  • OSは、Oracle Linux Server release 6.2

CDBからアンプラグ

まず、ひとつめのCDB(CDB名:orcl)から、PDB(PDB名:pdb3orcl)をアンプラグします。

sqlplus で CDB「orcl」にログインします。
[oracle@sv12c1 ~]$ sqlplus sys/password@localhost/orcl as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Wed Jul 31 23:11:03 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT  ★CDBに接続しています。

SQL> col HOST_NAME for a10
SQL> select host_name,instance_name from v$instance;

HOST_NAME  INSTANCE_NAME
---------- ----------------
sv12c1    orcl  ★ひとつめのCDBです。

PDBを確認します。これからアンプラグするPDB「pdb3orcl」のCON_IDは 5 です。
SQL> col NAME for a10
SQL> select NAME,CON_ID,DBID,CON_UID from v$pdbs;

NAME           CON_ID       DBID    CON_UID
---------- ---------- ---------- ----------
PDB$SEED            2 4061795626 4061795626
PDBORCL             3 2266308759 2266308759
PDB2ORCL            4 3206526558 3206526558
PDB3ORCL            5 2588836665 2588836665

赤字部分のデータファイルのファイルが、アンプラグ対象のPDBのものです。
SQL> set pagesize 20
SQL> col NAME for a60
SQL> select con_id, name, status from v$datafile order by 1,2;

    CON_ID NAME                                                         STATUS
---------- ------------------------------------------------------------ -------
         1 /u01/app/oracle/oradata/orcl/sysaux01.dbf                    ONLINE
         1 /u01/app/oracle/oradata/orcl/system01.dbf                    SYSTEM
         1 /u01/app/oracle/oradata/orcl/undotbs01.dbf                   ONLINE
         1 /u01/app/oracle/oradata/orcl/users01.dbf                     ONLINE
         2 /u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf            ONLINE
         2 /u01/app/oracle/oradata/orcl/pdbseed/system01.dbf            SYSTEM
         3 /u01/app/oracle/oradata/orcl/pdborcl/pdborcl_users01.dbf     ONLINE
         3 /u01/app/oracle/oradata/orcl/pdborcl/sysaux01.dbf            ONLINE
         3 /u01/app/oracle/oradata/orcl/pdborcl/system01.dbf            SYSTEM
         4 /u02/oradata/pdb2orcl/pdb2orcl_users01.dbf                   ONLINE
         4 /u02/oradata/pdb2orcl/sysaux01.dbf                           ONLINE
         4 /u02/oradata/pdb2orcl/system01.dbf                           SYSTEM
         5 /u02/oradata/pdb3orcl/pdb2orcl_users01.dbf                   ONLINE
         5 /u02/oradata/pdb3orcl/sysaux01.dbf                           ONLINE
         5 /u02/oradata/pdb3orcl/system01.dbf                           SYSTEM

15 rows selected.

PDB「pdb3orcl 」をクローズして、アンプラグします。
SQL> alter pluggable database pdb3orcl close;

Pluggable database altered.

SQL> alter pluggable database pdb3orcl
  2  unplug into '/u02/pdbxml/pdb3orcl.xml';

Pluggable database altered.

ファイルを Tar + GZIP で圧縮して、別のCDBがあるサーバへ転送します。
PDBのデータファイルとXMLファイルを、両方とも転送しておきます。
[oracle@sv12c1 ~]$ cd /u02/oradata/
[oracle@sv12c1 oradata]$ ls -lh pdb3orcl
合計 976M
-rw-r----- 1 oracle oinstall 5.1M  7月 31 23:17 2013 pdb2orcl_users01.dbf
-rw-r----- 1 oracle oinstall 701M  7月 31 23:17 2013 sysaux01.dbf
-rw-r----- 1 oracle oinstall 271M  7月 31 23:17 2013 system01.dbf
-rw-r----- 1 oracle oinstall  21M  7月 31 14:00 2013 temp01.dbf
[oracle@sv12c1 oradata]$ tar zcvf pdb3orcl.tgz pdb3orcl
pdb3orcl/
pdb3orcl/pdb2orcl_users01.dbf
pdb3orcl/system01.dbf
pdb3orcl/sysaux01.dbf
pdb3orcl/temp01.dbf


[oracle@sv12c1 oradata]$ scp pdb3orcl.tgz /u02/pdbxml/pdb3orcl.xml  sv12c00:/u02/dbdata/
oracle@sv12c00's password:
pdb3orcl.tgz                                             100%  196MB  48.9MB/s   00:04
pdb3orcl.xml                                             100% 3979     3.9KB/s   00:00


ふたつめのCDBにプラグイン

ふたつめのCDBがあるサーバで、PDBのデータファイルを展開します。
[oracle@sv12c00 ~]$ cd /u02/dbdata/
[oracle@sv12c00 dbdata]$ tar zxvf pdb3orcl.tgz
pdb3orcl/
pdb3orcl/pdb2orcl_users01.dbf
pdb3orcl/system01.dbf
pdb3orcl/sysaux01.dbf
pdb3orcl/temp01.dbf

CDB「oradb」にログインします。
[oracle@sv12c00 ~]$ sqlplus sys/password@localhost/oradb as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Wed Jul 31 23:57:10 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT  ★CDBにログインしています
SQL> col HOST_NAME for a10
SQL> select host_name,instance_name from v$instance;

HOST_NAME  INSTANCE_NAME
---------- ----------------
sv12c00    oradb  ★ふたつめのCDBです。

こちらのCDBには、いまはPDBが1つだけあります。
SQL> col NAME for a10
SQL> select NAME,CON_ID,DBID,CON_UID from v$pdbs;

NAME           CON_ID       DBID    CON_UID
---------- ---------- ---------- ----------
PDB$SEED            2 4064016361 4064016361
PDB1                3 3329097605 3329097605

CDB「orcl」からもってきたPDB「pdb3orcl」をプラグインします。

データファイルのパスが、もともとの場所とは違うので、
source_file_name_convert」で指定変更しています。
そして、すでにデータファイルが指定の場所にあるので「nocopy」をつけています。

一時表領域用のファイルも一緒にもってきたので、
tempfile reuse」を指定して、ファイル(今回は「temp01.dbf」)を再利用します。
SQL> create pluggable database pdb3orcl
  2  using '/u02/dbdata/pdb3orcl.xml'
  3  source_file_name_convert = (
  4     '/u02/oradata/pdb3orcl/',
  5     '/u02/dbdata/pdb3orcl/'
  6  )
  7  nocopy
  8  tempfile reuse;

Pluggable database created.

PDBをオープンします。
オープンするときにエラーがあったと警告が表示されています。
プラグインしたPDBのデータファイルを認識しなおす過程で発生したもので、
問題ないのではないかと思われます。
※念のためアラートログ確認を忘れずに。

v$pdbs をみると、PDB「pdb3orcl」が追加されていることがわかります。

SQL> alter pluggable database pdb3orcl open;

Warning: PDB altered with errors.

SQL> col NAME for a10
SQL> select NAME,CON_ID,DBID,CON_UID from v$pdbs;

NAME           CON_ID       DBID    CON_UID
---------- ---------- ---------- ----------
PDB$SEED            2 4064016361 4064016361
PDB1                3 3329097605 3329097605
PDB3ORCL            4 2588836665 2588836665

CON_IDが 4 のデータファイル(赤字の部分)がプラグインしたものです。
プラグインしたファイルはこちらのCDBは、OMF(Oracle Managed Files)なので
移行元のCDBとは、ファイル名の感じが違います・・・
SQL> set pagesize 40
SQL> col NAME for a45
SQL> select con_id, name, status from v$datafile order by 1,2;

    CON_ID NAME                                          STATUS
---------- --------------------------------------------- -------
         1 /u01/app/oracle/oradata/ORADB/datafile/o1_mf_ ONLINE
           sysaux_8yr7b481_.dbf
         1 /u01/app/oracle/oradata/ORADB/datafile/o1_mf_ SYSTEM
           system_8yr7dhjw_.dbf
         1 /u01/app/oracle/oradata/ORADB/datafile/o1_mf_ ONLINE
           undotbs1_8yr7h5to_.dbf
         1 /u01/app/oracle/oradata/ORADB/datafile/o1_mf_ ONLINE
           users_8yr7h4sn_.dbf
         2 /u01/app/oracle/oradata/ORADB/datafile/o1_mf_ ONLINE
           sysaux_8yr7jmkf_.dbf
         2 /u01/app/oracle/oradata/ORADB/datafile/o1_mf_ SYSTEM
           system_8yr7jmko_.dbf
         3 /u01/app/oracle/oradata/ORADB/E20A461FD170438 ONLINE
           DE0438C04A8C0ED68/datafile/o1_mf_sysaux_8yr85
           pb5_.dbf
         3 /u01/app/oracle/oradata/ORADB/E20A461FD170438 SYSTEM
           DE0438C04A8C0ED68/datafile/o1_mf_system_8yr85
           pfw_.dbf
         3 /u01/app/oracle/oradata/ORADB/E20A461FD170438 ONLINE
           DE0438C04A8C0ED68/datafile/o1_mf_users_8yr87p
           0f_.dbf
         4 /u02/dbdata/pdb3orcl/pdb2orcl_users01.dbf     ONLINE
         4 /u02/dbdata/pdb3orcl/sysaux01.dbf             ONLINE
         4 /u02/dbdata/pdb3orcl/system01.dbf             SYSTEM

12 rows selected.

PDBへのログインもできます。
プラグイン先のCDBの方がPDB数が少なかったため、
CON_ID は減って 4 になりました。

SQL> conn system/password@localhost/pdb3orcl
Connected.
SQL> show con_name

CON_NAME
------------------------------
PDB3ORCL ★プラグインしたPDBにログインしている。
SQL> show con_id
CON_ID
------------------------------
4

以上、PDBを別のCDBへアンプラグ→プラグインしてみる話でした。

0 件のコメント:

コメントを投稿