Oracleリスナー:基礎から実践、ベストプラクティスまで完全ガイド

オラクルデータベースの基本

「データベース接続がスムーズに行かない…」
こんな問題に直面したことはありませんか? それを解決する鍵となるのが、Oracleリスナーです。本記事では、リスナーの基礎から高度な構成、トラブルシューティング、セキュリティ設定、そしてパフォーマンス最適化までを完全に網羅します。

初心者でも理解できるよう図解と実践手順を交え、上級者にも役立つ情報を提供します。


リスナーの概要:その重要性とは?

リスナーは、クライアントとデータベースを接続するためのネットワークゲートウェイです。

リスナーの役割(図解)

  クライアント             リスナー             データベース
+-----------+ +------------+ +----------------+
| SQL*Plus | -----> | LISTENER | -----> | orcl instance |
+-----------+ +------------+ +----------------+

リスナーがなければ、クライアントはデータベースに接続できません。リスナーは以下の役割を担います:

  1. クライアントからの接続要求を受信。
  2. データベースとの通信を仲介。
  3. クライアントに適切なサーバープロセスを割り当て。

ステップ1:リスナーの基本設定

1. リスナーの設定ファイル listener.ora

listener.oraは、リスナーの動作を定義する設定ファイルです。通常、このファイルは以下のパスに配置されています:

  • Linux/Unix: $ORACLE_HOME/network/admin/listener.ora
  • Windows: %ORACLE_HOME%\network\admin\listener.ora

例: 単一インスタンス用の基本構成

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

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)
)
)

2. tnsnames.ora ファイルの設定

クライアント側ではtnsnames.oraを利用してデータベース接続を定義します。

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)

ステップ2:リスナーの管理

主な管理コマンド (lsnrctl)

コマンド説明実行例
lsnrctl startリスナーを起動$ lsnrctl start
lsnrctl stopリスナーを停止$ lsnrctl stop
lsnrctl reload設定を再読み込み$ lsnrctl reload
lsnrctl statusリスナーの現在の状態を確認$ lsnrctl status
lsnrctl services管理しているサービスを確認$ lsnrctl services

ステップ3:動的構成と静的構成

リスナーの構成には、静的構成動的構成の2種類があります。

静的構成(手動登録)

すべての情報をlistener.oraに記述する方法です。固定された環境で使われます。

設定例(複数インスタンス)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)
)
(SID_DESC =
(SID_NAME = testdb)
(ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)
)
)

動的構成(自動登録)

データベースが自動的にリスナーに登録されます。

手順

  1. LOCAL_LISTENERを設定
    ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))';
  2. 動的登録
    ALTER SYSTEM REGISTER;

ステップ4:リスナーのセキュリティ強化

1. ホワイトリスト/ブラックリスト設定

アクセスを特定のIPアドレスに限定することで、不要な接続を防ぎます。

設定例(ホワイトリスト)

sqlnet.oraに以下を記述:

TCP.VALIDNODE_CHECKING = YES
TCP.INVITED_NODES = (192.168.1.10, 192.168.1.11)

2. TCPSプロトコル(SSL/TLS)の設定

接続を暗号化することで、セキュリティを強化します。


ステップ5:トラブルシューティングと監視

1. ログの確認

リスナーのログは以下のパスに保存されます:

  • Linux/Unix: $ORACLE_HOME/network/log/listener.log
  • Windows: %ORACLE_HOME%\network\log\listener.log

2. ポートの競合確認

ポート1521が他のプロセスに使用されていないか確認:

netstat -an | grep 1521

ステップ6:リスナーの高度な構成(ロードバランシングとフェイルオーバー)

複数のリスナーを設定することで、接続を分散させたり、障害発生時に自動的に切り替えることが可能です。

フェイルオーバーの設定例

tnsnames.ora:

SALESDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = node2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sales)
)
)

ベストプラクティス

  1. リスナーのセキュリティを定期的に監査
    • ホワイトリスト設定やパスワード保護を有効にする。
  2. 監視ツールを活用
    • Enterprise Managerやカスタムスクリプトでリスナーの稼働状況を定期的にチェック。
  3. 構成管理をドキュメント化
    • 設定ファイルの変更履歴を管理。

まとめ

この記事では、リスナーの基本から応用までを網羅しました。初心者はまず基本構成を学び、慣れたら動的構成やフェイルオーバーの設定を試してみてください。また、セキュリティ設定を強化し、リスナーの安全性を確保することも重要です。

次回の記事では、リスナー監視とパフォーマンス最適化の詳細を解説します!

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

コメント

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