
こんにちはユキトモです。
今回は、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が簡単に作成できる仕様になっています。
いかがでしたでしょうか?
実施してみると以外とマルチテナントって簡単ですよね!
以上です。