修改tnsname.ora和listener.ora后Oracle数据库服务异常
Oracle数据库监听器修改IP后服务无法注册问题
我在Windows虚拟机上安装了Oracle数据库,尝试从宿主机通过JDBC连接。由于监听器仅监听localhost,我将IP地址修改为虚拟机自身的IP(172.24.255.55),但修改tnsname.ora和listener.ora文件后,数据库服务停止,无法再进行连接。
修改后的tnsnames.ora文件
LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.255.55)(PORT = 1521)) ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.255.55)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
修改后的listener.ora文件
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\OracleApp) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\OracleApp\bin\oraclr19.dll") ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.255.55)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
修改前(HOST=localhost)的lsnrctl service输出
LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 28-MAR-2023 12:41:52 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) Services Summary... Service "39497c8ffac84c17938bc17b28d587ef" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:3 refused:0 state:ready LOCAL SERVER Service "52448234712340b69f274bcc790ecfe0" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:3 refused:0 state:ready LOCAL SERVER Service "CLRExtProc" has 1 instance(s). Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 LOCAL SERVER Service "orcl" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:3 refused:0 state:ready LOCAL SERVER Service "orclXDB" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: DESKTOP-U6PKHQ7, pid: 8072> (ADDRESS=(PROTOCOL=tcp)(HOST=DESKTOP-U6PKHQ7)(PORT=49773)) Service "orclpdb" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:3 refused:0 state:ready LOCAL SERVER The command completed successfully
修改HOST为IP地址后的lsnrctl service输出
LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 28-MAR-2023 12:46:14 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.24.255.55)(PORT=1521))) Services Summary... Service "CLRExtProc" has 1 instance(s). Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 LOCAL SERVER The command completed successfully
解决步骤
更新数据库本地监听参数
登录数据库执行以下SQL,修改并刷新监听注册:-- 查看当前监听配置 SHOW PARAMETER local_listener; -- 更新为新IP的监听地址 ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=172.24.255.55)(PORT=1521))' SCOPE=BOTH; -- 强制注册服务到监听器 ALTER SYSTEM REGISTER;重启/重载监听器
在虚拟机命令行执行:-- 先停止监听器(如果已启动) lsnrctl stop -- 启动监听器 lsnrctl start -- 或者直接重载配置(无需停止) lsnrctl reload验证端口监听状态
执行以下命令确认监听器是否在指定IP和端口上监听:netstat -ano | findstr 1521输出中应包含
172.24.255.55:1521的监听记录。检查Windows防火墙设置
确保虚拟机防火墙允许1521端口的TCP入站连接,可临时关闭防火墙测试是否恢复正常。确认hosts文件映射
打开C:\Windows\System32\drivers\etc\hosts,添加或确认以下映射:172.24.255.55 DESKTOP-U6PKHQ7重启Oracle服务
在Windows服务列表中找到OracleServiceORCL和OracleOraDB19Home1TNSListener,先停止再启动,确保配置生效。
内容的提问来源于stack exchange,提问作者ironmanAJ
相关产品推荐
相关产品推荐

