データベース備忘録

※自分調べ

Oracleの静的サービス登録と動的サービス登録

リスナーがDBのサービスをリッスンするには方法が二つある

 

listner.oraへの記述方法の違いで選り分けてみる

【静的登録】

静的、つまりパラメータに記載することで明示的にリスナーを登録しなければならない

 

<記載例>

listner.ora

SID_LIST_ORCL01=
(SID_LIST =
  (SID_DESC =
    (SID_NAME = ORCL01)
      (ORACLE_HOME = /u01/app/ora12c/product/12.2.0/dbhome_1)
  )
)

 

ORCL01=
(DESCRIPTION_LIST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hostdesu)(PORT = 1521))
  )
)

 

 

この場合、

ORCL01エントリで「1521ポート」を使用することを設定(これは静的・動的同じ)、

SID_LIST_ORCL01エントリで「/u01/app/ora12c/product/12.2.0/dbhome_1」にインストールしたoracleから起動している「ORCL01」というデータベースをリスナープロセスに

登録する。

 

 

【動的登録】

 

<記載例>

明示的にパラメータに記載せず、LREGプロセスが各パラメータファイルを定期的に読み込んで設定してくれる。

 

listner.ora

ORCL01=
(DESCRIPTION_LIST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hostdesu)(PORT = 1521))
  )
)

 

tnsnames.ora

ORCL01_srv=
(DESCRIPTION_LIST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hostdesu)(PORT = 1521))
  )
)

 

#リスナーエイリアス

LISTNER_ORCL01_srv=
    (ADDRESS = (PROTOCOL = TCP)(HOST = hostdesu)(PORT = 1521))

接続識別子を「ORCL01_srv」に設定

リスナーエイリアスも設定しておく(※LOCAL_LISTENER設定用に)

 

tnsnames.oraでリスナーエイリアスに設定した識別子(上の例だとLISTNER_ORCL01_srv)を初期化パラメータLOCAL_LISTENERに設定する。

※LOCAL_LISTENERにはリスナーエイリアスではなく、直接ホスト名やポート番号の記載をすることも可能。エイリアスはあくまでエイリアスで、直接内容を記載することも可能。

 

要はDB側(LREGプロセス)がリスナーを認識するために、LOCAL_LISTENERを設定する必要がある。

LREGプロセスはリスナーに接続できると自身が所属しているDBのサービス名をリスナーに提供する。

するとリスナー側はユーザプロセスからの接続要求をどこのDBに流せば良いか、認識するようになるといった流れである。

 

 

初期化パラメータ(ファイル)

LOCAL_LISTENER=LISTNER_ORCL01_srv

SERVICE_NAMES=~

 

PFILEを使用しているならファイルに記載、

SPFILEを使用しているならalter文で設定変更(のち確認)

alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST= hostdesu)(PORT = 1521))';

alter system set servie_names = service_name ;

 local_listnerはリスナーエイリアスを設定(tnsnames.ora)していればそっちでも設定可能

alter system set local_listener=LISTNER_ORCL01_srv;

確認コマンド

 

show parameter local_listener

show parameter service_names