本ブログは、オラクル・クラウドの個人ブログの1つです。
初めに
クライアントから、OCI上のOracle Base DB(旧称: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"となります(一覧表については、こちらをご参照ください)。
追記:2024
新バージョンのBase DBの一意のデータベース名、次の構成に変更された。
<DB名>_<自動に生成された文字(3桁)>_<リージョン識別子>
1-2. PDBの接続文字列
上記のサービス名は、CDB接続用です。PDBに接続したい場合、以下の2つ方法でPDBのサービス名が取得できます。
- <一意のデータベース名>の文字列にDB名をPDB名に置き換えれば、PDBのサービス名が取得できます。
-
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の接続文字列
接続文字列(簡易接続)を取得する
コマンド例: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の接続文字列
接続文字列(簡易接続)を取得する
コマンド例: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>
以上です。
関連記事
オラクル・クラウドの個人ブログ一覧
SQL Developerで様々なDBに接続する方法
OCI Bastion経由でプライベート・サブネット内のOracle DBに接続する