Oracleのlistener.oraが手動で書き換えないと接続できなかったのでメモ
何か間違ってたら教えてください。
環境
OS:Windows10home
DB:Oracle Database 21c Express Edition for Windows x64
経緯
OracleをWindowsのローカルにインストールした。
コマンドプロンプトでsqlplusを用いた接続はできた。
DBクライアントソフト(A5:SQL Mk-2)で以下の接続情報で接続しようと試みたところ、
ORA-12541: TNS: リスナーがありません。
のポップアップエラーが出たので、
色々調べたらリスナーが起動できていないっぽい。
コマンドプロンプトでリスナーを起動しようとしたらエラー
C:\WINDOWS\system32>lsnrctl start XE
LSNRCTL for 64-bit Windows: Version 21.0.0.0.0 - Production on 31-10月-2022 09:00:42
Copyright (c) 1991, 2021, Oracle. All rights reserved.
tnslsnrを起動しています。お待ちください...
TNSLSNR for 64-bit Windows: Version 21.0.0.0.0 - Production
システム・パラメータ・ファイルはC:\app\yota\product\21c\homes\OraDB21Home1\network\admin\listener.oraです。
ログ・メッセージをC:\app\yota\product\21c\diag\tnslsnr\DESKTOP-L0H7E1R\xe\alert\log.xmlに書き込みました。
TNS-01151: LISTENER.ORAにリスナー名XEはありません。
リスナーが起動に失敗しました。前述のエラー・メッセージを参照してください...
色々調べてみると、tnsnames.oraにはデフォルトで、XEという接続文字列が用意されているが、listener.oraにはXEというリスナーが用意されていなかった。
# tnsnames.ora Network Configuration File: C:\app\yota\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-L0H7E1R.elecom)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
LISTENER_XE =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-L0H7E1R.elecom)(PORT = 1521))
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
# listener.ora Network Configuration File: C:\app\yota\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
DEFAULT_SERVICE_LISTENER = XE
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\yota\product\21c\dbhomeXE)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\yota\product\21c\dbhomeXE\bin\oraclr.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-L0H7E1R.elecom)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
自分で試したこと
listner.oraの LISTENER の部分を XE という文字列に変更して、コマンドプロンプトでXEというリスナーを以下の通り起動した。
C:\WINDOWS\system32>lsnrctl start XE
LSNRCTL for 64-bit Windows: Version 21.0.0.0.0 - Production on 31-10月-2022 09:06:59
Copyright (c) 1991, 2021, Oracle. All rights reserved.
tnslsnrを起動しています。お待ちください...
TNSLSNR for 64-bit Windows: Version 21.0.0.0.0 - Production
システム・パラメータ・ファイルはC:\app\yota\product\21c\homes\OraDB21Home1\network\admin\listener.oraです。
ログ・メッセージをC:\app\yota\product\21c\diag\tnslsnr\DESKTOP-L0H7E1R\xe\alert\log.xmlに書き込みました。
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-L0H7E1R)(PORT=1521)))
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DESKTOP-L0H7E1R.elecom)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名 XE
バージョン TNSLSNR for 64-bit Windows: Version 21.0.0.0.0 - Production
開始日 31-10月-2022 09:07:06
稼働時間 0 日 0 時間 0 分 12 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル C:\app\yota\product\21c\homes\OraDB21Home1\network\admin\listener.ora
ログ・ファイル C:\app\yota\product\21c\diag\tnslsnr\DESKTOP-L0H7E1R\xe\alert\log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-L0H7E1R)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
リスナーはサービスをサポートしていません。
コマンドは正常に終了しました。
C:\WINDOWS\system32>
A5SQLのソフトでも接続できるようになった。
listner.oraに明らかにそれっぽい
DEFAULT_SERVICE_LISTENER = XE
って記述があるけど、これ効いてないのか・・?
必ず手動で書き換えないといけないとしらたクソすぎるし、そんなわけないと思うので自分が何か間違っているんだと思う。