[Oracle19c]プラガブル・データベースを・・・

サーバ起動後は

まずは、リスナーを起動

$ lsnrctl start
・・・
STATUS of the LISTENER
------------------------
・・・
Listener Parameter File   /usr/oracle/database/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/******/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=******)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

次にCDBを起動

$ sqplus /NOLOG
SQL> startup;
*******

プラガブル・データベースの状態をチェック

SQL> show pdbs;
    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 ******  			  READ WRITE NO

とりあえず接続先をチェック。※多分 CDB$ROOTのハズ

SQL> show CON_NAME;

プラガブル・データベースを起動してみよう

SQL> alter pluggable database ****** open;
Pluggable database altered.

SQL> show pdbs;
    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 ******  			  READ WRITE NO

CDB作成時に作られたPDBは管理者名が不明で表領域もあるのかどうかも判らなかったので、

dbcaコマンドで別途にPDB(PDB1,PDB2)を追加してみた。

PDBの管理者名はpdbadminとか何となく判るものを作っておく。

表領域の作成にチェックを入れれば作ってくれるので便利。※手順は省略。

ここで、lsnrctl status を何度か叩くと、最後に各PDB名っぽいSERVICE_NAMEの情報が拾えるので

※今回はCDBのサービス名のドメイン名のマシン名の部分がPDB名に差し替えられていた。

そこからサーバのtnsnames.oraにPDB用の設定を手で追加。

※サーバで使わないハズだけど、サーバに元ネタとして置いておかないと新しいクライアントを作る時に悩むハズ。

PDB1 =
  (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = ******)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = pdb1.******)
     )
  )

PDB2 =
  (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = ******)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = pdb2.******)
     )
  )

本命のクライアントのtnsnames.oraを追記

PDB1 =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP) (HOST = ******)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = pdb1.******)
   )
)

PDB2 =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP) (HOST = ******)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = pdb2.******)
   )
)

どっちもほぼ同じで、HOSTのみ、各環境で判るドメイン名とかIPアドレスとかにしておかないといけない。※IPアドレスにすれば同一になるはず。

dbcaコマンドでは各PDBの管理者にDBA権限が付与されていないので、

$ sqlplus / as sysdba
SQL> alter session set container=${各PDB名}; ※だったかな?
SQL> GRANT DBA TO ${各PDBの管理者名};

で、それぞれのPDBの管理者にDBA権限を付加した後に

それぞれのPDBの管理者でPDBに入り

$ sqlplus ${管理者名}/${パスワード}@${PDB名}
SQL> CREATE TABLE TBL1 か TBL2
 (
 empno VARCHAR2(10) NOT NULL,
 empname VARCHAR2(50),
 gender_f NUMBER(1,0)
 ) 
;  2    3    4    5    6    7  
Table created.

な感じで、PDB1にTBL1、PDB2にTBL2を作成し、

A5から、

CDB:(接続文字列:orcl、 ユーザ:system)、

PDB1:(接続文字列:pdb1、ユーザ: pdbadmin)

PDB2:(接続文字列:pdb1、ユーザ: pdbadmin)

でORACLE(OCL経由)接続を作った。

※ORACLE直接接続は

各赤枠はクライアントのtnsnames.oraの通り

それぞれで、

select * from TBL1;
select * from TBL2;

してみたら、

CDBは共に無し

PDB1はTBL1のみ

PDB2はTBL2のみ

と予想通りの結果になった。

改めて、sqlplusでpdb1に接続してみよう

SQL> alter session set container=PDB1;
SQL> show pdbs;

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 4 PDB1 			  READ WRITE NO
※もう自分しかみえなくなっている
※CDBに戻ってPDBをこの状態で、自動起動にする
SQL> alter session set container=CDB$ROOT;
SQL> alter pluggable database all save state;

プラガブル・データベースを終了してみよう

SQL> alter pluggable database ****** close;
Pluggable database altered.

SQL> show pdbs;
    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 ****** 			  MOUNTED

CDBも終了、SQLPLUSも終了する

SQL> shutdown;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> quit

これで、startupすれば、今まで通りに使えるはず。

※多分

と、ここまで書いたものの・・・

ネットをググると、多種多様な結果がヒットするので、

  • ひたすらSQLPLUSでコマンドを打ち続ける人
  • ツールを使いつつSQLPLUSでコマンドを打ち続ける人
  • ツールのみの人

それぞれで、

各々データベースの構成も違うし、

設定ファイルの更新の有無も変わるし、

手順やコマンドも変わるし、

ここの内容は極一部の人にしか参考にならない様な気がしてきた。

うーむ、恐るべしは・・・・・・。




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA