初めに
OCI上のOracle Base Database(旧称:DBCS)に接続する際、サービス名の入力が求められることがあります。サービス名の取得方法はいくつかありますので、以下にご紹介します。
検証済環境
- DB バージョン:Oracle DB 19c Standard Edition (シングル・ノード、PDB 1個)
- DB タイプ:VM
1. OCIコンソールから取得
1-1. CDBの接続文字列
DB Systemsの詳細画面から、DB名をクリックし、DBの詳細画面に入ります。
"DB Connection"(DB接続)をクリックします。
下記の画面には、"Easy Connect"(簡易接続)と"Long"(長)の2つの接続文字列が表示されます。どちらの方法でもサービス名を取得することができます。
"SHOW"(表示)をクリックすると、サービス名が表示されます。
"簡易接続"の場合、ポート番号1521の後ろの部分がサービス名になります。
"長"の場合、"SERVICE_NAME"で明確に示されています。
サービス名の構成: (Service name)
<一意のデータベース名>.<ホスト・ドメイン名>
- ホスト・ドメイン名: (Host domain name)
<Subnet_DNS_label>.<VCN_DNS_label>.oraclevcn.com - 一意のデータベース名: (Database unique name)<DB名>_<リージョン識別子><自動に生成された文字(3桁)>
DB名:DBシステムを作成する際に指定した名前です。
リージョン識別子:OCIリージョンを一意に識別する文字列です。東京リージョンの場合は、nrt となります(一覧表については、こちらをご参照ください)。
新バージョンのBase DBの一意のデータベース名、次の構成に変更された。
<DB名>_<自動に生成された文字(3桁)>_<リージョン識別子>
1-2. PDBの接続文字列
上記のサービス名は、CDB接続用です。PDBに接続したい場合、以下の2つ方法でPDBのサービス名が取得できます。
1. <一意のデータベース名>の文字列にDB名をPDB名に置き換えれば、PDBのサービス名が取得できます。
2. PDB接続画面に入り、"Easy Connect"(簡易接続)と"Long"(長)の文字列を確認してください。
Database Details → Pluggable Database Details → PDB Connection
※、一意のデータベース名とホスト・ドメイン名は、それぞれ"DB Systems"の詳細画面にも表示されていますが、一括でDB接続文字列を表示する画面から取得する方が迅速です。
2. OCI CLIで取得
上記のOCIコンソールから取得できる接続文字列は、OCI CLIでも取得できます。次は、Cloud Shellからの実施例です(Cloud Shellの概要について、こちらをご参照ください)。
2-1. CDBの接続文字列
※、事前にデータベースのOCIDを用意してください。
接続文字列(簡易接続)を取得
コマンド例:oci db database get --database-id [Database_OCID] --query 'data."connection-strings"."all-connection-strings".cdbDefault'
実行結果:
<username>@cloudshell:~ (ap-tokyo-1)$ oci db database get --database-id ocid1.database.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."all-connection-strings".cdbDefault'
"db19c.publicsubnet1.vcn1.oraclevcn.com:1521/db19c_nrt1rq.publicsubnet1.vcn1.oraclevcn.com"※、ポート番号1521の後ろの部分がサービス名になります。
接続文字列(長)を取得
コマンド例:oci db database get --database-id [Database_OCID] --query 'data."connection-strings"."all-connection-strings".cdbIpDefault'
実行結果:
<username>@cloudshell:~ (ap-tokyo-1)$ oci db database get --database-id ocid1.database.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."all-connection-strings".cdbIpDefault'
"(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.38)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=db19c_nrt1rq.publicsubnet1.vcn1.oraclevcn.com)))"※、"SERVICE_NAME"で明確に示されています。
2-2. PDBの接続文字列
※、事前にPDBのOCIDを用意してください。
接続文字列(簡易接続)を取得
コマンド例:oci db pluggable-database get --pluggable-database-id [Pluggable_Database_OCID] --query 'data."connection-strings"."pdb-default"'
実行結果:
<username>@cloudshell:~ (ap-tokyo-1)$ oci db pluggable-database get --pluggable-database-id ocid1.pluggabledatabase.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."pdb-default"'
"db19c.publicsubnet1.vcn1.oraclevcn.com:1521/db19c_pdb1.publicsubnet1.vcn1.oraclevcn.com"接続文字列(長)を取得
コマンド例:oci db pluggable-database get --pluggable-database-id [Pluggable_Database_OCID] --query 'data."connection-strings"."pdb-ip-default"'
実行結果:
<username>@cloudshell:~ (ap-tokyo-1)$ oci db pluggable-database get --pluggable-database-id ocid1.pluggabledatabase.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."pdb-ip-default"'
"(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.38)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=db19c_pdb1.publicsubnet1.vcn1.oraclevcn.com)))"※、OCI-CLIのインストール方法と他のコマンド例については、次の記事をご参照ください。
OCI CLIの実務で使えるコマンド例
3. Base DBインスタンスにログインしてから取得
DBインスタンスのOSにログインすれば簡単にDBサービス名を取得できます。これから、各種取得方法を紹介します。
3-1 ファイル"tnsnames.ora"
デフォルトのopcユーザーからoracleユーザーに切り替え、以下のコマンドを実行します。
コマンド例: cat $ORACLE_HOME/network/admin/tnsnames.ora
ファイルの中身は以下のようです。"SERVICE_NAME"の行を確認してください。
DB19C_NRT1RQ =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db19c)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db19c_nrt1rq.publicsubnet1.vcn1.oraclevcn.com)
)
)3-2 コマンド"lsnrctl status"
デフォルトのopcユーザーからoracleユーザーに切り替え、リスナーが起動中の状態で、コマンド "lsnrctl status" を実行します。
次は出力結果の一部です。
Service "db19c_nrt1rq.publicsubnet1.vcn1.oraclevcn.com" has 1 instance(s).
Instance "db19c", status READY, has 2 handler(s) for this service...
Service "db19c_pdb1.publicsubnet1.vcn1.oraclevcn.com" has 1 instance(s).
Instance "db19c", status READY, has 2 handler(s) for this service...
The command completed successfully※、この方法の利点は、CDBとPDBの両方のサービス名を一括に取得できることです。個人的におすすめします。
3-3 SQLコマンド"show parameter"
DB管理者ユーザでSQL PLUSにログインし、以下のコマンドを実施してください。
コマンド例:show parameter service
SQL> show parameter service;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string db19c_nrt1rq.publicsubnet1.vcn
1.oraclevcn.com
SQL>4. 各方法の比較
| 方法 | 簡易接続の取得 | 長の取得 | DBインスタンス起動要否 |
|---|---|---|---|
| OCIコンソール | ✅ | ✅ | 不要 |
| OCI CLI | ✅ | ✅ | 不要 |
| tnsnames.ora | ✅ | ✅ | 必要 |
| lsnrctl status | ✅ | ✖️ | 必要 |
| show parameter | ✅ | ✖️ | 必要 |
適切な方法を選んでください。
以上