Oracle Base Database のサービス名を取得する方法

Database

初めに

OCI上のOracle Base Database(旧称:DBCS)に接続する際、サービス名の入力が求められることがあります。サービス名の取得方法はいくつかありますので、以下にご紹介します。

検証済環境

  • DB バージョン:Oracle DB 19c Standard Edition (シングル・ノード、PDB 1個)
  • DB タイプ:VM

1. OCIコンソールから取得

1-1. CDBの接続文字列

DB Systemsの詳細画面から、DB名をクリックし、DBの詳細画面に入ります。
Base DB Details

"DB Connection"(DB接続)をクリックします。
Click DB Connection

下記の画面には、"Easy Connect"(簡易接続)"Long"(長)の2つの接続文字列が表示されます。どちらの方法でもサービス名を取得することができます。
CDB Connection Details

"SHOW"(表示)をクリックすると、サービス名が表示されます。
"簡易接続"の場合、ポート番号1521の後ろの部分がサービス名になります。
"長"の場合、"SERVICE_NAME"で明確に示されています。
CDB Service Name Details

サービス名の構成: (Service name)
<一意のデータベース名>.<ホスト・ドメイン名>

  • ホスト・ドメイン名: (Host domain name)
    <Subnet_DNS_label>.<VCN_DNS_label>.oraclevcn.com
  • 一意のデータベース名: (Database unique name)<DB名>_<リージョン識別子><自動に生成された文字(3桁)>
    DB名:DBシステムを作成する際に指定した名前です。
    リージョン識別子:OCIリージョンを一意に識別する文字列です。東京リージョンの場合は、nrt となります(一覧表については、こちらをご参照ください)。
2024年8月追記:
新バージョンの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
PDB Service Name Details

※、一意のデータベース名とホスト・ドメイン名は、それぞれ"DB Systems"の詳細画面にも表示されていますが、一括でDB接続文字列を表示する画面から取得する方が迅速です。

2. OCI CLIで取得

上記のOCIコンソールから取得できる接続文字列は、OCI CLIでも取得できます。次は、Cloud Shellからの実施例です(Cloud Shellの概要について、こちらをご参照ください)。

2-1. CDBの接続文字列

※、事前にデータベースのOCIDを用意してください。
Get 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を用意してください。
Get 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✖️必要

適切な方法を選んでください。

以上

タイトルとURLをコピーしました