【Oracle】Create Pluggable Database文のメモ

create pluggable database文のメモ




1.PDB$SEEDからつくる

多分まっさらなCDBだとここが出発点になるのだと思われます(どうでもいいけど「ここが出発点」てバンプのロストマンですね)
まずPDB$SEEDのdatafileの場所を調べます。
CDBにつなぎます。

sqlplus   / as sysdba

ログインしたDB(現在セッションの接続先)がCDB$ROOTであることを確認しておきます。以下コマンドで「CDB$ROOT」が見えたらOKです。
show con_name;

NAME_COL_PLUS_PDB_CONTAINER
------------------------------------------------------------------------------------------------------------------------
CDB$ROOT

PDB$SEEDにつなぎ変えます。
alter session set container=PDB$SEED;

Session altered.

show con_name;

NAME_COL_PLUS_PDB_CONTAINER
------------------------------------------------------------------------------------------------------------------------
PDB$SEED

PDB$SEEDのdatafileの場所(パス)を取得します。
select tablespace_name,file_name from dba_data_files;

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSTEM
/u01/app/oracle/oradata/cdb/pdbseed/system01.dbf

SYSAUX
/u01/app/oracle/oradata/cdb/pdbseed/sysaux01.dbf

UNDOTBS1
/u01/app/oracle/oradata/cdb/pdbseed/undotbs01.dbf

配置されてるデータファイルのルートが知りたいだけで、ここでは「/u01/app/oracle/oradata/cdb/pdbseed/」となります。
これをもとにPluggable Database「PDB1」を作ることにします。
create pluggable database PDB1 admin user oracle identified by "oracle" file_name_convert = ('/u01/app/oracle/oradata/cdb/pdbseed/','/u01/app/oracle/oradata/cdb/pdb1/');

Pluggable database created.

file_name_convert句により、元にしたPDB$SEEDのデータファイルのパスである「/u01/app/oracle/oradata/cdb/pdbseed/」を「/u01/app/oracle/oradata/cdb/pdb1/」に置換して作成しています。
今回はデータファイルのパスを同一階層の隣にするよう指定しましたが、全然違う場所を指定してももちろん問題ありません。
管理上・運用上で適切な場所を指定すべきですね。

これでとりあえずPluggable Databaseは作成できたのですが、作成した直後はPDBの状態がMOUNTになっています。
select name , open_mode from v$containers where name = 'PDB1';

NAME
--------------------------------------------------------------------------------
OPEN_MODE
----------
PDB1
MOUNTED

ので、OPENします。
alter pluggable database PDB1 open;

Pluggable database altered.

もう一回さっきのSQLで見てみるとOPEN_MODEが「READ WRITE」になっているのが確認できます。
select name , open_mode from v$containers where name = 'PDB1';

NAME
--------------------------------------------------------------------------------
OPEN_MODE
----------
PDB1
READ WRITE

とりあえず繋ぎ変えてみます。
alter session set container=PDB1

以下SQLでも打って、作成時に指定したadmin userである「oracle」がいるのを確認してみましょう。
select username from dba_users where username='ORACLE';

USERNAME
--------------------------------------------------------------------------------
ORACLE

とりあえず一回sqlplusから出ます(exit)。

この後、作ったPDB1にsqlplusで直接接続、といきたいところですが、その前にtnsnames.oraにPDB1の情報を追記しておきます。
PDB1 =
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PDB1)
    )
  )

で、sqlplusで接続。
 sqlplus oracle/oracle@PDB1

で、接続できるのが確認できました。




2.既存のPDBからつくる

既にあるPDBからPDBを作ります。
ちょっとだけコマンドがスマートになります。

CDBに接続して以下SQLを実行します。
create pluggable database PDB2 from PDB1 file_name_convert=('/u01/app/oracle/oradata/ORCLCDB/pdb1/','/u01/app/oracle/oradata/ORCLCDB/pdb2/');

Pluggable database created.

このSQLでは、既存のPluggable Database PDB1(1.でつくったやつ)をもとに、PDB2を作成しました。

この後、使用する場合は↑で実施したのと同様、OPEN_MODEを変更します。
alter pluggable database PDB2 open;

Pluggable database altered.



この記事へのコメント