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.