SQL Developer 18.4 解压版 JDK 配置与连接排错

发布时间:2026/11/5 2:12:48
SQL Developer 18.4 解压版 JDK 配置与连接排错

简介:SQL Developer 18.4.0 是一款面向数据库管理员、开发人员与数据分析师的可视化数据库管理工具,基于 Oracle 官方发行包封装,可帮助读者在 Windows 平台完成 SQL 编写调试、对象浏览、数据迁移与性能优化等工作。压缩包为 x64 版本,共 2000 个文件,约 428.22MB,包含 jar 程序库、xml 配置、html 帮助文档、sql 示例脚本、xslt 样式表以及 dll/exe 运行组件等,覆盖工具运行、文档查阅与扩展支持所需的主要文件形态。已有 518 人学习下载,适合需要上手 Oracle/MySQL 管理或补齐可视化操作能力的中初级读者,也便于开发人员理解数据库对象与查询逻辑。工具提供查询编辑器、结果集表格与图表视图,并集成对象浏览器、CSV/Excel 导入导出、Git/Subversion 协作和 SQL Tuning Advisor 等能力,可帮助读者快速理解数据库结构、验证查询结果并定位性能瓶颈,同时保留插件扩展与界面定制空间。

1. 解压版 SQL Developer 18.4:看着是绿色包,真正卡人的是 JDK

sqldeveloper-18.4.0-376.1900-x64.zip这个名字很容易让人放松警惕——zip 包、解压即用、没有下一步下一步的安装向导,看着就是个绿色软件。真到现场,第一次双击sqldeveloper.exe就会遇到问题:要么弹出找不到 Java 虚拟机的对话框,要么窗口闪一下就消失得无影无踪,连报错都来不及看。sql 可视化工具里,SQL Developer 属于配置依赖最深的工具之一,JDK 版本、配置文件位置、JDBC 驱动这三块只要有任意一块出错,它都会拒绝启动或连接数据库。这篇文章按一条完整安装路线记录:18.4 这个包该解压到哪里、product.conf里那行SetJavaHome怎么写、连接 11g 和 19c 时驱动怎么取舍、启动失败后去哪里看线索。手上正卡在安装环节上的开发者可以照着走一遍,已经装过几个版本、想弄清楚参数该怎么改的人也能看到差异点。

2. 解压与位置:18.4 的 x64 包到底带不带 JDK

2.1 三个 Windows 包的差别,选错就白折腾

同样一个 18.4.0.376.1900 版本号,Windows 上流通着几种不同的压缩包,标题里这个-x64结尾的包,是自带 JDK 8 的那一个。这一点必须先确认,因为它决定了后面要不要额外安装 Java、要不要在product.conf里手动指定路径。

包名是否自带 JDK适用场景备注
sqldeveloper-18.4.0.376.1900-x64.zip带,解压后同级有jdk目录干净机器、临时排查库、不想动系统 Java体积明显更大,属于完整的 Windows 64 位包
sqldeveloper-18.4.0.376.1900-no-jre.zip不带机器上已有统一管理的 JDK 8体积小,启动时强制要求你指定 JDK
sqldeveloper-18.4.0.376.1900.zip不带,跨平台Linux / macOS 或需要自己管 JDK通用包,靠SetJavaHome指路

这里有一个反直觉的点,我遇到过不止一次:机器上已经装了 JDK 17,觉得“版本更高肯定兼容”,就把SetJavaHome指过去,结果是窗口一闪、日志里出现一行笼统的异常,界面根本不会出现。18.4 是 2018 年的产物,运行在 JDK 8 上,JDK 11 及以后的支持要往后好几个版本才有。所以对标题里这个包最省事的用法就是:不要理机器上那套新 JDK,让它使用包里自带的jdk目录,两者分开管理,互不干扰。

如果你的场景是“公司里所有机器统一由运维下发 JDK 8”,那就换成no-jre包,把 JDK 路径写进配置,后续升级工具版本时不用重复下载那份 JDK。这两种选法没有对错,只有谁负责管理 Java 的问题。

2.2 解压路径:三个不要,踩过就知道疼

解压本身没技术含量,位置有讲究。三个不要:不要放在C:\Program Files下、路径里不要出现中文、不要出现空格。前两个是权限和编码问题,第三个是product.conf的解析问题——那行SetJavaHome对带空格的路径处理得不干净,加引号不认、不加引号截断,最后表现为“明明路径是对的,就是启动不了”。

# 目标:盘符根目录下、全英文、无空格的一级目录 Expand-Archive -Path "D:\download\sqldeveloper-18.4.0-376.1900-x64.zip" -DestinationPath "D:\" # 解压完先做两个存在性检查,比直接双击靠谱 Test-Path "D:\sqldeveloper\sqldeveloper.exe" # 主程序入口 Test-Path "D:\sqldeveloper\jdk\bin\java.exe" # 自带的 JDK 8

第一行是 PowerShell 的解压命令,-DestinationPath "D:\"会把压缩包里的顶层目录sqldeveloper直接展开到 D 盘根目录,最终得到D:\sqldeveloper\...。如果你习惯用第三方解压工具,注意不要勾“解压到 sqldeveloper-18.4.0-376.1900-x64\”这类自动套一层的选项,否则路径会变成D:\sqldeveloper-18.4.0-376.1900-x64\sqldeveloper\bin\...,后面配 JDK 路径时容易少写一层。

后两行是检查点。sqldeveloper.exe在解压目录的第一层,不在bin下面,这是很多人第一次找不到入口的原因;jdk\bin\java.exe存在则说明拿到的是带 JDK 的包。两条都返回True再往下走,有一条False就先解决包的问题,别急着启动。

提示:D:\sqldeveloper这个目录建议当成“可随时删掉重来”的目录。配置不放在这里,删了不会丢连接信息,后面会讲配置实际落在哪。

2.3 首次启动:两个对话框和一次慢启动

双击sqldeveloper.exe之后,正常情况会依次遇到两个对话框。第一个是“迁移设置”,问要不要从旧版本的 SQL Developer 导入首选项和连接配置;第二个(只有no-jre包才会出现)是让指定 Java 的安装位置。带 JDK 的包跳过第二个。

迁移对话框我一般选“否”。原因很实际:旧版本留下的首选项里可能带着已经失效的SetJavaHome、老版本的字体设置、指向旧路径的第三方驱动配置,迁移过来之后排查启动问题会多一层干扰。连接信息本来就在%APPDATA%\sqldeveloper\下面按版本分目录存放,真要复用,后面手动导一次连接更干净。选“是”也不是不能用,只是出问题时你会分不清是新装的锅还是旧配置的锅。

首次启动会明显慢,几十秒甚至更久都算正常,它要创建%APPDATA%\sqldeveloper\18.4.0\这个用户配置目录、初始化一堆首选项文件。这个阶段黑屏、任务管理器里java.exe占着 CPU,都属于正常现象,别急着强制结束。启动完成后再做一件事:确认它用的到底是不是自带那套 JDK。

# 直接问压缩包里那个 java 是什么版本,绕开系统 PATH "D:\sqldeveloper\jdk\bin\java.exe" -version # 期望输出类似: # java version "1.8.0_181" # Java(TM) SE Runtime Environment (build 1.8.0_181-b13)

用绝对路径调用,不依赖PATH,这样得到的才是包里那份 JDK 的真实版本,而不是系统里那套。输出里只要出现1.8.0_xxx,说明这个包的 JDK 是完整的,后面SetJavaHome就指到这个目录。如果这里报“不是内部或外部命令”或者文件不存在,说明解压不完整,重新解压一次比反复调试省时间。

3. 启动参数与 JDK 指定:product.conf 是唯一的补救办法

3.1 SetJavaHome:一行配置,四种写错的方式

18.4 的 JDK 路径实际落在两个文件里,作用范围不一样,搞清楚这个区别能省很多事。

文件位置作用范围重装/升级是否保留
product.conf%APPDATA%\sqldeveloper\18.4.0\product.conf当前 Windows 用户保留,删软件不影响
sqldeveloper.confD:\sqldeveloper\bin\sqldeveloper.conf整个安装目录不保留,重解压就没了
连接配置%APPDATA%\sqldeveloper\system<版本>\o.jdeveloper.db.connection\当前用户保留

用户级的product.conf是首选,改它不影响别人,工具重装也不丢。文件里可能已经有一行被注释掉的#SetJavaHome,把注释去掉、填上路径即可。

# %APPDATA%\sqldeveloper\18.4.0\product.conf # 指向 JDK 根目录,不是 bin,不是 jre SetJavaHome D:\sqldeveloper\jdk # 用正斜杠等价,两者都认 # SetJavaHome D:/sqldeveloper/jdk # 错误写法一:指到 bin # SetJavaHome D:\sqldeveloper\jdk\bin # 错误写法二:指到 jre # SetJavaHome D:\sqldeveloper\jdk\jre # 错误写法三:加引号(含空格路径时最常见的错) # SetJavaHome "C:\Program Files\Java\jdk1.8.0_181" # 错误写法四:行尾带分号或多余空格 # SetJavaHome D:\sqldeveloper\jdk;

SetJavaHome后面跟的是 JDK 的根目录,这个目录下必须同时有bin和jre两个子目录。指到bin会报找不到虚拟机;指到jre会报缺少编译器相关的类,工具虽然能启动一部分,但用一会儿就出问题。加引号在某些版本上会连着引号一起当路径解析,所以路径里一旦有空格基本无解——这才是前面强调解压到无空格目录的真正原因,不是因为路径好看。

改完保存,彻底退出再启动(任务管理器里确认没有残留的java.exe)。验证方式是菜单里的“帮助 → 关于”,里面会写明当前使用的 Java 版本和供应商。如果这里显示的版本号和你写的不一致,说明product.conf没生效,常见原因是改错了版本目录——%APPDATA%\sqldeveloper\下面可能同时有17.4.0、18.4.0好几个目录,改错了等于没改。

注意:product.conf是纯文本,编码必须是 ANSI 或 UTF-8 无 BOM。用记事本另存为 UTF-8 带 BOM 之后,第一行会被解析成一个乱码参数,表现为启动直接失败且没有明显提示。

3.2 JVM 参数:Xmx、时区和文件编码,这三个必须动

安装目录下的sqldeveloper.conf是管 JVM 参数的地方。默认堆内存对这个工具来说偏小,随便查一张大表、或者把几万行结果导出成 CSV,就可能卡死甚至抛出内存溢出。我一般在新装完的第一时间就把这几行加上。

# D:\sqldeveloper\bin\sqldeveloper.conf # 起始堆,别设太大,冷启动会变慢 AddVMOption -Xms256M # 最大堆,导出大结果集的关键;8G 内存机器给 2048M 比较稳 AddVMOption -Xmx2048M # 关掉 JDBC 驱动的时区区域解析,专治 ORA-01882 AddVMOption -Doracle.jdbc.timezoneAsRegion=false # 界面语言与区域,避免部分对话框出现英文混排 AddVMOption -Duser.language=zh AddVMOption -Duser.country=CN # 导出文件与剪贴板的默认编码 AddVMOption -Dfile.encoding=UTF-8

逐条说清为什么这么写。-Xms256M是初始堆,设太大会拖慢每次启动,256M 够用;-Xmx2048M是上限,原来默认值通常只有 640M 上下,一旦结果集超过这个规模,数据网格滚动时就会卡住,导出时直接抛OutOfMemoryError。给到 2048M 需要机器有足够空闲内存,同时开着几个 IDE 的机器给 1536M 更现实。

-Doracle.jdbc.timezoneAsRegion=false是这条清单里最值钱的一行。某些服务端时区和客户端 JVM 时区对不上时,连接会直接报ORA-01882: timezone region not found,这个错误看起来像是数据库的问题,实际是驱动在解析时区名时失败了。加这个参数让驱动改用偏移量,不查时区表,问题消失。

-Duser.language和-Duser.country影响菜单语言的回退顺序,某些 18.4 的发行包在纯英文环境下会出现中文和英文混排,加上这两行能稳定下来。-Dfile.encoding=UTF-8管的是导出文件和复制到剪贴板时的编码,不加的话在 Windows 默认 GBK 环境下导出的 CSV 换个编辑器打开就是乱码。

这些参数也可以写进product.conf,格式一样用AddVMOption。区别在于sqldeveloper.conf属于安装目录,重新解压就丢;product.conf属于用户,跟着人走。我的习惯是:内存和时区这类跟机器相关的写sqldeveloper.conf,界面语言、编码这类跟人相关的写product.conf。改完同样要彻底退出再启动才生效。

