2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Base DBのサービス名を取得する

Last updated at Posted at 2021-07-28

本ブログは、オラクル・クラウドの個人ブログの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の詳細画面に入ります。
image.png

"DB Connection"(DB接続)をクリックします。
image.png

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

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

サービス名の構成: (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のサービス名が取得できます。

  1. <一意のデータベース名>の文字列にDB名をPDB名に置き換えれば、PDBのサービス名が取得できます。
  2. PDB接続画面に入り、"Easy Connect"(簡易接続)と"Long"(長)の文字列を確認してください。
    Database Details -> Pluggable Database Details -> PDB Connection
    image.png

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

2. OCI-CLIで取得する

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

2-1. CDBの接続文字列

※、事前にデータベースのOCIDを用意してください。
image.png

接続文字列(簡易接続)を取得する
コマンド例: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を用意してください。
image.png

接続文字列(簡易接続)を取得する
コマンド例: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に接続する

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?