UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

TNS Listenerの設定 for Solaris 〜SQL*Net V2のサーバ側設定〜


TNS Listenerの設定 for Solaris

〜SQL*Net V2のサーバ側設定〜


0.改定履歴

  • 1997.08.20 初版
  • 1997.09.03 精度を上げた(とおもうんだけど)

1.はじめに

 このドキュメントでは,Oracle Server 7.3.2.1.0でSQL*Net V2を使用する為に,TNS Listenerの設定手順を示す.

2.TNS Listnerの説明

 TNS Listenerの,TNSとは,Transparente Network Substrate(透明なネットワーク基盤)の略で,接続先サーバの検索や,クライアントとサーバ間の割り込みをどのように処理するかを決定するなどの処理を行なう.

 TNS Listenerは,アプリケーションとRDBMS(Oracle)の間に立ち,次の図ような関係となる.

 Oracle6では,1ユーザプロセスで対応していたが,Oracle7からはマルチユーザマルチスレッドで処理を行なえる. これを行なうにはOracle側に“ディスパッチャ”と呼ばれる処理を振り分けるプロセスがあり,これに対して要求を出すためにはSQL*Net V2が必要である.


Oracle 7でもSQL*Net V1を使うことは出来るらしいが,マルチスレッドに対応していないのでユーザが多い場合メリットがない. 既存システムのアップグレードで必須でない限りは,SQL*Net V2を適用すればよいと思われる.


  1. まず,Oracleを利用するアプリケーション(たとえばSQL*Plus)が,クライアント側のSQL*NetV2を経由してTNS Listenerと話をする.
  2. TNS Listenerは,fork(),exec()にてOracleにスレッドを生成するらしい.
  3. そのセッションが成功すれば,その回答をクライアントに返す.
  4. それ以降はアプリケーションとRBMSが勝手に話をする.

3./etc/servicesファイルの編集

 TNS ListnerがOracleと通信するためにポート番号を確保する必要がある.

 そのポート番号は/etc/servicesファイルに記述する.

/etc/servicesファイルの中身
ufsd            1008/udp        ufsd
ingreslock      1524/tcp
orasrv          1525/tcp        oracle          #SQL*Net V1
listner         1521/tcp                        #SQL*Net V2 Listner
listen          2766/tcp                        # System V listener port

 lisnterの行を追加する. orasrvの行はSQL*Net V1用であり,不要である.

4.listener.oraファイルの編集

4.1.listener.oraのファイルパス

 サーバ側のlistner.oraファイルを編集する.

 ファイルは,$ORACLE_HOME/network/adminの下にあるlistner.oraである. インストールの方法やバージョンによって無いかもしれない. 無い場合には,自分で作成するか,Oracle Network Managerを利用して作成する.


 いくら探してもOracle Network Managerというものが見つからない. そして,Windows版が存在しているようであり,逆にそれしかないようである. そして,インストールすると,その名前は“SQL*Net Easy Configuration”というものの様である.


 また,環境変数TNS_ADMINを設定することにより,任意のディレクトリを指定する事も可能である.

4.2.インストール直後のlistener.oraファイルと追加項目の確認

 Oracle InstallerからSQL*Net関連モジュールを導入したところで,SIDとORACLE_HOMEディレクトリ程度しか設定されていない.

Oracle7.3.2.1.0でインストール直後のlistener.ora
LISTENER=
 (ADDRESS_LIST=
  (ADDRESS=
   (PROTOCOL=IPC)
   (KEY=SID)
  )
 )

STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER = 10

SID_LIST_LISTENER=
 (SID_LIST=
  (SID_DESC=
   (SID_NAME=SID)
   (ORACLE_HOME=/oracle/app/oracle/product/7.3.2)
   (GLOBAL_DBNAME=DBNAME))
 )

TRACE_LEVEL_LISTENER = OFF
USE_CKPFILE_LISTENER = true
USE_PLUG_AND_PLAY_LISTENER = true
PASSWORDS_LISTENER = (C6C144CF750E3CA5)

 ここで判るのは,インストールの際にTCP/IPアダプタを選択したとしても,IPC接続の設定しか成されていない.(4行目のPROTOCOL=IPCでわかる. IPC接続とは,UNIXの共有メモリを使ったアクセスである)

 ここでは,以下の作業を行なう必要がある.

  • TCP/IPプロトコルの追加
  • リスナーのパスワード削除

