Oracle19c

【Oracle19c】PDBをシードから作成・削除する

2021年5月22日


 

シードを使用してPDBの作成と削除方法を教えて下さい。

 
こんにちはユキトモです。

 
今回は、PDBを最も手軽に作成できるシードを使用した新規作成方法を解説していきます。
 

作成する場合

 
create pluggable database <新PDB名>
admin user <アドミンユーザ名> identified by <パスワード>
file_name_convert =
('<シードのパス>'
,'<新PDBのデータファイル保存先のパス>');

 

 

削除する場合

 
drop pluggable database <対象PDB名> including datafiles;
 


 

PDBの作成

今回作成するPDB名は「ORCLPDB2」にして説明していきます。

DBCAで作成可能ですが、今回はコマンドで作成していきます。

 

準備

 準備
# su - oracle
 
# Oracleへログイン
$ sqlplus / as sysdba
 
--PDBの情報確認
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
 
SQL> --データファイルの位置を確認のため、シードへセッションを切り替え
SQL> alter session set container=PDB$SEED;
 
セッションが変更されました。
 
SQL> --確認
SQL> select file_name from dba_data_files;
 
FILE_NAME
--------------------------------------------------------------------------------
/opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf
/opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf

 

フォルダ作成

データファイルを格納するフォルダを作成します。
ちなみに自分の環境では事前にフォルダを未作成のままでもPDBは作成できました。

 
念のため事前に作成したい方のみ実施して下さい。
今回は事前に作成しておきます。

 フォルダ作成
 
SQL> --CDBに接続し直す
SQL> conn / as sysdba
接続されました。
 
SQL> --シードと別フォルダにPDBのデータファイルを配置するので事前にフォルダを作成
SQL> !mkdir /opt/oracle/oradata/ORCLCDB/ORCLPDB2
SQL> --確認
 
SQL> !ls -l /opt/oracle/oradata/ORCLCDB/ORCLPDB2
合計 0
 

フォルダが作成されました。
次はいよいよPDBを作成します。

 

PDB作成

PDBを作成して行きます。
今回はadmin userは「pdb2user1」パスワードは「pdb2user1」にします。

 作成
 
SQL> create pluggable database ORCLPDB2 admin user PDB2USER1 identified by pdb2user1
file_name_convert =
('/opt/oracle/oradata/ORCLCDB/pdbseed/'
,'/opt/oracle/oradata/ORCLCDB/ORCLPDB2/');
 
SQL> --確認
SQL> show pdbs
 
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
         4 ORCLPDB2                       MOUNTED
 
SQL> --作成直後はMOUNT状態ですのでオープンします。
SQL> alter pluggable database ORCLPDB2 open;
 
プラガブル・データベースが変更されました。
 
SQL> --確認
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
         4 ORCLPDB2                       READ WRITE NO
 
SQL> --セッション切替
SQL> alter session set container=ORCLPDB2;
 
セッションが変更されました。
 
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         4 ORCLPDB2                       READ WRITE NO
 
SQL> --PDB作成時に指定した「PDB2USER1」を確認します。
SQL> select username from dba_users where username='PDB2USER1';
 
USERNAME
--------------------------------------------------------------------------------
PDB2USER1
 
SQL> --ユーザも作成されていることが確認取れました。
 
SQL> --ログアウトします。
SQL> exit

 

直接ORCLPDB2へ接続する

 

sqlplus pdb2user1/pdb2user1@orclpdb2


のように直接ログインしたい場合はリスナー経由で接続が必須です。

リスナーが停止している場合は起動します。
 

 リスナー起動
# リスナーの確認
$ lsnrctl status
 
# 停止状態なら起動する
$ lsnrctl start

 
次はtnsnames.oraに下記の内容を記載します。

 接続設定
 
vi /opt/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora
# 下記の内容を追記(localhostと記載するまたは環境に合わせてIPアドレスを変更して下さい。)
ORCLPDB2 =
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.132)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLPDB2)
    )
  )
 
# 接続確認
sqlplus pdb2user1/pdb2user1@orclpdb2
 
--確認
show user
 
--ログアウト
exit

 

削除手順

作成したPDBを削除する手順を解説していきます。

対象のPDBは削除する前にクローズしないとエラーになります。

事前にクローズしてから削除します。

 削除
 
# sysユーザでログイン
sqlplus / as sysdba
 
--PDB情報の表示
show pdbs
 
--削除前に対象PDBをクローズ
alter pluggable database ORCLPDB2 close immediate;
 
--PDB情報の表示
show pdbs
 
--今回は削除 データファイルも一緒に削除します。
drop pluggable database orclpdb2 including datafiles;
 
--PDB情報の表示
show pdbs
 
--データファイルの削除状態確認
!ls -l /opt/oracle/oradata/ORCLCDB/ORCLPDB2
 
--フォルダ削除
!rm -r /opt/oracle/oradata/ORCLCDB/ORCLPDB2
 
--データファイルフォルダ確認
!ls -l /opt/oracle/oradata/ORCLCDB/ORCLPDB2
 
--ログアウト
exit

 
tnsnames.oraに接続情報を記載している場合は必要に応じて削除して下さい。

 設定ファイルの更新
 
vi /opt/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora
# 今回は下記の内容を削除して保存する
ORCLPDB2 =
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.132)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCLPDB2)
    )
  )

 
シードにはPDBを新規に作成するにあたり使用する情報がすべてテンプレートとして格納されています。

シードの情報を元に新規PDBが簡単に作成できる仕様になっています。

いかがでしたでしょうか?

実施してみると以外とマルチテナントって簡単ですよね!

以上です。

-Oracle19c
-, , , ,