Oracle Database リスナーの静的構成方法を解説

Oracle Master Bronze

はじめに

Oracle Databaseのネットワーク接続を管理するリスナー設定では、一般的に動的構成が使用されていますが、特定の用途に応じて静的構成が必要になる場合があります。本記事では、動的構成と静的構成の違いから静的構成の具体的な設定手順、実務上の利用シーンや運用ポイントに至るまで詳しく解説します。初心者から柔軟な接続管理を目指す経験者まで必見の内容です。


リスナーの役割とは? ~ 動的構成と静的構成の違い

リスナーは、Oracle Databaseでクライアントからの接続を管理する役割を果たします。通常は動的構成を使用しており、これはデータベースが起動すると自動でリスナーにサービスが登録される仕組みです。動的構成の利点は、データベースの再起動や追加の際に構成ファイルを更新する必要がない点です。リスナーとデータベース間で行われる「サービスの自動登録」機能が動的構成のベースとなっています。
デフォルトは動的構成です。

一方で、動的構成ではデータベースが起動するまでサービスが登録されないため、以下のようなケースでは静的構成が必要になります。

  • データベース開始前からリスナーが接続を待機する必要がある:システム起動スクリプトでの自動接続が求められる場合など。
  • リカバリ作業やメンテナンス中の接続管理:サービスの確実な登録が求められる高可用性システムなど。

この静的構成では、リスナーの構成ファイルであるlistener.oraにサービス情報を手動で記載し、リスナーがデータベースの起動に依存せず接続を管理できるようになります。


静的構成の基本手順

リスナーの静的構成には、listener.oraへの手動での設定追加が必要です。以下に手順を詳しく解説します。

1. listener.oraファイルの場所を確認

リスナー構成を行うlistener.oraファイルは、通常次のパスに保存されています。

$ORACLE_HOME/network/admin

2. リスナー設定の確認と記述

まず、リスナーがどのホストとポートで接続待機を行うかを設定します。

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)

HOSTはリスナーが稼働するサーバーのホスト名やIPアドレス、PORTは待ち受けポート番号です。デフォルトは1521ですが、環境に応じて調整可能です。

3. 静的構成の追加 – サービス情報の記述

次に、静的構成に必要なデータベースサービス情報をSID_LISTセクションに追加します。

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = ORCL)
)
)

項目の説明:

  • GLOBAL_DBNAME: データベースのグローバル名です。クライアントが指定するサービス名と一致させます。
  • ORACLE_HOME: Oracle Databaseのインストールパスを指定します。
  • SID_NAME: データベースのSID(この例ではORCL)です。

この設定でデータベースが起動していない場合でもリスナーがサービスを認識し、接続要求に応答します。

4. リスナーの再起動

構成を反映させるため、リスナーを停止して再起動します。

$ lsnrctl stop
$ lsnrctl start

5. 設定の確認

リスナーが正しくサービスを認識しているか確認するため、以下のコマンドを実行します。

$ lsnrctl status

SID_LIST_LISTENERで追加したサービスが登録されていれば、設定は完了です。


動的構成と静的構成を使い分けるシナリオとメリット

活用シナリオ

  • システム再起動時の接続安定性の向上
    サーバーが再起動するたびにデータベース起動前からリスナーが接続を待機し、アプリケーション接続の安定性を維持します。
  • メンテナンス時の接続管理
    データベースのメンテナンスやリカバリ時でもリスナーが常にサービス待機状態を維持し、ダウンタイムを抑えることができます。

静的構成のメリット

  • 高い接続管理の安定性
    リスナーがデータベースの起動状態に依存せず、いつでもクライアント接続を受付けるため、システムの安定性を向上させます。
  • 明示的な接続制御
    動的構成ではデータベースの起動状態に応じた自動登録が行われますが、静的構成では手動で指定するため、構成内容をコントロールしやすくなります。

動的構成の場合

[oracle@v19single ~]$ sqlplus sys/oracle@v19single:1521/v19 as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 金 11月 1 00:05:47 2024
Version 19.21.0.0.0

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



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> select status from v$instance;

STATUS
------------------------------------
OPEN

SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 01-11月-2024 00:07:08

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

