需修改listener.ora中(PORT=1521)为新端口(如1522),停监听后编辑,确保所有TCP端口同步更新,再执行lsnrctl reload并验证status;同时必须同步更新tnsnames.ora中对应服务名的PORT值,并在必要时调整数据库local_listener参数以确保动态注册成功。
怎么改
里的监听端口
oracle 默认监听 1521 端口,改它得动
,位置通常在
下。改之前先停掉监听:
,否则配置不生效。
打开
,找到
(或你自定义的监听名)段落下的
,改成目标端口,比如
。注意别只改一处——如果用了 IPC 或其他协议,
不用动,但所有
类型的
都得同步更新。
改完运行
(不是
),让监听器热加载新配置。再用
看输出里是否显示新端口,且状态是
。
常见错误:改了
没 reload,客户端连老端口还能通,新端口却连不上
常见错误:防火墙没开新端口,
直接超时
注意:Windows 上服务名可能叫
(版本/路径不同名字不同),改完配置后若监听起不来,查 Windows 事件查看器里的 Oracle 日志
tnsnames.ora 里对应的服务名怎么同步更新
是客户端连库用的,和监听端口强绑定。只要监听端口变了,这里就必须改,否则
会报
。
找到你要用的服务名段(比如
开头的部分),定位到
和
这一行,把
值换成新端口,比如从
改成
。如果
是
或
,确保数据库实例确实在本机;如果是远程地址,确认网络路由可达。
常见错误:只改了服务器端
,忘了改客户端(包括应用服务器、开发机)的
常见错误:多个环境共用同一份
,结果一个库改端口,其他库连不上了
小技巧:用
测试解析和基础连通性,它不校验用户名密码,只看网络层和监听是否响应
数据库初始化参数
什么时候要动
绝大多数单机部署不用碰
,但如果你启用了动态注册(默认开启)、或者监听名不是默认的
、或者监听端口不是 1521,数据库实例启动后可能无法自动向监听器注册服务名,导致
里看不到
,只有
状态。
这时就得进 SQL*Plus 连上库,查当前值:
。如果为空,或指向旧端口,就执行:
(把
换成你的新端口)。
必须动的情况:监听名改了(比如叫
),或监听绑定了非 localhost 的 IP
不用动的情况:监听名仍是
、端口仍是 1521、
是
或未指定(靠默认解析)
验证方式:改完等 30 秒,再跑
,看到
下有你的库名,且状态是
,才算注册成功
改完端口后应用连不上?优先排查这三处
端口一改,最常出现的是“明明配置都改了,就是连不上”。别急着重装,按顺序快速过这三处:
查监听是否真在新端口上监听:
(Linux/macOS)或
(Windows),确认有
状态行
查数据库实例是否已注册到该监听:
输出里有没有你的
,状态是不是
;如果没有,重点看
设置和监听日志(
)
查应用侧连接串:JDBC 里是
还是
?Service Name 模式(
)和 SID 模式(
)不能混用,且必须和服务名大小写、拼写完全一致
端口改动看着简单,实际卡点全在“多端同步”和“注册可见性”上。最容易被忽略的是:监听器 reload 后,数据库实例不会自动重新注册,得等下一次动态注册周期(默认60秒),或者手动触发
。
listener.oralistener.ora$oracle_home/network/admin/lsnrctl stoplistener.oraLISTENER(PORT = 1521)(PORT = 1522)(IPC = ...)TCPPORTlsnrctl reloadstartlsnrctl statusREADYlistener.oratelnet host 1522OracleOraDB21Home1TNSListenertnsnames.orasqlplus user/pass@MYDBORA-12170: TNS:Connect timeout occurredMYDB =(HOST = ...)(PORT = ...)PORT15211522HOSTlocalhost127.0.0.1listener.oratnsnames.oratnsnames.oratnsping MYDBlocal_listenerlocal_listenerLISTENERlsnrctl statusSERVICE_NAMEUNKNOWNshow parameter local_listeneralter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1522))' scope=both;1522MYLISTENERLISTENERHOSTlocalhostlsnrctl statusSERVICE_NAMEREADYnetstat -an | grep 1522netstat -ano | findstr :1522LISTENINGlsnrctl statusSERVICE_NAMEREADYlocal_listener$ORACLE_HOME/network/log/listener.logjdbc:oracle:thin:@host:1522:orcl@host:1522/MYDB/:alter system register;