[Oracle] リスナー経由での接続方法

Oracle

Oracle Databaseに接続する方法には、大きく2種類の方法があります。

  • BEQ接続(ローカル接続)
  • NET接続(リスナー経由での接続)

本ページはこの2種類の方法について解説します。

BEQ接続(ローカル接続)

BEQ接続(ローカル接続)は、リスナーを経由せずにOracle Databaseに接続する方法です。
接続先がCDBかPDBかによって、環境変数設定が若干変わりますので、それぞれについて解説します。

CDB接続

環境変数ORACLE_HOME、および、ORACLE_SIDを指定してOracle Databaseに接続可能です。

$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome1
$ export ORACLE_SID=orcl
$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 月 12月 9 21:13:05 2024
Version 19.14.0.0.0

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



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
に接続されました。
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL>

もちろんパスワードを指定した接続も可能です。

$ sqlplus sys/welcome1 as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 月 12月 9 21:14:41 2024
Version 19.14.0.0.0

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



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
に接続されました。
SQL>
$ sqlplus scott/tiger

SQL*Plus: Release 19.0.0.0.0 - Production on 月 12月 9 21:14:41 2024
Version 19.14.0.0.0

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



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
に接続されました。
SQL>

PDB接続

マルチテナント構成の場合に、PDBに直接接続するには以下のように実行します。
環境変数ORACLE_PDB_SIDを追加で指定することで、対象のPDBに接続することができます。

$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome1
$ export ORACLE_SID=orcl
$ export ORACLE_PDB_SID=pdb1
$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 月 12月 9 21:17:10 2024
Version 19.14.0.0.0

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



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
に接続されました。
SQL> show con_name

CON_NAME
------------------------------
PDB1
SQL>
りお
りお

ORACLE_PDB_SIDに間違ったPDB名を指定すると、
CDB$ROOTに接続されますので注意しましょう。
パスワードを指定しないOS認証の場合、意図せずにCDB$ROOTに接続されてしまうことがあります。

NET接続(リスナー経由での接続)

通常のアプリケーションからの接続にはNET接続を利用します。
NET接続の場合は事前に以下を確認しておきます。

  • リスナーが起動していること
  • リスナーにOracle Databaseのサービスが登録されていること

リスナー確認

リスナーが起動しているかはlsnrctl statusコマンドで確認することができます。
デフォルトでは1521ポートで起動しています。
以下のようなメッセージが出力されていれば起動できています。

$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 09-12月-2024 21:27:21

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日                    02-11月-2024 18:35:30
稼働時間                  37 日 2 時間 51 分 54 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
  :

リスナーが起動している場合は、tnslsnrプロセスが存在しています。

$ ps -ef | grep tnslsnr
oracle    75384      1  0 11月02 ?      00:00:40 /u01/app/oracle/product/19.0.0.0/dbhome1/bin/tnslsnr LISTENER -inherit

サービス確認

リスナーにOracle Databaseのサービスが登録されていることを確認します。
リスナーが起動しても、サービスが登録されていない場合は接続することができません。
こちらはlsnrctl servicesコマンドで、現在登録されているサービスの一覧を確認することができます。

サービスはCDBとPDBで分かれて登録されますので、
ここではCDBのサービス「orcl」と、PDBのサービス「pdb1」が、それぞれ登録されているものとします。

$ lsnrctl services

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 09-12月-2024 21:31:36

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
サービスのサマリー...
  :
サービス"pdb1"には、1件のインスタンスがあります。
  インスタンス"orcl"、状態READYには、このサービスに対する1件のハンドラがあります...
    ハンドラ:
      "DEDICATED" 確立:0 拒否:0 状態:ready
         LOCAL SERVER
サービス"orcl"には、1件のインスタンスがあります。
  インスタンス"orcl"、状態READYには、このサービスに対する1件のハンドラがあります...
    ハンドラ:
      "DEDICATED" 確立:0 拒否:0 状態:ready
         LOCAL SERVER
  :

CDB接続

CDBのサービス「orcl」を指定して、Oracle Databaseに接続します。
サービスを指定した接続には、2種類の方法があります。

  • tnsnames.oraの接続識別子を利用する方法
  • 簡易接続ネーミング・メソッドを利用する方法

tnsnames.oraの接続識別子を利用する方法

接続するための情報を記載しておいて、接続識別子を使用して接続します。
以下の場合は「CON_ORCL」が接続識別子となり、
ホスト名:host01、ポート番号:1521、サービス名:orclに接続するための情報が書かれています。

CON_ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = host01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

以下のように指定して接続します。

$ sqlplus scott/tiger@CON_ORCL

SQL*Plus: Release 19.0.0.0.0 - Production on 月 12月 9 21:14:41 2024
Version 19.14.0.0.0

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



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
に接続されました。
SQL>

簡易接続ネーミング・メソッドを利用する方法

簡易接続ネーミング・メソッドは、tnsnames.oraを使用せずに、直接的に指定する方法です。

$ sqlplus scott/tiger@host01:1521/orcl

SQL*Plus: Release 19.0.0.0.0 - Production on 月 12月 9 21:14:41 2024
Version 19.14.0.0.0

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



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
に接続されました。
SQL>

PDB接続

PDBへの接続についても同様に以下の2種類を利用可能です。

  • tnsnames.oraの接続識別子を利用する方法
  • 簡易接続ネーミング・メソッドを利用する方法

サービスに指定する部分を「orcl」から「pdb1」に変更するだけで、直接PDBに接続することができます。

まとめ

本ページでは、BEQ接続(ローカル接続)とNET接続(リスナー経由での接続)を解説しました。
NET接続の場合は、リスナーが起動しているか、サービスが登録されているかなど、
いくつか確認しないといけないポイントもありますのでご注意ください。

プログラミングスクールをまとめました。ぜひ参考にしてみてください。

コメント

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