4.3.TCP/IPの追加

 TNS ListenerがTCP/IP接続を受けるように設定するには,リスナーのアドレスリストに次のような設定を追加する必要がある.

  (ADDRESS=(PROTOCOL=TCP)(HOST=HOSTNAMEorIP)(PORT=1521))

 これを利用しない場合,外部 マシンからの接続が出来ない事になる. Oracleが導入されているローカルマシン上であれば,IPCによる接続が出来るので設定ミスに気付かない場合もある.

4.4.Listenerパスワードの削除

 TNS Listenerは,不正な接続を防ぐためにパスワードを持っている. 初期パスワードはOracleのインストール時に行なっている.

 このパスワードは,listener.ora内の"PASSWORDS_LISTENER"という変数に設定されているが,この時点では暗号化された物が利用されている. もし,インストール時に付けたパスワードが判らない場合には,パスワードを書き直して良い. 暗号化されていないパスワードにも対応している.

 また,ここではListenerにはセキュリティを付けない(つまり,パスワード無効にする)ために,"PASSWORDS_LISTENER"行をコメントアウトする.

暗号化されたパスワードが設定されている例
TRACE_LEVEL_LISTENER = OFF
USE_CKPFILE_LISTENER = true
USE_PLUG_AND_PLAY_LISTENER = true
PASSWORDS_LISTENER = (C6C144CF750E3CA5)

暗号化されていないパスワードの設定例(ここではパスワードはtns)
TRACE_LEVEL_LISTENER = OFF
USE_CKPFILE_LISTENER = true
USE_PLUG_AND_PLAY_LISTENER = true
PASSWORDS_LISTENER = (tns)

セキュリティを無効にする例(コメントアウト)
TRACE_LEVEL_LISTENER = OFF
USE_CKPFILE_LISTENER = true
USE_PLUG_AND_PLAY_LISTENER = true
#PASSWORDS_LISTENER = (non)


 Listenerのパスワードは,リスナーコントローラ(lsnrctl)プログラムでTNS Listenerを停止するときに必要である. その他は知らない.
 PASSWORDS_LISTENER行をコメントにすると,TNS Listenerの起動時に"Security Off"と表示される.


4.5.listener.oraの設定例

 これまでの説明を踏まえて,次のように設定する.

listner.oraのサンプル
#listener.ora
LISTENER=(ADDRESS_LIST=
  (ADDRESS=(PROTOCOL=IPC)(KEY=SID))
  (ADDRESS=(PROTOCOL=TCP)(HOST=HOSTNAMEorIP)(PORT=1521))
)

STARTUP_WAIT_TIME_LISTENER=0
CONNECT_TIMEOUT_LISTENER=10

SID_LIST_LISTENER= (SID_LIST=
   (SID_DESC=(SID_NAME=SID)(ORACLE_HOME=/oracle/app/oracle/product/7.3.2))
)

TRACE_LEVEL_LISTENER = OFF
USE_CKPFILE_LISTENER = true
USE_PLUG_AND_PLAY_LISTENER = true
#PASSWORDS_LISTENER = (C6C144CF750E3CA5)

 編集する項目は,次の通りである.

項目 内容
HOSTNAMEorIP  Oracleが稼動しているホスト名,あるいはIPアドレスを記述する.
SID  OracleのSIDを記述する.
/oracle/app/oracle/product/7.3.2  環境変数$ORACLE_HOMEで指定したパスを入力する.

PASSWORDS_LISTENER
 コメントアウトにする.

5.init.oraの編集

 SQL*Net V2を利用するには,Oracle自体の設定にも追加編集しなければならない.

 Oracleの設定はinit.oraファイルを編集するが,インストール直後は次のようになっている. この場合,SQL*Netを利用するようにインストールした場合である.

インストール直後のinit.oraの内容
mts_dispatchers="ipc,1"
mts_max_dispatchers=10
mts_servers=1
mts_max_servers=10
mts_service=SID
mts_listener_address="(ADDRESS=(PROTOCOL=ipc)(KEY=SID))"

 TNS Listenerのlistener.oraと同じように,ここではIPC接続についての設定のみがなされている状態であるので,TCP/IPを利用するように設定し直す必要がある.

init.oraの編集
mts_dispatchers="ipc,5","tcp,10"
mts_max_dispatchers=20
mts_servers=5
mts_max_servers=20
mts_service=SID
mts_listener_address="(ADDRESS=(PROTOCOL=ipc)(KEY=SID))"
mts_listener_address="(ADDRESS=(PROTOCOL=tcp)(host=HOSTNAMEorIP)(PORT=1521))"


 MTSとは,Multi Thereaded Serverの略で,ディスパッチャの数やプロトコルを起動時に設定することでOracleはクライアントから要求を受ける. 処理できる最大のスレッド数などはMTS_変数をマニュアルを見て設定する.


 この設定を行なった後,init.oraはOracle起動時に読み込まれるものなので,Oracleの再起動が必要である. また,この内容が反映されたか否かはServer Managerにて次のコマンドで確認することが出来る.