3.3 中文显示、DPI 缩放和编辑器设置

有一类说法是“装完先设NLS_LANG,不然中文乱码”。这个说法对 sqlplus 之类的 OCI 客户端成立,对 SQL Developer 不太成立——它是纯 JDBC 客户端,不走 OCI,NLS_LANG对它的影响很有限。真正决定中文能不能正常显示的是字体和file.encoding。

数据网格里中文变成方块,去首选项里把字体换成“微软雅黑”或者任何一款 CJK 等宽字体,重启生效。代码编辑器里的中文注释宽度错乱,是字体不含等宽中文字形,换字体同样能解决。这两个问题在 18.4 上出现频率不低,尤其是从英文系统镜像装出来的机器。

高分辨率屏幕下界面发虚是另一个常见抱怨。JDK 8 不支持sun.java2d.uiScale这类参数(那是 JDK 9 以后的事),所以在 18.4 上正确的做法是走 Windows 的兼容性设置:右键sqldeveloper.exe→ 属性 → 兼容性 → 更改高 DPI 设置 → 勾选“替代高 DPI 缩放行为”,下拉选“系统”。这样界面会按系统缩放比例整体放大,字虽然不细腻,但至少不模糊、不重叠。选“系统(增强)”在部分机器上会让工具栏图标错位,我不建议。

编辑器还有几个我会顺手改的:显示行号、开启自动换行、把“连接”超时从默认值调短一点。18.4 默认的连接超时偏长,遇到网络不通的主机时会卡在那里很久,调到 15 秒左右体验好得多。这些都在首选项里,属于装完顺手做掉的收尾动作。

4. 建立连接:监听、服务名和驱动

4.1 Basic、TNS、高级:三种连法的取舍

新建连接的对话框里,连接类型下拉有三四个选项,很多人随手选第一个,然后在“SID”和“服务名”之间反复试错。

连接类型填什么什么时候用常见误用
Basic主机名、端口、SID 或服务名绝大多数单实例库12c 以后仍按 SID 填,报 ORA-12514
TNS网络别名,来自tnsnames.ora已有现成别名、RAC、多地址没配 TNS 目录,下拉框是空的
高级直接手写 JDBC URL需要特殊参数、走服务名带参数URL 格式写错,前缀漏写//

SID 和服务名是两码事。SID 是实例名,服务名是注册到监听上的服务,12c 之后一个库往往注册了多个服务名(比如 PDB 各自一个),这时候用 SID 连不上是正常的。判断方法很简单:能连上的同事问一句他填的是哪个;或者让 DBA 在库里跑一句select name from v$database;(SID)和select name from v$services;(服务名)对一下。

TNS 方式要先告诉工具tnsnames.ora在哪:首选项 → 数据库 → 高级 → Tnsnames 目录,指到那个文件所在的文件夹(不是文件本身)。指错这一层,连接类型选 TNS 时别名下拉框就是空的,很多人以为是工具坏了。

“高级”方式本质就是自己拼 JDBC URL,格式务必记准:

# 走服务名(推荐,12c 之后基本都用这个) jdbc:oracle:thin:@//192.168.10.20:1521/ORCLPDB1 # 走 SID(老库、单实例) jdbc:oracle:thin:@192.168.10.20:1521:ORCL # 走 TNS 别名,前提是 TNS 目录已配好 jdbc:oracle:thin:@MYDB_ALIAS

三种写法的差异就两处:服务名用@//主机:端口/服务名,注意双斜杠和斜杠;SID 用@主机:端口:SID,注意冒号且没有双斜杠。第三个依赖 TNS 配置。写错这两处之一,表现都是连接超时或监听不认识服务,跟网络问题的报错长得很像,容易往错误方向排查。

4.2 驱动取舍:ojdbc8 能不能连你的老库

18.4 自带的是ojdbc8.jar,放在D:\sqldeveloper\jdbc\lib\下面。连 12c、18c、19c 没问题,连 11.2.0.4 通常也没问题。会出问题的是更老的库,比如 11.2.0.1 或者 10g,这时候可能报ORA-28040: No matching authentication protocol——这个错误名字看着像密码问题,实际是认证协议版本不匹配,属于驱动太新的典型症状。

换驱动的入口在首选项 → 数据库 → 高级 → 勾选“使用第三方 JDBC 驱动程序”,然后指定一个外部 jar 的完整路径。常见做法是找一个ojdbc6.jar放进去,重启后重新连接。这里有个前提:ojdbc6.jar是给 JDK 6/7 编译的,跑在 JDK 8 上没问题;别拿ojdbc14.jar这种更老的东西硬套,类加载会失败。

反过来,如果连的是 19c 且用到了较新的特性,也别急着换驱动,18.4 自带的ojdbc8已经够用。真正需要动驱动的情况只有一种:报错信息明确指向认证协议或者不支持的字符集。其他报错先去查监听和服务名,别一上来就换 jar。

4.3 连接参数表与连通性验证顺序

新建连接时值得逐项确认的参数就这些,剩下的大多可以留默认。

参数典型值说明
主机名IP 或域名别填localhost除非库真在本机
端口1521改过监听端口的企业环境不少见
SID / 服务名ORCL/ORCLPDB1二选一,选错必报 12514
用户名业务账号除非建库,别用 SYS
角色默认选 SYSDBA 会以特权方式连,容易误操作
保存密码按需共享机器上慎用

连接前先做两步网络侧确认,比在工具里反复点“测试”高效得多。第一步确认端口通不通,第二步确认监听认不认这个服务名。

# 1. 端口连通性,Windows 上用 Test-NetConnection 代替 telnet Test-NetConnection -ComputerName 192.168.10.20 -Port 1521 # 2. 监听上注册了哪些服务(需要目标机上有可用的监听控制工具) lsnrctl status

第一条返回TcpTestSucceeded : True才说明网络层没问题,False就别在 SQL Developer 里折腾了,先找网络或防火墙。第二条的输出里会列出监听认识的服务名,逐个和你要填的对比,能一次性排掉大部分ORA-12514。

两步都过了,在工具里点“测试”,状态显示“成功”之后,别急着关对话框,直接开一个 SQL 工作表跑两句:

-- 确认连的是哪个实例、哪个用户 select instance_name, host_name from v$instance; select sys_context('userenv', 'sid') as sid, sys_context('userenv', 'current_schema') as schema from dual; -- 确认字符集,排查乱码时用得上 select parameter, value from nls_database_parameters where parameter in ('NLS_CHARACTERSET', 'NLS_LANGUAGE');

第一句要v$instance的读权限,普通业务账号可能没有,报ORA-00942不代表连接有问题,换成第二句就行。第二句一定能跑,返回的 SID 和 schema 跟你填的对得上,说明连接是真的通了,不是“测试”按钮的假成功。第三句查库的字符集,ZHS16GBK和AL32UTF8在处理中文时行为不同,后面导出乱码要回头看这个值。

5. 避坑与排查:18.4 上最容易翻车的五个点

5.1 双击没反应,或弹“找不到 Java 虚拟机”

现象:双击sqldeveloper.exe后窗口闪一下就没了,或者弹出对话框说无法定位 Java 虚拟机,点确定后退出。

原因:product.conf里的SetJavaHome路径错了、被注释掉了,或者指到了bin、jre;也有一种情况是路径里有空格导致解析截断。

解决:先把%APPDATA%\sqldeveloper\18.4.0\product.conf里的那行改成指向无空格路径下的 JDK 根目录,确认目录下同时有bin和jre。还不能启动就把product.conf临时改名,让它回到“首次启动”状态重新问一次路径,能启动说明问题就出在那行配置上。

5.2 界面正常,一连库就报 ORA-01882

现象:工具能开,连接建立到一半失败,报ORA-01882: timezone region not found。

原因:JDBC 驱动在解析服务端返回的时区名时,本机 JVM 的时区库里找不到对应条目,常见于服务端时区是冷门区域、或者客户端 JDK 的时区数据较旧。

解决:在sqldeveloper.conf里加AddVMOption -Doracle.jdbc.timezoneAsRegion=false,让驱动用偏移量而不是区域名。改完彻底退出重启。这一条对 18.4 基本一次生效,不需要动数据库参数。

5.3 连 12c/19c 报 ORA-12514

现象:网络能通、端口能通,连接时提示监听不认识请求的服务。

原因:连接类型选了 Basic,但把服务名填进了 SID 位置,或者反过来。12c 之后多租户环境下 PDB 只注册服务名,用 SID 必然连不上。

解决:确认要连的库到底是 SID 还是服务名,在lsnrctl status输出里对一遍。要么在连接属性里切到“服务名”单选,要么用高级方式的jdbc:oracle:thin:@//主机:端口/服务名。

5.4 导出大表时卡死或内存溢出

现象:查询几万行的结果集时界面卡住,导出 CSV 走到一半抛OutOfMemoryError,任务管理器里java.exe内存飙到上限。

原因:默认堆太小,数据网格会把结果集缓存在内存里,导出时还会再复制一份。

解决:-Xmx调到 2048M(机器内存紧张就给 1536M),重启工具。数据量确实大,就别在数据网格里全量拉,改用“导出 → 数据库”里的导出向导,或者加where rownum <= 100000分批取。顺便把数据网格的“数组提取大小”调大一点,能减少往返次数。

5.5 升级机器后启动白屏或界面错乱

现象:同一份解压包,在老机器上好好的,换到新装的开发机上白屏、工具栏图标错位、文字发虚。

原因:新机器上默认 JDK 是 11 或 17,如果product.conf里指了过去,18.4 起不来或者起来了但界面渲染异常;另一个原因是高 DPI 缩放。

解决:先确认“帮助 → 关于”里的 Java 版本是不是 1.8,不是就改回包里自带的 JDK。确认是 1.8 还发虚,就走兼容性设置里的“替代高 DPI 缩放行为 → 系统”。不要试图用 JDK 9+ 的新参数去修 JDK 8 的显示问题,方向就错了。

6. 装完怎么验证:一次从连库到导出的自检

装完能双击打开,只是“启动成功”,不等于“安装成功”。我的习惯是走一遍固定清单,每一步都有明确通过标准,任何一步不过就停下来解决,别拖到后面干活时才发现。

检查项操作位置通过标准
JDK 版本帮助 → 关于Java 版本为 1.8.0_xxx,不是 11/17
配置落位关闭工具后重开首选项里的自定义项仍在,说明写进了product.conf
连接一新建连接 → 测试状态“成功”,且 SQL 工作表能跑select 1 from dual
连接二同上,换 SID/服务名另一种两种方式至少各通一条,便于以后换库
中文显示查询带中文的表数据网格中文正常,无方块
导出右键结果集 → 导出 CSV十万行导出完成,文件用编辑器打开中文正常
冷启动关掉后等 10 秒再开三次连续启动都不闪退

表格里的“连接二”是我吃过亏之后加的。有次只验证了服务名方式,去客户现场那个库只认 SID,当场重来一遍配置。从那以后我每次装完都建两条连接,一条服务名、一条 SID,能用哪条用哪条,也算给自己留个备用。

导出的验证容易被跳过,但它是唯一能把堆内存、编码、驱动三件事一次性串起来测的操作。做法很土:建一张临时表塞十万行,或者直接对一张业务表加rownum <= 100000限制,走“导出 → 数据”选 CSV,计时看它跑多久。堆给到 2048M 的情况下,十万行在普通笔记本上几十秒内应该完成;如果中途内存溢出,说明-Xmx没生效,回头看是不是改错了sqldeveloper.conf的路径。导完务必用另一款编辑器打开确认中文,file.encoding那行加没加,这时候最明显。

最后一项冷启动值得单独拿出来说。有些配置问题只在第一次能蒙混过去,比如product.conf写得有问题时,工具会用内存里的默认值先跑起来,重启才暴露。连着开关三次,每次确认“帮助 → 关于”里的 Java 路径和堆上限都对得上,才算真正稳定。堆上限可以在“帮助 → 关于 → 信息”里看到-Xmx的值,或者直接在 SQL 工作表里select 1之前跑一句System.getProperty("java.class.path")之类的诊断,嫌麻烦就看首选项里显示的内存数值。

从那以后我每次装这类解压版工具,都强制自己走一遍“版本 → 路径 → 参数 → 连接 → 导出 → 冷启动”这条链,一次不超过二十分钟,但省下的排查时间远不止这些。这份sqldeveloper-18.4.0-376.1900-x64.zip按上面的路径解压、按第三部分配好两处配置,剩下的就是连库干活了,希望帮到你。

本文还有配套的精品资源,点击获取