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を適用すればよいと思われる.
- まず,Oracleを利用するアプリケーション(たとえばSQL*Plus)が,クライアント側のSQL*NetV2を経由してTNS Listenerと話をする.
- TNS Listenerは,fork(),exec()にてOracleにスレッドを生成するらしい.
- そのセッションが成功すれば,その回答をクライアントに返す.
- それ以降はアプリケーションとRBMSが勝手に話をする.
3./etc/servicesファイルの編集
TNS ListnerがOracleと通信するためにポート番号を確保する必要がある.
そのポート番号は/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ディレクトリ程度しか設定されていない.
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) |
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の設定例
これまでの説明を踏まえて,次のように設定する.
#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で指定したパスを入力する. |
|
コメントアウトにする. |
5.init.oraの編集
SQL*Net V2を利用するには,Oracle自体の設定にも追加編集しなければならない.
Oracleの設定はinit.oraファイルを編集するが,インストール直後は次のようになっている. この場合,SQL*Netを利用するようにインストールした場合である.
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を利用するように設定し直す必要がある.
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にて次のコマンドで確認することが出来る.
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でしていしたディレクトリで任意に決められると思う.
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全般の話が入っている. 読み物ではなく,辞書として使えばよいと思われる.