oracleの勉強やoracle運用していると
- リスナーを介したDB接続
- リスナーへのサービス登録を確認する
- リスナーの状態ってどうなってる?
など、リスナーに関する様々なことが、たまに聞こえてくる。
でも、自分自身、リスナーとoracleって図で示すとどんな関係になるのか、何となくしか把握できていなかった。
そんなDBAの自分が、リスナーとDBの関係を図を使ってイメージするために本記事を投稿する。
また、以下のサイトを参考にするとリスナーに関する理解が深まったので紹介する。
Oracleへの接続について
動的リスナー登録について
静的リスナー登録について
目次
- リスナーの役割
- リスナーとDBの関係図
- 初期化パラメータ LOCAL_LISTENER
- 初期化パラメータ SERVICE_NAMES
1. リスナーの役割
DBとリスナーの関係を説明する前に、リスナーの役割について
通常、oracleへのアクセスするには、以下の2種類の方法があります。
- ローカル接続
- ネットワークを経由した接続
①ローカル接続の場合
インスタンスが起動しているサーバーへ、既にログインできていれば、可能です。下図は、リスナーを介さないoracleへのアクセス方法です。
②ネットワークを経由した接続の場合
インスタンス起動サーバーとクライアントがアクセスしているサーバーとが、別の場合、下図のようにリスナーを介します。
ネットワークを経由した接続は、リモート接続ともいわれています。
リスナーの役割とは、
クライアントからリスナーめがけて、
「このサービスに接続したいんだけど?」
と要求が来る。そこでリスナーは。
「このサービスのDBは、あっちですね!」
と案内するのが、リスナーの大きな役割です。
2. リスナーとDBの関係図
結論から言うと、
リスナーとDBは、まったくの別物と考えてください。
どういうことか。
DB停止中でもリスナーは起動できるし、
リスナーを起動したからと言って、DBが起動するわけでもない。
→リスナーはDBから独立した存在なのです。
通常、リスナーはインスタンスが起動するサーバー内で、起動するのが一般的です。
しかし、ぶっちゃけ、リスナーはどこで起動しても構いません。
ただ、ここで問題になってくるのは、
インスタンスからしたら、どこにリスナーがあるかわからない。
それを解消してくれるのが、初期化パラメータである LOCAL_LISTENER
です。
3. 初期化パラメータ LOCAL_LISTENER
大前提として、
- 初期化パラメータ
LOCAL_LISTENER
- 初期化パラメータ
REMOTE_LISTENER
上記二つの違いは、別途記事で説明します。
簡単に説明すると、二つともどこで起動しているリスナーに接続情報を登録するかを定めているパラメータです。
要するに、リスナーの場所を示しています。
LOCAL_LISTENER
の場合、デフォルトでは、インスタンス起動サーバーにリスナーが存在すると設定されています。
LOCAL_LISTENER=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))
使用用途は、動的リスナー登録を行うときに使用します。
インスタンス→リスナーへ60秒に一回 SERVICE_NAMES
の情報を提供しています。
その提供先を LOCAL_LISTENER
で毎回確認しながら、情報提供をしているという仕組みです。
4. 初期化パラメータ SERVICE_NAMES
SERVICE_NAMES
パラメータとは、
DB名とサービス名を紐づけている設計書
です。
基本的に、クライアントは、oracleにアクセスするとき、サービス名のみ意識しています。リスナーにもサービス名でアクセスしてきます。
そのため、リスナーにサービス名とDB名を紐づけておく必要があるのです。
そこで登場するのが、 SERVICE_NAMES
パラメータです。
SERVICE_NAMES
は、60秒に一度インスタンス→リスナーに登録を行っています。