Oracle 11g XEでTNSリスナーがありませんと言われたときに調べたこと

Oracle 11g XE(以下OracleXE)をLinuxにインストールして、数回再起動したらいつしかsqlplusで接続したときに、「ORA-12541: TNS: リスナーがありません」と言われてログインできなくなりました。当然WindowsのSQLクライアントでもログインできません。

そのときにやった調査と対策です。

まずはWindowsPC(リモート)でsqlplusを実行するとこんな感じ。

C:\Users\******>sqlplus SAKURA/SAKURA@10.8.0.1:1521/XE

SQL*Plus: Release 11.2.0.1.0 Production on 日 4月 8 01:33:55 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

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


ユーザー名を入力してください:
ERROR:
ORA-12560: TNS: プロトコル・アダプタ・エラーが発生しました


ユーザー名を入力してください:
ERROR:
ORA-12560: TNS: プロトコル・アダプタ・エラーが発生しました


SP2-0157: 3回試行しましたがOracleに接続できませんでした。SQL*Plusを終了します。

C:\Users\******>

接続ができていないようです。

この時点で考えられるとすると、以下のような感じでしょうか。

  • ネットワークがつながっていない → これは無さそう。Googleなどにつながるので。
  • サーバーが落ちている → これも無さそう。SSHでログインできているので。
  • OracleXEが起動していない → プロセスを確認したら生きていました。
  • リスナーが起動していない → 後述しますがこちらも大丈夫でした。
  • Firewallで1521ポートがふさがれている → firewall-cmdコマンドで確認しましたが、1521(oracle)は空いていました。
  • ローカル(Linuxサーバ)側でOracleXEへ接続できるか → sqlplusコマンドで接続できることを確認しました。

OracleXEは問題なく起動していて、リモートからの接続が出来ていない状態です。

リモートからtnspingコマンドで、LinuxサーバのOracleへ到達できるか確認します。

C:\Users\******>tnsping 10.8.0.1/xe

TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 08-4月 -2018 01:54:17

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

パラメータ・ファイルを使用しました:
C:\Users\ahiru_000\oracle\product\11.2.0\client_1\network\admin\sqlnet.ora

エイリアスを解決するためにEZCONNECTアダプタを使用しました。
(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=xe))(ADDRESS=(PROTOCOL=TCP)(HOST=10.8.0.1)(PORT=1521)))に接続の試行中
TNS-12541: TNS: リスナーがありません。

C:\Users\*******>

やはり、リスナーが見つかりません。

OracleXEサーバー側でリスナーが起動していないか、接続を受け付けていない可能性がありそうです。

Linuxにログインし、OracleXEを再起動してみます。この時psコマンドでプロセスを見たところ、OracleXEのリスナーなどは全て起動していましたが、念のため。

[root@sakura ~]# sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 日 4月 8 02:31:37 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

SQL> conn sys/******* as sysdba
接続されました。
SQL>
SQL> startup
ORA-01081: すでに稼働中のOracleは起動できません - まずシャットダウンしてください
SQL>
SQL> shutdown
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area  204591104 bytes
Fixed Size                  2225032 bytes
Variable Size             155192440 bytes
Database Buffers           41943040 bytes
Redo Buffers                5230592 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL>

すでに稼働中だったようなので、いちおうshutdown→startupをしてインスタンスを再起動しておきます。

これでも状況は改善せず。相変わらずリスナーが見つかりません。

続いてlsnrctlでリスナーのステータス確認と再起動を行います。

[root@sakura client]# lsnrctl

LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 08-4月 -2018 02:40:18

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> stop
(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))に接続中
コマンドは正常に終了しました。
LSNRCTL> start
/u01/app/oracle/product/11.2.0/xe/bin/tnslsnrを起動しています。お待ちください...

TNSLSNR for Linux: Version 11.2.0.2.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/11.2.0/xe/log/diag/tnslsnr/tk*-***-*****/listener/alert/log.xml
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for Linux: Version 11.2.0.2.0 - Production
開始日                    08-4月 -2018 02:30:24
稼働時間                  0 日 0 時間 0 分 0 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
デフォルト・サービス           XE
パラメータ・ファイル      /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
ログ・ファイル            /u01/app/oracle/product/11.2.0/xe/log/diag/tnslsnr/tk*-***-*****/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
サービスのサマリー...
サービス"PLSExtProc"には、1件のインスタンスがあります。
  インスタンス"PLSExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
