2013年8月1日木曜日

PDBプラグイン後のアラートログを見てみる。

Oracle 12c のプラガブル・データベース(PDB)を
別のコンテナ・データベース(CDB)にプラグインしてみました。

PDB「pdb3orcl」をプラグインしています。
この時にエラーがでたので、ためしにアラートログを見てみました。
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.

SQL> alter pluggable database pdb3orcl open;

Warning: PDB altered with errors.

その時のアラートログです。
どうやら、PDBのデータファイルが以前のCDBでのファイル番号(file#)をもっていたので
エラーを出していたようです。
プラグイン先のCDBであらためてファイル番号を振りなおしているようで、
プラグイン後の処理自体は完了、成功しているようです。
Thu Aug 01 00:08:18 2013  ★アラートログに実行したSQLが出力されています。
create pluggable database pdb3orcl
using '/u02/dbdata/pdb3orcl.xml'
source_file_name_convert = (
   '/u02/oradata/pdb3orcl/',
   '/u02/dbdata/pdb3orcl/'
)
nocopy
tempfile reuse
Thu Aug 01 00:08:19 2013
****************************************************************
Pluggable Database PDB3ORCL with pdb id - 4 is created as UNUSABLE.
If any errors are encountered before the pdb is marked as NEW,
then the pdb must be dropped
****************************************************************
Deleting old file#33 from file$  ★プラグインしたPDBのデータファイルをいったん削除
Deleting old file#34 from file$
Deleting old file#35 from file$
Adding new file#11 to file$(old file#33)  ★あらためてファイル追加しなおしていいる
Adding new file#12 to file$(old file#34)
Adding new file#13 to file$(old file#35)
Successfully created internal service pdb3orcl at open  ★成功しています。
ALTER SYSTEM: Flushing buffer cache inst=0 container=4 local
****************************************************************
Post plug operations are now complete.
Pluggable database PDB3ORCL with pdb id - 4 is now marked as NEW.
****************************************************************
Completed: create pluggable database pdb3orcl  ★プラグイン完了しています。
using '/u02/dbdata/pdb3orcl.xml'
source_file_name_convert = (
   '/u02/oradata/pdb3orcl/',
   '/u02/dbdata/pdb3orcl/'
)
nocopy
tempfile reuse
alter pluggable database pdb3orcl open  ★PDBをオープンしています。
Thu Aug 01 00:09:14 2013
Pluggable database PDB3ORCL dictionary check beginning
Pluggable Database PDB3ORCL Dictionary check complete
Opening pdb PDB3ORCL (4) with no Resource Manager plan active

XDB installed.

XDB initialized.
Warning: Pluggable database PDB3ORCL altered with errors
              ★このメッセージはコンソール表示されていたエラーと同じものでしょう。
Pluggable database PDB3ORCL opened read write
Completed: alter pluggable database pdb3orcl open

ちなみに、アラートログの場所は、11gのころから変わりありません。
この環境は、 ORACLE_BASEが「/u01/app/oracle」、
CDB名が「oradb」(そしてDBインスタンス名もoradb)なので下記のようなファイル名でした。
※結構、一般的な構成だと思います。

/u01/app/oracle/diag/rdbms/oradb/oradb/trace/alert_oradb.log


以上、PDBプラグインした時のエラー表示についてでした。

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へアンプラグ→プラグインしてみる話でした。

2013年7月30日火曜日

OracleDB 12c 絵でPDB

ひさびさに、絵的なポストをしてみます。
Oracle DB 12c のプラガブルデータベース(PDB)です。


Oracle DB 12c から、プラガブル・データベースという仕組みができました。通称、PDBです。
コンテナ・データベース(CDB)に、いくつもPDBをプラグインすることができます。

CDBと、PDBは、それぞれ別のデータファイルを持ちます。



CDBには、PDBをプラグインすることができます。
新しいPDBを作成することもできますし、
他のコンテナで作成したPDBを外して(アンプラグして)もってきて、
プラグインすることもできます。



PDBは、それぞれ個別にクローズしたり、オープンしたりすることができます。
クローズしたPDBは、CDBから「アンプラグ」することができます。
PDBをアンプラグするとき、PDBの構成情報をXMLファイルに保存します。



アンプラグしたPDBを、別のCDBに「プラグイン」できます。
プラグインするときは、「plugin~」ではなく、「create pluggable database」です。

そのとき、アンプラグしたときに保存したXMLファイルを使用します。


クローズしただけのPDBは、再びオープンすることができますが、
アンプラグしたPDBは、もとのCDBではオープンできません。
いちど削除してあらためてプラグインすると、使用できるようになります。


PDBは一度 unplugするとOpenできない?

いちどアンプラグしたPDBは、そのままではオープンもクローズもできなくなります。

そのまま、もとのCDBで使用したい時は、
いったんアンプラグしたPDBを 削除(drop pluggable database) して、プラグインすると使用できます。
再びPDBをプラグインしたいときも、「create pluggable database」します。
※削除するとき、まちがってデータファイルを一緒に消さないように注意。

アンプラグしたPDBをオープンしようとすると、エラーになります。
SQL> alter pluggable database pdb2orcl
  2  unplug into '/u02/pdbxml/pdb2orcl.xml';

Pluggable database altered.

SQL> alter pluggable database pdb2orcl open;
alter pluggable database pdb2orcl open
*
ERROR at line 1:
ORA-65086: cannot open/close the pluggable database

マニュアルより。アンプラグしたPDBは、drop だけできます。
Oracle Database Error Messages
12c Release 1 (12.1)
http://docs.oracle.com/cd/E16655_01/server.121/e26079/e60000.htm
ORA-65086: cannot open/close the pluggable database
Cause: The pluggable database has been unplugged.
Action: The pluggable database can only be dropped.

以上、絵でPDBでした。

2013年7月28日日曜日

Oracle 12c プラガブルDB(PDB)をクローンしてみる

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を「pdb3orcl」としてクローニングします。

手順

まずコンテナDB(CDB)に接続します。
[oracle@sv12c1 ~]$ sqlplus sys/password@localhost/orcl as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Sun Jul 28 14:05:42 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 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
★クローン前の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.  ★クローン前のデータファイル一覧です。

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サービス一覧です。


クローン元のPDBを読み取り専用でオープンします。
SQL> alter pluggable database pdb2orcl close;

Pluggable database altered.

SQL> alter pluggable database pdb2orcl open read only;

Pluggable database altered.

クローンします。
SQL> create pluggable database pdb3orcl from pdb2orcl
  2  file_name_convert = (
  3    '/u02/oradata/pdb2orcl/',
  4    '/u02/oradata/pdb3orcl/'
  5  )
  6  path_prefix = '/u02/oradata/pdb3orcl';

Pluggable database created.

読み取り専用にしていたクローン元のPDBを、オープンしなおします。
SQL> alter pluggable database pdb2orcl close;

Pluggable database altered.

SQL> alter pluggable database pdb2orcl open;

Pluggable database altered.

クローニングしたPDBを、オープンします。
SQL> alter pluggable database pdb3orcl open;

Pluggable database altered.

PDBがクローンされました。
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
PDB3ORCL            5 2588836665 2588836665 E28C5FA5B84E7396E043B505A8C0D0A9

クローニングした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のサービスも追加されました。
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
         8          5 pdb3orcl        PDB3ORCL   pdb3orcl

7 rows selected.

クローニングしたPDBに接続できました。
SQL> conn system/password@localhost/pdb3orcl
Connected.
SQL> show con_name

CON_NAME
------------------------------
PDB3ORCL

以上、PDBのクローニングでした。

2013年7月21日日曜日

Oracle 12c プラガブルDB(PDB)をサーバ内でアンプラグ→プラグインしてみる

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のアンプラグとプラグインでした。

2013年7月15日月曜日

Oracle 12c プラガブル・データベースのRedoログファイル

Oracle 12c のコンテナ・データベース(CDB)とプラガブル・データベース(PDB)では、
Redoログファイルが共用されています。
今回は、sqlplusでDBインスタンスにログインして、Redoログファイルを見てみます。
DB構成は、前回と同様で、
CDB「orcl」に、PDB「pdborcl」と「pdb2orcl」が接続されています。

コンテナ・データベース: CDB$ROOT
                |-- プラガブル・データベース1: PDBORCL
                |-- プラガブル・データベース2: PDB2ORCL
※ホスト名はRACっぽいですが、シングル構成です

まず、PDBにログインしてRedoログファイルを見てみます。
[oracle@rac12c1 ~]$ sqlplus system/password@localhost/orcl
SQL*Plus: Release 12.1.0.1.0 Production on Mon Jul 15 14:56:11 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Last Successful login time: Fri Jul 05 2013 06:32:42 +09:00
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

SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.log
SQL> select GROUP#,SEQUENCE#,FIRST_CHANGE# from v$log;

    GROUP#  SEQUENCE# FIRST_CHANGE#
---------- ---------- -------------
         1        109       3582405
         2        110       3597487
         3        108       3559411 

1つめのPDBに接続してRedoログファイルを見てみると、
CDBと同じファイルを使用していることがわかります。
[oracle@rac12c1 ~]$ sqlplus system/password@localhost/pdborcl
SQL*Plus: Release 12.1.0.1.0 Production on Mon Jul 15 14:58:02 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Last Successful login time: Mon Jul 15 2013 14:57:55 +09:00
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
------------------------------
PDBORCL

SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log  ★CDBと同じRedoログファイル
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.log

SQL> select GROUP#,SEQUENCE#,FIRST_CHANGE# from v$log;
    GROUP#  SEQUENCE# FIRST_CHANGE#
---------- ---------- -------------
         1        109       3582405
         2        110       3597487
         3        108       3559411

2つめのPDB(PDB2ORCL)に接続してRedoログファイルを見てみると、
1つめのPDBと同様に、CDBと同じファイルを使用しています。
[oracle@rac12c1 ~]$ sqlplus system/password@localhost/pdb2orcl
SQL*Plus: Release 12.1.0.1.0 Production on Mon Jul 15 14:58:42 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Last Successful login time: Mon Jul 15 2013 14:50:51 +09:00
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
------------------------------
PDB2ORCL

SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.log

SQL> select GROUP#,SEQUENCE#,FIRST_CHANGE# from v$log;
    GROUP#  SEQUENCE# FIRST_CHANGE#
---------- ---------- -------------
         1        109       3582405
         2        110       3597487
         3        108       3559411

ためしに、Redoログの切り替えをPDBで実施してみたところ、エラーになってしまいました。
Redoログファイルの切り替えは、プラガブル・データベース側では許可されていません。
SQL> show con_name
CON_NAME
------------------------------
PDB2ORCL

SQL> alter system switch logfile;
alter system switch logfile
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database

Redoログの切り替えは、CDBにログインして実行します。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

SQL> alter system switch logfile;
System altered.  ★CDB側では、ログ切り替えができた。

以上、CDBとPDBのRedoログファイルでした。

2013年7月3日水曜日

Oracle 12c プラガブル・データベースのデータファイル構成について

Oracle 12c コンテナ・データベース(CDB)、プラガブル・データベース(PDB)の
データファイル構成を見てみました。

DB構成は、前回と同様で、
CDB「orcl」に、PDB「pdborcl」と「pdb2orcl」が接続されています。
コンテナ・データベース: CDB$ROOT
                |-- プラガブル・データベース1: PDBORCL
                |-- プラガブル・データベース2: PDB2ORCL

まず、CDBにsqlplusでログインして、データファイルを見てみます。
CDB(ROOT)から dba_data_files を見てみると、CDBのデータファイルしか見えません。
しかし、cdb_data_files を参照すれば、PDBのデータファイルも見えました。
[oracle@rac12c1 ~]$ sqlplus system/password@localhost/orcl
SQL*Plus: Release 12.1.0.1.0 Production on Wed Jul 3 02:11:57 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Last Successful login time: Wed Jul 03 2013 02:11:07 +09:00
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_id
CON_ID
------------------------------
1

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT    ★CDB(コンテナ・データベース)にログイン中。

SQL> set pagesize 20
SQL> col file_name for a60
SQL> select file_name from dba_data_files order by 1;
FILE_NAME
------------------------------------------------------------
/u01/app/oracle/oradata/orcl/sysaux01.dbf   ★CDBのデータファイル(DBF)だけ見える
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf

SQL> select con_id,file_name from cdb_data_files order by 1,2;
    CON_ID FILE_NAME
---------- ------------------------------------------------------------
         1 /u01/app/oracle/oradata/orcl/sysaux01.dbf   ★CDBのDBF
         1 /u01/app/oracle/oradata/orcl/system01.dbf
         1 /u01/app/oracle/oradata/orcl/undotbs01.dbf
         1 /u01/app/oracle/oradata/orcl/users01.dbf
         2 /u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf   ★SEEDDBのDBF
         2 /u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
         3 /u01/app/oracle/oradata/orcl/pdborcl/pdborcl_users01.dbf   ★PDB1のDBF
         3 /u01/app/oracle/oradata/orcl/pdborcl/sysaux01.dbf
         3 /u01/app/oracle/oradata/orcl/pdborcl/system01.dbf

         4 /u01/app/oracle/oradata/orcl/pdb2orcl/pdb2orcl_users01.dbf  ★PDB2のDBF
         4 /u01/app/oracle/oradata/orcl/pdb2orcl/sysaux01.dbf
         4 /u01/app/oracle/oradata/orcl/pdb2orcl/system01.dbf

12 rows selected.

SQL> select TABLESPACE_NAME from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS


1つめのPDB「pdborcl」にログインしてみます。
PDBからは dba_data_files を見てみると、
CDBと同じように、ログイン中であるPDBのデータファイルしか見えません。
そして、cdb_data_files を参照しても、PDBのデータファイルしか見えませんでした。
(データファイルのパスに、「pdborcl」が含まれていることからわかります。)
[oracle@rac12c1 ~]$ sqlplus system/password@localhost/pdborcl
SQL*Plus: Release 12.1.0.1.0 Production on Wed Jul 3 02:16:08 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Last Successful login time: Tue Jul 02 2013 07:51:18 +09:00
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_id
CON_ID
------------------------------
3

SQL> show con_name
CON_NAME
------------------------------
PDBORCL   ★PDBにログイン中。

SQL> col file_name for a60
SQL> select file_name from dba_data_files order by 1;
FILE_NAME
------------------------------------------------------------
/u01/app/oracle/oradata/orcl/pdborcl/pdborcl_users01.dbf
/u01/app/oracle/oradata/orcl/pdborcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/pdborcl/system01.dbf

SQL> select con_id,file_name from cdb_data_files order by 1,2;
    CON_ID FILE_NAME
---------- ------------------------------------------------------------
         3 /u01/app/oracle/oradata/orcl/pdborcl/pdborcl_users01.dbf
         3 /u01/app/oracle/oradata/orcl/pdborcl/sysaux01.dbf
         3 /u01/app/oracle/oradata/orcl/pdborcl/system01.dbf

SQL> select TABLESPACE_NAME from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
TEMP
USERS

2つめのPDB「pdb2orcl」にログインしてみます。
こちらも、1つめPDBと同様、dba_data_files と cdb_data_files の
どちらを参照しても、ログイン中のPDBのデータファイルしか見えませんでした。
(データファイルのパスに、「pdb2orcl」が含まれていることからわかります。)
[oracle@rac12c1 ~]$ sqlplus system/password@localhost/pdb2orcl
SQL*Plus: Release 12.1.0.1.0 Production on Wed Jul 3 02:18:47 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Last Successful login time: Tue Jul 02 2013 07:56:42 +09:00
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_id
CON_ID
------------------------------
4

SQL> show con_name
CON_NAME
------------------------------
PDB2ORCL  ★2つめのPDBにログイン中。

SQL> col file_name for a60
SQL> select file_name from dba_data_files order by 1;
FILE_NAME
------------------------------------------------------------
/u01/app/oracle/oradata/orcl/pdb2orcl/pdb2orcl_users01.dbf
/u01/app/oracle/oradata/orcl/pdb2orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/pdb2orcl/system01.dbf

SQL> select con_id,file_name from cdb_data_files order by 1,2;
    CON_ID FILE_NAME
---------- ------------------------------------------------------------
         4 /u01/app/oracle/oradata/orcl/pdb2orcl/pdb2orcl_users01.dbf
         4 /u01/app/oracle/oradata/orcl/pdb2orcl/sysaux01.dbf
         4 /u01/app/oracle/oradata/orcl/pdb2orcl/system01.dbf

CDBでも、それぞれのPDBでも、
ユーザ用の領域(USERSのような)だけでなく
システム用の領域(SYSTEM や SYSAUX)を持っているように見えます。
それぞれ、データファイルも別に用意されていました。

以上、PDBのデータファイル構成についてでした。