急に下記のように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