2011年8月29日月曜日

なぜかOracleにつながらなくなったら(ORA-12514)

スズキです。

急に下記のようにOracleにつながらなくなりました。
(多分、何かはしたんだと思いますが、誰も心当たりはありません...)

$ sqlplus sys/password@localhost:1521/oracle.suz-lab.com as sysdba

SQL*Plus: Release 11.1.0.6.0 - Production on Fri Aug 26 01:50:25 2011

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

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

リスナーがOracleのサービス名(oracle.suz-lab.com)を解決できないようです。

確かにリスナーを再起動してみると、

$ lsnrctl restart
...
The listener supports no services
...

サービスは登録されてないと言われてしまいます。

このような場合、一番かんたんな解決方法は、下記のように"listener.ora"に静的に
サービス名に関する記述をしてしまうことです。
(本来なら動的に登録されるはずですが...)

LISTENER =
    (DESCRIPTION_LIST =
        (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
    )
SID_LIST_LISTENER =
    (SID_LIST =
        (SID_DESC =
            (GLOBAL_DBNAME = oracle.suz-lab.com)
            (ORACLE_HOME   = /u01/app/oracle/product/11.1.0/db_1)
            (SID_NAME      = oracle)
        )
    )

この状態で再度リスナーを再起動すると、
下記のようにサービスが登録されていることを確認することができます。

$ lsnrctl start
...
Service "oracle.suz-lab.com" has 1 instance(s).
Instance "oracle", status UNKNOWN, has 1 handler(s) for this service...
...

そして、最初と同じようにOracleに接続すると、今度は無事接続できることが確認できます。

$ sqlplus sys/password@localhost:1521/oracle.suz-lab.com as sysdba

SQL*Plus: Release 11.1.0.6.0 - Production on Fri Aug 26 02:01:19 2011

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

本来なら自動登録ができてない理由を調査しないといけないんだけど、時間がないので...
--------
http://www.suz-lab.com

0 コメント: