SQL Developer调试遇ORA-12535超时,需开放4000端口吗?
关于SQL Developer调试ORA-12535及4000端口的问题解答
先直接给结论:不是必须开放4000端口,问题出在你当前的调试配置和实际使用的调试模式不匹配,下面详细拆解:
先搞懂两种调试模式的端口逻辑
SQL Developer调试PL/SQL有两种核心模式,对应完全不同的端口要求:
- JDWP模式(默认推荐):这就是你看到的
CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '10.50.10.117', '62378' )这类语句对应的模式。它不需要4000端口,而是使用随机生成的端口(比如你的62378、62388),原理是数据库服务器主动发起连接回SQL Developer所在的客户端机器的这些随机端口。 - 旧版调试协议模式:当你添加
AddVMOption -DDatabaseDebuggerDisableJDWP=true时,就强制启用了这种旧模式,它才需要开放4000端口(客户端和数据库服务器之间的双向通信),依赖DBMS_DEBUG包而非JDWP。
你的当前问题根源
你加了禁用JDWP的配置,但调试会话却在生成JDWP的连接调用,这就导致了模式冲突:
SQL Developer被配置成要用旧模式(需要4000端口),但实际调试时却在尝试触发JDWP连接,两边不匹配,自然出现ORA-12535超时错误。
针对性解决方案
你有两个选择,二选一即可:
选择1:继续使用JDWP模式(推荐,更稳定)
- 删掉
sqldeveloper.conf里的AddVMOption -DDatabaseDebuggerDisableJDWP=true这行配置,重启SQL Developer。 - 确保你的网络环境允许数据库服务器访问SQL Developer所在机器的随机端口(比如62378、62388这类):
- 检查客户端机器的防火墙,放开这些随机端口的入站规则;
- 检查数据库服务器端的防火墙,放开对客户端IP这些端口的出站规则;
- 可以在数据库服务器上执行
telnet 10.50.10.117 62378测试连通性,能通就说明网络没问题。
选择2:坚持使用旧版调试协议模式
- 保留
-DDatabaseDebuggerDisableJDWP=true配置,同时必须开放4000端口的双向通信(客户端↔数据库服务器)。 - 确保数据库端给你的用户授予了
DBMS_DEBUG包的执行权限,比如执行:GRANT EXECUTE ON DBMS_DEBUG TO your_username; - 在SQL Developer的调试设置里确认已经切换到旧模式(路径:
Tools → Preferences → Debugger,检查相关选项是否指向旧协议)。
额外排查点
ORA-12535本质是网络超时,所以不管选哪种模式,都要先确认对应端口的网络连通性:
- 用
ping测试客户端和数据库服务器的基础连通性; - 用
nc -zv <目标IP> <端口>(Linux)或Test-NetConnection <目标IP> -Port <端口>(Windows PowerShell)测试端口是否能正常访问。
内容的提问来源于stack exchange,提问作者Carlota
相关产品推荐
相关产品推荐

