Oracleで「リスナーはCONNECT_DATAのSERVICE_NAMEを取得できませんでした」
Docker上で Oracle11g を動かしている。
ローカルから
$ sqlplus test@localhost:1521
とすると、以下のようなエラーが出て接続できない。
ORA-12504: TNS: リスナーはCONNECT_DATAのSERVICE_NAMEを取得できませんでした。
解決
Dockerの Oracle11g にログインして、以下のファイルをエディタで開いた。
/u01/app/oracle/oradata/dbconfig/XE/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 = 0.0.0.0)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
SID_LIST_LISTENER = と LISTENER の先頭の空白を削除したら、うまくいった。
このファイルは /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora にリンクが貼られている。
もうちょっと詳しくいうと・・・
最初に docker-compose up で Oracle11g を起動すると、ローカルから @localhost:1521 を 指定して、問題なく接続できる。
しかし、Oracle11g をシャットダウンして、docker-compose stop としてから、 docker-compose up とすると、上記のようなエラーが出て、接続できなかった。
現在は、Docker for Windows で Oracle11g を動作させ、 それに Windows10 のコマンドプロンプトから接続している。
追記 (2021.10.25)
以下のように、サービス名を明示する必要があるかもしれない。
> sqlplus system@localhost:1521/xe
Windows10で接続した場合は、XE の指定を加えれば接続できた。
カテゴリー: memo, OracleDB
タグ: listener, oracle, service_name
カウント: 466