備忘録:Oracle RACのリスナー周りの関係と値指定のメリット
Posted: March 15, 2018
さてさて、今回はOracle RACのリスナー周りの関係について理解したことを備忘録として書く。
環境
OS : Oracle Linux Server release 6.9
DB : Oracle RAC
リスナー:SCANリスナー、アプリケーション用にデフォルトリスナー同様net1に別にリスナーを立てているケース
事前知識
Oracle RACにおいては、
値を設定していなくてもリスナーの情報が下記パラメータに自動的に登録される。
パラメータ名:登録される情報
local_listener : net1のリスナーの情報(デフォルトリスナーなど)
remote_listener : SCANのホスト名:ポート番号
listener_networks : net2のリスナーの情報
DB起動時にはこれらのリスナーに動的にサービスが登録される。
良しなにやってくれるし、これらのパラメータには値を設定しない方が良いのだろうか。
値未指定で良い?
値は指定した方が良いというのが持論。今のところ理由は二つ。
理由1:自動登録の失敗の可能性
リスナー数が多くなっていった際にALTER SYSTEM SET文で指定可能な文字数(255文字)を超えるとOracle Clusterwareによる自動登録が失敗する。
理由2:リスナーで受け付けるサービスが汚くなる
複数DBを同一サーバー群で構成すると、それらすべてのリスナーの情報が登録されてしまう。
たとえばDB1とDB2を同一サーバー群で運用する場合、かつリスナーを分ける場合、
net1に属するリスナーがそれぞれ存在するとき、両方の値がlocal_listenerに登録され、
同様にnet2に属するリスナーがそれぞれ存在するとき、両方の値がlistener_networksに登録される。
結果として、それぞれのリスナーに、すべてのDBのサービスが登録されてしまう。これは気持ち悪い。
最後に
運用上、ネットワーク的にもアプリケーション用、管理用にNICを分ける場合が多いと思うので
リスナーもそれぞれ存在するケースが想定される。上記の持論が助けになれば幸いである。
なおこれらのパラメータ、何も設定しなければDB起動時のアラートログを見れば分かる通り
システム側でalter system XX SCOPE=MEMORY文を発行して値を登録しているのだが
上記パラメータのどれかがspfile等に値が設定されているとシステム側では自動で設定しなくなる。
僕はlocal_listener,listener_networksに値を指定し、DB再起動をした際にremote_listenerに値を指定しなかったために
SCAN経由でのDB接続ができないという事態になった。個人的にはこれを気をつけたい。
最後の最後に
いくつか知識不足で理解がおかしい場合はご指摘いただきたい。優しければなおよし。