LSNRCTL> quit
[root@sakura client]#

lsnrctlでステータスを見るだけなら、lsnrctl statusで見ることができます。今回はlsnrctlでコンソールに入り、stop→startで停止と起動を試してみました。サービスにXEがないのが気になります。

ここで念のため、リモートのWindowsから再度sqlplusで接続してみますが、やはり接続できません。

OracleXE側に原因がありそうなので、リスナー廻りの設定ファイルを見てみます。関係がありそうなのは、tnsnames.ora, listener.oraの2つ。

まずは、tnsnames.oraから見てみます。

/u01/app/oracle/product/11.2.0/xe/network/admin/tnsnames.ora :
# tnsnames.ora Network Configuration File:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

どちらかというとサーバー側では重要なファイルではないのですが、内容は問題なさそうです。

ちなみにLinuxサーバ側ではローカルのOracleXEに接続できている状態です。

もう一つのlistener.oraファイルも見てみます。こちらはリスナーを構成するファイルなので、超重要。むしろこちらのファイルに何等かの問題がありそうな気がしています。

/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora# listener.ora Network Configuration File:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
      (PROGRAM = extproc)
    )
  )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

見た感じ接続できないような問題となる箇所は見当たらず・・。

ただ、XEのリスナーの記述が無いようなのでこれを追加します(なくても大丈夫なはずなのですが・・)。

/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora# listener.ora Network Configuration File:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = XE)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
      (SID_NAME = XE)
    )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
      (PROGRAM = extproc)
    )
  )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.8.0.1)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

赤字の部分を追加しました。とりあえずsystemctlでOracleXEを再起動したあと、lsnrctlで確認します。

[root@sakura client]# lsnrctl

LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 08-4月 -2018 02:33:32

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> start
/u01/app/oracle/product/11.2.0/xe/bin/tnslsnrを起動しています。お待ちください...

TNSLSNR for Linux: Version 11.2.0.2.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/11.2.0/xe/log/diag/tnslsnr/tk*-***-*****/listener/alert/log.xml
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.8.0.1)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for Linux: Version 11.2.0.2.0 - Production
開始日                    08-4月 -2018 02:34:03
稼働時間                  0 日 0 時間 0 分 0 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
デフォルト・サービス           XE
パラメータ・ファイル      /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
ログ・ファイル            /u01/app/oracle/product/11.2.0/xe/log/diag/tnslsnr/tk*-***-*****/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.8.0.1)(PORT=1521)))
サービスのサマリー...
サービス"PLSExtProc"には、1件のインスタンスがあります。
  インスタンス"PLSExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
サービス"XE"には、1件のインスタンスがあります。
  インスタンス"XE"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
LSNRCTL>

“XE”のサービスが起動しました。まずはローカル(Linux)で確認します。

[root@sakura client]# sqlplus SAKURA/SAKURA@10.8.0.1:1521/xe

SQL*Plus: Release 11.2.0.2.0 Production on 日 4月 8 02:35:01 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL>
SQL> quit

接続できました。つづいてリモート(WindowsPC)で確認します。

C:\Users\******>sqlplus SAKURA/SAKURA@10.8.0.1:1521/XE

SQL*Plus: Release 11.2.0.1.0 Production on 日 4月 8 02:34:14 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL>

こちらも問題なさそうです。

ただ、なぜ急に接続できなくなったのかは、不明です。。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください