c:\Users\じぶん

技術ネタ半分、日記半分ですかね。

Oracleのリスナーってなんだろう?2

前回はよく聞くOracle Databaseの『リスナー』とは何ぞ?ということで説明をしました。 大まかにいうと、DataBase本体(サービス)とクライアントソフトウェアの接続を橋渡しする専用サービスということになります。

今回は実際にリスナーを動かしたりする方法について説明します。 使うのはリスナー制御ユーティリティ「LSNRCTL.EXE(windowsの場合)」です。

実行ファイルはOracleホームのBINディレクトリに入ります。 ※通常DataBaseをインストールするとこのディレクトリがpath環境変数に  追加されますので、インストール後はコンソール(cmd.exe等)からlsnrctl  と入力することで起動できます。

実際にlsnrctl[enter]として起動してみましょう。

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 02-2月 -2015 14:08:57
Copyright (c) 1991, 2010, Oracle.  All rights reserved.
LSNRCTLへようこそ。詳細は"help"と入力してください。
LSNRCTL> ←[入力待ち]

ようこそ…と歓迎されましたが、いきなり入力待ちで何をしたら良いのでしょうね。 『詳細は"help"と入力してください』とあるのでhelp[enter]としてみましょう。

次の操作を使用できます。
アスタリスク(*)は修飾子または拡張されたコマンドを示します:
start               stop                status
services            version             reload
save_config         trace               change_password
quit                exit                set*
show*
LSNRCTL> ←[入力待ち]

入力できるコマンド一覧のようですね、startは起動で、stopは停止、statusは状態と簡単な英単語で制御できそうですね。状態を見るためにstatus[enter]とすると…

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxx)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
開始日                    30-1月 -2015 14:03:24
稼働時間                  3 日 0 時間 13 分 58 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
ログ・ファイル            d:\oracle\diag\tnslsnr\xxxxx\listener\alert\log.xml
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xxxxx)(PORT=1521)))
サービスのサマリー...
サービス"CLRExtProc"には、1件のインスタンスがあります。
  インスタンス"CLRExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
サービス"ORCL"には、1件のインスタンスがあります。
  インスタンス"ORCL"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。

いろいろ出ましたね、最初の数行でLISTENERという名前でversion 11.2.…のリスナーが3日間稼働しているという感じでしょうか。後続でパラメータを設定するファイルやログファイルの場所が分かりそうですね。

ただ、その下のリスニング・エンドポイントのサマリーというのがよく分かりませんね。このサーバには「ORCL」というSIDを持つDataBaseインスタンスがあるので、その情報が出ているような感じですが、状態UNKNOWNとありますね、状態不明ってこと?

不明って事はリスナーが動いていないのでしょうか??この状態で別の端末からsqlplus user/pass@ORCL[enter]とすると…

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
に接続されました。
SQL> ←[入力待ち]

…繋がりましたね。 状態UNKNOWNながらもリスナーは仕事(接続)をしてくれているようです。 いったんUNKNOWNのことは置いて、リスナー自体をstopコマンドで止めてみましょう。

LSNRCTL> stop[enter]
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxx)(PORT=1521)))に接続中
コマンドは正常に終了しました。

特に「止めた」とも出ていませんが…正常終了したようです。 正常に停止できた…ということでしょうか・ この状態で先ほどの端末からsqlplus user/pass@ORCL[enter]とすると…

ERROR:
ORA-12541: TNS: リスナーがありません

リスナーがありません…つまりリスナーが止まっていると考えて良さそうです。 stopで止めたんですからちゃんと制御できているってことでしょう。 今度はstartコマンドで起動してみます。

LSNRCTL> start[enter]
tnslsnrを起動しています。お待ちください...

TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
システム・パラメータ・ファイルはD:\oracle\product\11.2.0\dbhome_1\network\admin\listener.oraです。
ログ・メッセージをd:\oracle\diag\tnslsnr\xxxxx\listener\alert\log.xmlに書き込みました。
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xxxxx)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxx)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
開始日                    02-2月 -2015 14:28:49
稼働時間                  0 日 0 時間 0 分 3 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
ログ・ファイル            d:\oracle\diag\tnslsnr\xxxxx\listener\alert\log.xml

リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xxxxx)(PORT=1521)))
サービスのサマリー...
サービス"CLRExtProc"には、1件のインスタンスがあります。
  インスタンス"CLRExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
サービス"ORCL"には、1件のインスタンスがあります。
  インスタンス"ORCL"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。

10秒ほどで正常に終了しました。 コマンドの応答がstatusコマンドの応答ととてもよく似ていますね。

特に「起動した」とは書いてありませんが開始日、稼働時間がstartコマンドを入力した時間に変わっているので起動しているのでしょう、きっと。 念のため試すと…やっぱり、sqlplus user/pass@ORCL[enter]で接続できました。

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
に接続されました。
SQL> ←[入力待ち]

とりあえず、リスナーを元に戻せたので終了させます。 終了コマンドはexit[enter]もしくはquit[enter]です。

LSNRCTL> exit[enter]
C:\Users\Administrator> ←[入力待ち]

終了しました…とか出ればいいんですがスカッと終了しました。 ここまでで、リスナー制御ユーティリティを使ってリスナーを起動したり止めたりする 作業がコマンドでできることが分かりました。

でも状態がUNKNOWNっていうのが気持ち悪いですよね。 次はそこを調べてみましょうか。

機能で学ぶ Oracle Database入門

機能で学ぶ Oracle Database入門