MTSパラメータの確認
SVRMGR> show parameters

〜略〜

mts_dispatchers                     string  ipc,5, tcp,10
mts_listener_address                string  (ADDRESS=(PROTOCOL=ipc)(KEY=SID
mts_max_dispatchers                 integer 20
mts_max_servers                     integer 20
mts_multiple_listeners              boolean FALSE
mts_servers                         integer 5
mts_service                         string  SID

6.TNS Listenerの起動

 TNS Listenerの起動には,lsnrctlコマンドを利用する. TNS Listenerを起動する前に,Oracleが稼動してなければならないようである.

oracle@duo% lsnrctl start

LSNRCTL for Solaris: Version 2.3.2.1.0 - Production on 20-AUG-97 11:45:14

Copyright (c) Oracle Corporation 1994.  All rights reserved.

Starting /oracle/app/oracle/product/7.3.2/bin/tnslsnr: please wait...

TNSLSNR for Solaris: Version 2.3.2.1.0 - Production
System parameter file is /oracle/app/oracle/product/7.3.2/network/admin/listener
.ora
Log messages written to /oracle/app/oracle/product/7.3.2/network/log/listener.lo
g
Listening on: (ADDRESS=(PROTOCOL=ipc)(DEV=10)(KEY=SID))
Listening on: (ADDRESS=(PROTOCOL=tcp)(DEV=14)(HOST=HOSTNAMEorIP)(PORT=1521))

Connecting to (ADDRESS=(PROTOCOL=IPC)(KEY=TST))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Solaris: Version 2.3.2.1.0 - Production
Start Date                20-AUG-97 11:45:17
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  OFF
SNMP                      OFF
Listener Parameter File   /oracle/app/oracle/product/7.3.2/network/admin/listene
r.ora
Listener Log File         /oracle/app/oracle/product/7.3.2/network/log/listener.
log
Services Summary...
  TST           has 1 service handler(s)
The command completed successfully

oracle@duo%

 "Security OFF"となているのは,前出のListener.oraのパスワードを コメントアウト,あるいは削除しているからである.

 プロセスが起動したか否かはpsコマンドで確認できる.

oracle@duo% ps -ef | grep tns
  oracle  1052     1  0 11:45:16 ?        0:00 /oracle/app/oracle/product/7.3.2/
bin/tnslsnr LISTENER -inherit
  oracle  1054  1047  0 11:48:01 pts/1    0:00 grep tns
oracle@duo%

7.TNS Listenerの停止

 TNS Listernerの停止も,,lsnrctlコマンドを利用する.

oracle@duo% ps -ef | grep tns
  oracle  1052     1  0 11:45:16 ?        0:00 /oracle/app/oracle/product/7.3.2/
bin/tnslsnr LISTENER -inherit
  oracle  1054  1047  0 11:48:01 pts/1    0:00 grep tns
oracle@duo% lsnrctl stop

LSNRCTL for Solaris: Version 2.3.2.1.0 - Production on 20-AUG-97 11:49:57

Copyright (c) Oracle Corporation 1994.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=IPC)(KEY=TST))
The command completed successfully
oracle@duo% ps -ef | grep tns
  oracle  1057  1047  0 11:50:08 pts/1    0:00 grep tns
oracle@duo%

8.TNS Namesの設定

 TNS Namesでは,そのTNS Listenerが接続するOracleサーバの接続文字列の別名を定義する.

 このファイルは,TNS Listenerと同じディレクトリに存在するか,無ければ作成する. 多分,同じように環境変数TNS_ADMINでしていしたディレクトリで任意に決められると思う.

tnsname.oraファイルのサンプル
AliasName=
 (DESCRIPTION=
  (ADDRESS=
   (PROTOCOL=TCP)
   (HOST=HOSTNAMEorIP)
   (PORT=1521)
  )
  (CONNECT_DATA=
   ( SID = SID)
  )
)


参考文献

  • DBA(Oracle7 Database Maintenance 1) DBA1 補足資料
    • 株式会社xxxx データベース事業部 西日本営業部 xxさん作
    • 設定手順が時系列で出ているが,なにぶん講習を受け無ければ判らない.
  • SQL*Netの理解 リリース2.2 商品番号A15836-1 1995年10月
    • Oracleの公式マニュアル
    • SQL*Net全般の話が入っている. 読み物ではなく,辞書として使えばよいと思われる.


広告スペース
Google