ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

OCI Database(DBaaS) の PDB に sqlplus で接続してみる。(Oracle Cloud Infrastructure)

表題の通り、OCI(Oracle Cloud Infrastructure) Database(DBaaS) の PDB
sqlplus で接続してみます。下記の構成で試すやで彡(゚)(゚)

Compute(Oracle Client, sqlplus) ⇒ (Private Subnet) ⇒ DBaaS(PDB)

1. PDB, MTA(Multitenant Architecuture) とは?

PDB, MTA(multitenant architecture) は Oracle Database 12cR1以降の機能で、
一つの管理用DB(CDB)上に複数のコンテナ・データベース(PDB)を作成できる機能なんやで彡(゚)(゚)

詳細やメリットはマニュアルや公開資料を参照してね。

Oracle Database 12c マルチテナント・アーキテクチャとプラガブル・データベース
https://www.oracle.com/technetwork/jp/ondemand/branch/dosanko-3rd-mta-2844750-ja.pdf

Oracle Databaseデータベース概要, 18c
マルチテナント・アーキテクチャ
https://docs.oracle.com/cd/E96517_01/cncpt/introduction-to-oracle-database.html#GUID-ED16D715-761B-4F8B-8503-BC058E216D2F

2. OCI Database(DBaaS)の作成

ここはマニュアルや他の方のブログを見ませう彡(゚)(゚)

クラウドOracle Databaseを使う - Oracle Cloud Infrastructureを使ってみよう(その7)
https://community.oracle.com/docs/DOC-1019568

データベース・デプロイメントの作成
https://docs.oracle.com/cd/E83857_01/paas/database-dbaas-cloud/csdbi/create-db-deployment-overview.html

3. DBaaSのIPアドレス/管理サービス(CDB)名の参照とポート開放

ここは下記ブログを参照やで彡(゚)(゚)

[Oracle Cloud] SQL DeveloperでDBaaSに接続してみた
http://itedge.stars.ne.jp/oracle-cloud-dbaas_sql-developer/

OCIコンソールの下記から簡易接続(ホスト名:ポート番号/サービス名)の接続文字列として確認可能です。

f:id:gonsuke777:20190219210718j:plain
OCIコンソール

下記のホスト名/ポート番号/管理サービスに接続するものとします。
※これらのホスト名/管理サービス(CDB)名は架空のものです。

ホスト名(Private) :dbname.subnetname.vcnname.oraclevcn.com
ポート番号     :1521
管理サービス(CDB)名:dbname_cdb32r.subnetname.vcnname.oraclevcn.com
管理サービス(CDB)への接続文字列(簡易接続):dbname.subnetname.vcnname.oraclevcn.com:1521/dbname_cdb32r.subnetname.vcnname.oraclevcn.com

4. 管理サービス(CDB)への接続確認とPDB名(PDBサービス名)確認

Compute への Oracle Client のインストールは下記記事を参照彡(゚)(゚)

Oracle Cloud(OCI)のIaaSからDbaaSへSQLPlusで接続してみた
https://qiita.com/feifo/items/d21b7050d0d4799f5d47

Compute にインストールした Oracle Client の sqlplus から管理サービス(CDB)にSYSで接続してみます。
なおこの後は特に断りが無い限り、接続文字列は簡易接続(ホスト名:ポート番号/サービス名)です。

8.1 簡易接続ネーミング・メソッドの理解
https://docs.oracle.com/cd/E96517_01/netag/configuring-naming-methods.html#GUID-B0437826-43C1-49EC-A94D-B650B6A4A6EE

export ORACLE_HOME=/home/opc/app/opc/product/18.0.0/client_1
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib
export TNS_ADMIN=${ORACLE_HOME}/network/admin
export PATH=${ORACLE_HOME}/bin:${PATH}

sqlplus /nolog
CONNECT SYS/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/dbname_cdb32r.subnetname.vcnname.oraclevcn.com AS SYSDBA
SHOW CON_NAME
SHOW PDBS

