Oracle 12c のプラガブルDB(PDB)を、
同じサーバ内でアンプラグ(切断)→プラグ(再接続)してみました。
環境
OS: Oracle Linux Server release 6.2
DB: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0
CDB名: orcl
PDB1: pdborcl
PDB2: pdb2orcl
★このPDBをアンプラグ→プラグインします。
ついでに、PDBの場所(データファイルのパス)を変更してみます。
/u01/app/oracle/oradata/orcl/pdb2orcl/*.dbf
↓
/u02/oradata/pdb2orcl/*.dbf
手順
PDBをアンプラグするときにXMLファイルを作成するので、
事前にディレクトリを作成しておきます。
[root@sv12c1 ~]# mkdir /u02/pdbxml
[root@sv12c1 ~]# chown oracle:dba /u02/pdbxml
コンテナデータベース(CDB)にログインします。
[oracle@sv12c1 ~]$ sqlplus sys/password@localhost/orcl as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Sat Jul 20 23:12:29 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> set pagesize 15
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 /u01/app/oracle/oradata/orcl/pdb2orcl/pdb2orcl_users01.dbf ONLINE
4 /u01/app/oracle/oradata/orcl/pdb2orcl/sysaux01.dbf ONLINE
4 /u01/app/oracle/oradata/orcl/pdb2orcl/system01.dbf SYSTEM
12 rows selected.
SQL> col NAME for a10
SQL> select NAME,CON_ID,DBID,CON_UID,GUID from v$pdbs;
NAME CON_ID DBID CON_UID GUID
---------- ---------- ---------- ---------- --------------------------------
PDB$SEED 2 4061795626 4061795626 E018B7BF835F1D45E043B505A8C05DDA
PDBORCL 3 2266308759 2266308759 E018DCC0D76D1FF1E043B505A8C0FC1F
PDB2ORCL 4 3206526558 3206526558 E075165AF1027BCCE043B505A8C08729
SQL> col NAME for a15
SQL> col NETWORK_NAME for a15
SQL> col PDB for a10
SQL> select SERVICE_ID,CON_ID,NAME,PDB,NETWORK_NAME from CDB_SERVICES order by 1,2;
SERVICE_ID CON_ID NAME PDB NETWORK_NAME
---------- ---------- --------------- ---------- ---------------
1 1 SYS$BACKGROUND CDB$ROOT
2 1 SYS$USERS CDB$ROOT
5 1 orclXDB CDB$ROOT orclXDB
6 1 orcl CDB$ROOT orcl
6 3 pdborcl PDBORCL pdborcl
7 4 pdb2orcl PDB2ORCL pdb2orcl
6 rows selected.
まず、アンプラグするPDB(pdb2orcl)をクローズしておきます。
SQL> alter pluggable database pdb2orcl close;
Pluggable database altered.
PDBをアンプラグします。
指定したXMLファイルに、PDBの構成情報が出力されます。
SQL> alter pluggable database pdb2orcl
2 unplug into '/u02/pdbxml/pdb2orcl.xml';
Pluggable database altered.
アンプラグしたPDBを、同じ名前でプラグインするため
一度CDBからPDBを削除(DROP)します。
あとでプラグインするときに使用するため、このとき
PDBのデータファイルは削除しない(「including datafiles」を指定しない)ようにします。
SQL> drop pluggable database pdb2orcl;
Pluggable database dropped.
PDBをプラグインします。
実際は、アンプラグするときに作成したXMLファイルをもとに、
もう一度PDBを作成(create pluggable database)します。
「file_name_convert」 を指定すると、PDBのデータファイルが新しい場所にコピーされます。
※すでにデータファイルを新しい場所に配置してある場合は「nocopy」を指定します。
SQL> create pluggable database pdb2orcl
2 using '/u02/pdbxml/pdb2orcl.xml'
3 file_name_convert = (
4 '/u01/app/oracle/oradata/orcl/pdb2orcl/',
5 '/u02/oradata/pdb2orcl/'
6 );
Pluggable database created.
PDBをオープンします。
これで、PDBにログインできるようになります。
SQL> alter pluggable database pdb2orcl open;
Pluggable database altered.
確認
プラグインしたPDBのデータファイルのパスが変更されました。
SQL> set pagesize 15
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
12 rows selected.
データファイルは、create pluggable database の処理の中でコピーされました。
元の場所にも、データファイルは残っていました。
SQL> ! ls -lh /u01/app/oracle/oradata/orcl/pdb2orcl
合計 966M ★元の場所にもデータファイルが残っている。
-rw-r----- 1 oracle oinstall 5.1M 7月 21 14:33 2013 pdb2orcl_users01.dbf
-rw-r----- 1 oracle oinstall 691M 7月 21 14:33 2013 sysaux01.dbf
-rw-r----- 1 oracle oinstall 271M 7月 21 14:33 2013 system01.dbf
SQL> ! ls -lh /u02/oradata/pdb2orcl
合計 966M ★新たにプラグインしたPDBのデータファイル。
-rw-r----- 1 oracle oinstall 5.1M 7月 21 14:40 2013 pdb2orcl_users01.dbf
-rw-r----- 1 oracle oinstall 691M 7月 21 15:15 2013 sysaux01.dbf
-rw-r----- 1 oracle oinstall 271M 7月 21 15:15 2013 system01.dbf
-rw-r----- 1 oracle oinstall 21M 7月 21 15:00 2013 temp01.dbf
プラグインしたPDBのDBIDやGUIDは変わらないようです。
PDBをオープン(alter pluggable database ~open)することで、
CDB_SERVICES に追加されました。
SQL> col NAME for a10
SQL> select NAME,CON_ID,DBID,CON_UID,GUID from v$pdbs;
NAME CON_ID DBID CON_UID GUID
---------- ---------- ---------- ---------- --------------------------------
PDB$SEED 2 4061795626 4061795626 E018B7BF835F1D45E043B505A8C05DDA
PDBORCL 3 2266308759 2266308759 E018DCC0D76D1FF1E043B505A8C0FC1F
PDB2ORCL 4 3206526558 3206526558 E075165AF1027BCCE043B505A8C08729
SQL> col NAME for a15
SQL> col NETWORK_NAME for a15
SQL> col PDB for a10
SQL> select SERVICE_ID,CON_ID,NAME,PDB,NETWORK_NAME from CDB_SERVICES order by 1,2;
SERVICE_ID CON_ID NAME PDB NETWORK_NAME
---------- ---------- --------------- ---------- ---------------
1 1 SYS$BACKGROUND CDB$ROOT
2 1 SYS$USERS CDB$ROOT
5 1 orclXDB CDB$ROOT orclXDB
6 1 orcl CDB$ROOT orcl
6 3 pdborcl PDBORCL pdborcl
7 4 pdb2orcl PDB2ORCL pdb2orcl
6 rows selected.
プラグインしたPDBに接続できました。
SQL> conn system/password@localhost/pdb2orcl
Connected.
SQL> show con_name
CON_NAME
------------------------------
PDB2ORCL
以上、PDBのアンプラグとプラグインでした。