[Oracle]リスナーサービスと環境変数TNS_ADMIN

Oracle

概要

オラクルリスナーサービスは listener.ora , sqlnet.ora , tnsnames.ora で制御される。(以下この3ファイルを「リスナー制御ファイル」と呼ぶことにする)
複数のリスナーサービスによって制御を分けたい場合や、上記3ファイル が保存されているフォルダを明示的に指定するにはどうしたらよいか?

※ このページで扱っている環境は,すべてのリスナーが同じ ORACLE_HOME を使用している場合です。

基本的な事柄

リスナーサービスは起動時に”リスナー制御ファイル”を読み込む。その際、環境変数TNS_ADMINで指定されているフォルダにあるファイルを読もうとする。環境変数が未設定の場合は、ORACLE_HOME¥NETWORK¥ADMIN にあるファイルを読み込む。

ポイント
listener.ora , sqlnet.ora , tnsnames.ora これら3つは,同じフォルダに保存して1つのグループとして用いる。バラバラに保存して運用はできない。

これを理解していると以下の方法が分かりやすい

様々な用法

全てのリスナーサービスで,同じリスナー制御ファイルを使用したい場合

手順は以下の通りとなる

1.環境変数

コマンドプロンプトより
SETX /m TNS_ADMIN “リスナー定義のフォルダパス名”

または

システムのプロパティの環境変数でもいい

2.リスナーサービスの再起動

Windows のサービスより再起動させることで,即適用される。リスナーサービスのスタートアップは自動でいい。

ポイント
リスナーサービスは,再起動するたびに TNS_ADMIN の環境変数が参照する。つまりサーバーを再起動させたりすると,その時点のTNS_ADMINの環境変数を読み込むので,恒久的に TNS_ADMIN の値を変更しないようにしておく。テスト運用などで環境変数を変更する際は注意が必要。

リスナーサービス毎に,異なるリスナー制御ファイルを使用したい場合

SQLNET.ORAファイルを編集すると,接続元クライアントのIPアドレスを制限することができる。複数のリスナーを作成して,それぞれのリスナー毎に制御したい場合は

1.全てのリスナーサービスのスタートアップを手動にする

自動だと同じリスナー制御ファイルを読み込んでしまう。

2.各リスナーを起動させるBATファイルを作成

SET TNS_ADMIN=1つ目のリスナーに読み込ませたい制御ファイルのフルパス
SETX /m TNS_ADMIN "1つ目のリスナーに読み込ませたい制御ファイルのフルパス"
lsnrctl stop 1つ目のリスナー名
lsnrctl start 1つ目のリスナー名

SET TNS_ADMIN=2つ目のリスナーに読み込ませたい制御ファイルのフルパス
SETX /m TNS_ADMIN "2つ目のリスナーに読み込ませたい制御ファイルのフルパス"
lsnrctl stop 2つ目のリスナー名
lsnrctl start 2つ目のリスナー名

このBATファイルを”管理者として実行” すると,それぞれのリスナーが明示されたリスナー制御ファイルを読み込むことになる。

ポイント
リスナーサービスは起動する時の TNS_ADMINの値を読み取る。そのため,サービスは自動起動ではなく,上記のようにBATファイルで環境変数を変更しながら順次起動させていく。

3.タスクスケジューラに登録

リスナーサービスのスタートアップは”手動”で運用となります。これだとサーバーを再起動させるとサービスが実行されずOracleに接続できなくなるので,上記のBATファイルをタスクスケジューラに登録し,サーバー起動時(スタートアップ時)にシステムアカウントで実行されるようにします。

システムアカウントで実行させる
遅延時間は任意。停止するまでの時間はなし

TNS_ADMIN を変更による他への影響や調整

OEM Database Console でリスナーのステータスが「停止中」と表示される

プロパティ

Oracle 11.2.0.3.0
Windows Server 2008 R2

コメント

スポンサーリンク
タイトルとURLをコピーしました