結果は以下の通り。CDB(CDB$ROOT)に接続できてるやね彡(゚)(゚)

SQL> CONNECT SYS…
Connected.

SQL> SHOW CON_NAME

CON_NAME
------------------------------
CDB$ROOT

SQL> SHOW PDBS

    CON_ID CON_NAME   OPEN MODE  RESTRICTED
---------- ---------- ---------- ----------
         2 PDB$SEED   READ ONLY  NO
         3 AYSPDB2    READ WRITE NO ★これに接続する。
SQL>

上記のPDB名と管理サービス(CDB)名より、PDBサービス名は下記の通りとなります。

■管理サービス(CDB)名
dbname_cdb32r.subnetname.vcnname.oraclevcn.com
^^^^^^^^^^^^^

PDBサービス名
ayspdb2.subnetname.vcnname.oraclevcn.com

なお DBaaS の OS にログイン可能な場合は、DBaaS OS の opcユーザーで接続して、
gridユーザーにsu後に lsnrctl statusコマンドを実行すれば、より確実にPDBサービス名を確認できます。

# DBaaS の OS に opcユーザーで接続
sudo su - grid
lsnrctl status

LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 19-FEB-2019 11:20:38

Copyright (c) 1991, 2017, Oracle.  All rights reserved.
:
Services Summary...
:
Service "dbname_cdb32r.subnetname.vcnname.oraclevcn.com" has 1 instance(s).
  Instance "dbname", status READY, has 2 handler(s) for this service...
Service "ayspdb2.subnetname.vcnname.oraclevcn.com" has 1 instance(s). ★このPDBサービスに接続する。
  Instance "dbname", status READY, has 2 handler(s) for this service...
:
The command completed successfully

5. PDBにSYSで接続してユーザー作成&権限付与

上記で確認したPDBサービスにSYSで接続して、PDBに一般ユーザーを作成&権限付与します。

sqlplus /nolog
CONNECT SYS/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com AS SYSDBA
                                                                         ^^^^^^^ここが違う
SHOW CON_NAME
CREATE USER AYSHIBAT IDENTIFIED BY xxxxxxxxxxxxxxx
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
GRANT DBA TO AYSHIBAT;

結果は下記の通りです。

$ sqlplus /nolog

SQL*Plus: Release 18.0.0.0.0 - Production on Tue Feb 19 11:43:26 2019
Version 18.5.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

SQL> CONNECT SYS/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com AS SYSDBA
Connected.
SQL> SHOW CON_NAME

CON_NAME
------------------------------
AYSPDB2
SQL> CREATE USER AYSHIBAT IDENTIFIED BY xxxxxxxxxxxxxxx
  2  DEFAULT TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP;

User created.

SQL> GRANT DBA TO AYSHIBAT;

Grant succeeded.

6. PDBに作成した一般ユーザーで接続

PDBに作成した一般ユーザーで接続してみます。

sqlplus /nolog
CONNECT AYSHIBAT/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com
SHOW CON_NAME

結果は下記の通りです。

sqlplus /nolog

SQL*Plus: Release 18.0.0.0.0 - Production on Tue Feb 19 11:47:58 2019
Version 18.5.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

SQL> CONNECT AYSHIBAT/xxxxxxxxxxxxxxx@dbname.subnetname.vcnname.oraclevcn.com:1521/ayspdb2.subnetname.vcnname.oraclevcn.com
Connected.
SQL> SHOW CON_NAME

CON_NAME
------------------------------
AYSPDB2

DBaaS の PDB に一般ユーザーで接続できたやで!彡(^)(^)

7. まとめ

上記 4. の PDB名(PDBサービス名)確認がひと手間ですやね!彡(゚)(゚)

管理サービス(CDB)名への接続文字列はコンソール画面に表示できてるんやから、
PDBへの接続文字列も同様にコンソール画面に表示して欲しいもんです(゚ε゚`)

なおこの記事は 生Java(JDBC Thin) to DBaaS接続編、
Java(JDBC Thin) to Autonomous(ADW/ATP)接続編に続く予定……彡(゚)(゚)