rm /blog

IT系技術職のおっさんがIT技術とかライブとか日常とか雑多に語るブログです。* 本ブログに書かれている内容は個人の意見・感想であり、特定の組織に属するものではありません。/All opinions are my own.*

【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.