(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日 31-10月-2024 23:53:40
稼働時間 0 日 0 時間 14 分 12 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
ログ・ファイル /u01/app/oracle/diag/tnslsnr/v19single/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=v19single)(PORT=1521)))
サービスのサマリー...
サービス"v19"には、1件のインスタンスがあります。
インスタンス"v19"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"v19XDB"には、1件のインスタンスがあります。
インスタンス"v19"、状態READYには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。 ★サービス登録されている
[oracle@v19single ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 金 11月 1 00:13:10 2024
Version 19.21.0.0.0

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



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> shutdown immediate ★インスタンスを停止
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 01-11月-2024 00:14:49

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

(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日 31-10月-2024 23:53:40
稼働時間 0 日 0 時間 21 分 53 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
ログ・ファイル /u01/app/oracle/diag/tnslsnr/v19single/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=v19single)(PORT=1521)))
リスナーはサービスをサポートしていません。
コマンドは正常に終了しました。 ★サービス登録されていない
[oracle@v19single ~]$ sqlplus sys/oracle@v19single:1521/v19 as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 金 11月 1 00:15:15 2024
Version 19.21.0.0.0

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

ERROR:
ORA-12514: TNS:
リスナーは接続記述子でリクエストされたサービスを現在認識していません ★接続できない


ユーザー名を入力してください:

静的構成の場合

[oracle@v19single ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 金 11月 1 00:13:10 2024
Version 19.21.0.0.0

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



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> shutdown immediate ★インスタンスを停止
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ vi $ORACLE_HOME/network/admin/listener.ora
[oracle@v19single ~]$ cat $ORACLE_HOME/network/admin/listener.ora ★静的構成
STENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = v19single)(PORT = 1521))
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = v19)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = v19)
)
)
[oracle@v19single ~]$ lsnrctl stop

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 01-11月-2024 00:22:21

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

(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
コマンドは正常に終了しました。
[oracle@v19single ~]$ lsnrctl start

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 01-11月-2024 00:23:02

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

/u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnrを起動しています。お待ちくだ さい...

TNSLSNR for Linux: Version 19.0.0.0.0 - Production
システム・パラメータ・ファイルは/u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.oraです。
ログ・メッセージを/u01/app/oracle/diag/tnslsnr/v19single/listener/alert/log.xml に書き込みました。
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=v19single)(PORT=1521)))

(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))に接続中
リスナーのステータス
------------------------
別名 LISTENER
バージョン TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日 01-11月-2024 00:23:42
稼働時間 0 日 0 時間 1 分 20 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
ログ・ファイル /u01/app/oracle/diag/tnslsnr/v19single/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=v19single)(PORT=1521)))
サービスのサマリー...
サービス"v19"には、1件のインスタンスがあります。
インスタンス"v19"、状態UNKNOWNには、このサービスに対する1件のハンドラがありま す...
コマンドは正常に終了しました。 ★サービス登録されている
[oracle@v19single ~]$ sqlplus sys/oracle@v19single:1521/v19 as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 金 11月 1 00:25:09 2024
Version 19.21.0.0.0

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

アイドル・インスタンスに接続しました。

SQL> ★インスタンスが停止していてもリスナー経由でOracleNet接続できた

実務でのポイントと注意点

  1. 再起動が必要
    静的構成を変更した場合は、リスナーの再起動が必要です。動的構成とは異なり、構成変更がすぐに反映されない点に注意が必要です。
  2. 複数リスナーの管理
    高可用性環境では複数のリスナーを静的構成で管理するケースもあります。構成ファイルの同期に注意が必要です。
  3. 構成ファイルのバックアップ
    listener.oraはシステムの安定性に影響するため、設定を変更する際はバックアップを取得し、復元可能な状態を保ちます。
  4. 接続テストの実施
    静的構成後は接続テストを行い、設定が正しく機能することを確認します。tnspingやSQL*Plusなどのツールを利用すると、簡単に接続確認が行えます。

まとめ

Oracle Databaseのリスナー静的構成は、安定した接続管理のための有効な方法です。特に、サーバーの再起動やリカバリ作業、メンテナンス中における接続の維持に役立ちます。動的構成はデータベース起動に合わせて自動的にサービス登録を行いますが、静的構成では常時接続待機が可能で、安定性が向上します。

Oracle Database運用におけるリスナー構成の違いとそれぞれのメリットを理解し、システム要件に応じた柔軟な設定が行えるようになることで、さらに安定したデータベース運用が実現できます。

[参考]
Oracle Database Database Net Services リファレンス 19c

コメント

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