「データベース接続がスムーズに行かない…」
こんな問題に直面したことはありませんか? それを解決する鍵となるのが、Oracleリスナーです。本記事では、リスナーの基礎から高度な構成、トラブルシューティング、セキュリティ設定、そしてパフォーマンス最適化までを完全に網羅します。
初心者でも理解できるよう図解と実践手順を交え、上級者にも役立つ情報を提供します。
リスナーの概要:その重要性とは?
リスナーは、クライアントとデータベースを接続するためのネットワークゲートウェイです。
リスナーの役割(図解)
クライアント リスナー データベース
+-----------+ +------------+ +----------------+
| SQL*Plus | -----> | LISTENER | -----> | orcl instance |
+-----------+ +------------+ +----------------+
リスナーがなければ、クライアントはデータベースに接続できません。リスナーは以下の役割を担います:
- クライアントからの接続要求を受信。
- データベースとの通信を仲介。
- クライアントに適切なサーバープロセスを割り当て。
ステップ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)
)
)
動的構成(自動登録)
データベースが自動的にリスナーに登録されます。
手順
LOCAL_LISTENER
を設定:ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))';
- 動的登録:
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)
)
)
ベストプラクティス
- リスナーのセキュリティを定期的に監査
- ホワイトリスト設定やパスワード保護を有効にする。
- 監視ツールを活用
- Enterprise Managerやカスタムスクリプトでリスナーの稼働状況を定期的にチェック。
- 構成管理をドキュメント化
- 設定ファイルの変更履歴を管理。
まとめ
この記事では、リスナーの基本から応用までを網羅しました。初心者はまず基本構成を学び、慣れたら動的構成やフェイルオーバーの設定を試してみてください。また、セキュリティ設定を強化し、リスナーの安全性を確保することも重要です。
次回の記事では、リスナー監視とパフォーマンス最適化の詳細を解説します!
[参考]
Database Net Servicesリファレンス
コメント