简介:PLSQL Developer是Oracle数据库开发与管理场景中常用的集成开发环境(IDE),面向数据库管理员、开发人员及需要频繁编写PL/SQL代码的运维工程师。该工具以中文界面和简洁操作为特色,旨在帮助用户完成从数据库连接、对象管理到SQL调试和性能优化的全流程工作。压缩包体积为19.05MB,便于快速下载部署;已有190人学习下载,内容覆盖工具核心能力,包括本地或远程数据库连接、多种身份验证方式,以及表、视图、存储过程、触发器、索引等对象的可视化编辑。编辑器提供语法高亮、自动完成与代码片段,可显著提升编码效率;同时具备断点调试、单步执行、变量监视等功能,便于定位PL/SQL错误。此外还集成了SVN/Git版本控制、数据导入导出、SQL分析器与Explain Plan执行计划查看,适合团队协作与SQL调优,整份资源适合Oracle初学者快速上手,也能作为资深开发者的日常效率工具。 在Oracle数据库这个圈子里混得久了,电脑上最后留下的日常工具其实就那么几样,而PLSQL Developer绝对是排在最前面的那个老伙计。它是荷兰Allround Automations公司做的一款Oracle数据库图形化开发客户端,Windows上跑得特别顺,几乎所有和Oracle打交道的人都绕不开它。这篇文章我就以一个用了十几年的老用户身份,把安装配置、局域网连接、字符集、定时任务、常见报错这些东西一次讲透,新手照着操作就能跑通,老手也能翻到几个平时没注意的小技巧。
1. 先搞清楚这工具到底解决什么问题
1.1 一个Oracle数据库的“图形化工作台”
很多人第一次接触到PLSQL Developer,是因为被命令行折磨过。Oracle自带的SQL*Plus能执行SQL,但想要看清表结构、查某个存储过程、看SQL执行计划,纯用命令行体验确实很费劲。PLSQL Developer解决的问题,就是把这些高频操作全部图形化:左侧对象浏览器直接看表、视图、索引、存储过程、包、序列、用户、DBLINK;中间区域可以同时开多个SQL窗口,写SQL有自动补全;调试存储过程还能断点、单步、看变量;窗口下方一键看执行计划;导入导出、定时任务也有独立界面。
日常做Oracle开发、运维、数据修复、性能诊断,这个工具基本全覆盖。我当年从一个只会写SELECT的小白,到后来独立负责一套核心系统,很大程度就是靠这个工具一点点练起来的。
1.2 哪些人最适合读这篇经验
如果你属于下面这几类人,这篇文章正好帮你扫清障碍:
- 后端开发:Java、.NET、Python项目连Oracle,每天都在写SQL、调存储过程。
- DBA和运维人员:查会话、看锁、导数据、调慢SQL,日常基本离不开它。
- 数据分析取数人员:业务库就是Oracle,写完SQL直接在这里看结果。
- 学生和刚入门的新手:装完工具不知道怎么连库、乱码、报错,翻这篇就行。
无论你是哪一种,安装配置、连接数据库、字符集、权限和定时任务都是高频需求,后面几个章节会逐一拆开讲。
2. 安装和新手配置:最容易翻车的三个点
2.1 选版本别贪新,先看配套的Oracle客户端
PLSQL Developer的版本从14、15到16一直在迭代,新版本界面更现代,对高分屏支持也好。但选择版本的核心原则不是“越新越好”,而是要和你的Oracle客户端位数保持一致。
这里有个背景:PLSQL Developer只是一个外壳,真正负责连接Oracle数据库的是Oracle客户端提供的OCI接口,也就是oci.dll。你电脑上如果没有Oracle客户端,光装这个工具是连不上库的。常见的解决方案有两种:一是你本机本身就装了Oracle数据库,比如开发环境装的是Oracle Database Express Edition,那客户端就跟着有了;二是电脑上没装数据库,那就去Oracle官网下载Instant Client,解压即用,选Basic包就够,不需要额外装SQL*Plus扩展。
位数方面,32位和64位必须一致。你下载了64位的Instant Client,PLSQL Developer也要装64位;老环境很多还是32位,就统一换成32位。这个细节一旦没对上,等着你的就是启动时报“Could not load oci.dll”。
2.2 oci.dll、环境变量、字符集的前因后果
第一次打开PLSQL Developer,最崩溃的报错就是“Could not load oci.dll”。原因一句话就能说清:工具找不到Oracle客户端的dll文件。处理分两步:
第一步,确认oci.dll确实存在。比如你解压Instant Client到D:\oracle\instantclient_19_12,里面应该有oci.dll文件。
第二步,在PLSQL Developer里指定OCI库路径。打开Tools(工具)> Preferences(首选项)> Oracle > Connection,在“OCI library”一栏填上oci.dll的完整路径,比如D:\oracle\instantclient_19_12\oci.dll,重启工具生效。
同时,建议把几个系统环境变量配好,否则后面还会遇到一堆莫名其妙的问题:
- ORACLE_HOME:指向Instant Client解压目录。
- TNS_ADMIN:指向tnsnames.ora所在目录。如果你有专门的网络配置目录,这里就指到那个目录。
- NLS_LANG:设置数据库连接字符集,中文环境常用SIMPLIFIED CHINESE_CHINA.ZHS16GBK或AL32UTF8,具体以数据库服务端为准。
- PATH:把Instant Client目录加进去,避免其他命令行工具调用时报错。
Windows下就是在系统属性里点“环境变量”,新增或修改以上变量。改完记得重新打开终端或工具再验证。
2.3 界面语言改中文和登录前的自检清单
不少朋友装上以后发现是全英文界面,其实不用另外找汉化包。打开Tools > Preferences > User Interface > Language,选择Chinese,重启就是中文界面。新版PLSQL Developer 15、16对高分屏的渲染也做了优化,如果界面还是模糊,右键快捷方式,在兼容性里勾选“替代高DPI缩放行为”就行。
登录之前,多花两分钟做个自检,能省掉后面一大半的报错排查时间:
- 确认Oracle数据库服务已启动。Windows下叫OracleService加SID,比如OracleServiceORCL。
- 确认监听器已启动。服务器上执行lsnrctl status可以查看监听状态。
- 用连接串在cmd里执行tnsping命令,确认网络和解析都通。
- 在数据库服务器本地用SQL*Plus登录一次,确认账号密码没问题。
这四步过了,打开PLSQL Developer填用户名密码,基本一次成功。
3. 连接Oracle库:本地和局域网一次配明白
3.1 tnsnames.ora里的连接串长什么样
PLSQL Developer登录界面有一个数据库下拉框,里面的内容就是读取tnsnames.ora得到的。如果你打开工具发现下拉是空的,多半是TNS_ADMIN环境变量没配,或者文件里没有对应连接串。
一个最简单的连接串,比如连接另一台机器192.168.1.100上的orcl库:
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )把这段保存到tnsnames.ora,重启工具,下拉框就会出现ORCL这个连接名。注意,括号、逗号、缩进都不能错,少一个括号就会报ORA-12154。
还要区分两个概念:SID是实例名,SERVICE_NAME是服务名。现在的Oracle默认使用服务名,连接串里写SERVICE_NAME = orcl,数据库那边也要真的注册了这个服务。单实例环境两者经常一样,但到了RAC或容灾环境,必须用SERVICE_NAME才能正确路由。
3.2 连接局域网其他机器的Oracle,三个必查项
“如何连接局域网其他机器的Oracle数据库”这个问题出现的频率极高。本地连得通,局域网连不通,原因通常集中在三个地方。
第一,数据库服务器上的监听器有没有启动。在服务器cmd里执行lsnrctl status,看监听是否在运行,服务列表里有没有orcl。很多刚装好的库监听根本没启动,远程自然是连不上的。启动方式就是lsnrctl start。
第二,网络和防火墙。先在客户端机器上ping一下数据库服务器IP,通了之后执行telnet 192.168.1.100 1521,看1521端口通不通。Windows默认可能没装Telnet客户端,去“启用或关闭Windows功能”里勾选即可。不通的话,去服务器Windows防火墙放行1521端口,或者放行Oracle服务进程。
第三,listener.ora里的监听地址。默认listener.ora经常写的是HOST = localhost,这样本机能连,但局域网其他机器根本连不上,必须改成数据库服务器的实际IP,改完重启监听。命令是lsnrctl stop,再lsnrctl start。
另外还有一个容易被忽略的:数据库有没有注册进监听。动态注册需要实例在启动时上报服务名,如果监听器先启动、数据库后启动,有时会等一会儿才注册上。实在不行,可以在listener.ora里手工写静态注册。
3.3 Normal、Sysdba和数据库版本那点事
登录窗口的身份下拉栏有三个选项:Normal、Sysdba、Sysoper。Normal就是普通账号,日常开发、查询、增删改都走这个;Sysdba是数据库管理员权限,能做启动关闭、备份恢复等高权限操作;Sysoper是操作员权限,介于两者之间。普通账号想用Sysdba登录,前提是账号本身被授予了SYSDBA权限,否则会报ORA-01031 insufficient privileges。
日常开发千万别动不动就用Sysdba连生产库,误操作的概率太高,这是DBA最忌讳的操作习惯。最好一个普通开发账号只做属于它权限范围的事。
顺带提一下有朋友搜索过“evaluation developer和express版developer和enterprise”的问题,这说的是Oracle数据库本身的版本,和PLSQL Developer工具没关系。简单区分:Enterprise Edition是企业版,功能最全但授权贵;Standard Edition是标准版,功能有裁剪;Express Edition完全免费,但CPU、内存、数据量都有限制;Developer Edition是开发版,功能接近企业版,专给开发测试用,但不能用于生产环境。如果你只是装数据库来练习,Express Edition或Developer Edition都够用。
3.4 查询结果出现乱码,多半是NLS_LANG没对上
乱码问题的根源不是数据库存坏了,而是客户端和服务端的字符集不一致。数据库里存的是GBK编码,客户端却按UTF-8来解读,显示就会变成乱码。
正确做法分两步。第一步查数据库字符集,SQL窗口执行:
SELECT userenv('language') FROM dual;返回结果类似SIMPLIFIED CHINESE_CHINA.ZHS16GBK,或者AMERICAN_AMERICA.AL32UTF8。第二步把本机环境变量NLS_LANG改成和数据库一致。如果数据库是ZHS16GBK,就设置为:
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK改完环境变量,必须完全退出PLSQL Developer再重新打开,只关窗口不结束进程是没用的。这里有个容易踩的坑:Windows系统变量和用户变量如果同时存在同一个名字,工具实际读取的可能不是你改的那个,所以配置完最好在cmd里执行echo %NLS_LANG%确认一下实际值。
4. 几个真正高频的功能实操
4.1 新增一个数据库用户并分配权限
建用户在PLSQL Developer里有图形化方式:左侧Objects树展开Users,右键New直接填写。不过我更习惯直接开SQL窗口执行脚本,尤其在需要留痕、走评审的公司环境,脚本比点击操作可靠得多。
最标准的建用户三步:
-- 1. 建用户,密码尽量复杂 CREATE USER demo IDENTIFIED BY "Your_Str0ng_Psw"; -- 2. 给基本权限 GRANT CONNECT, RESOURCE TO demo; -- 3. 设置默认表空间和配额 ALTER USER demo DEFAULT TABLESPACE users QUOTA 100M ON users;说明一下这几个权限的作用:CONNECT角色允许用户登录数据库,RESOURCE角色允许在表空间里建表、建过程等,这是开发账号的常见组合。生产环境千万别图省事直接GRANT DBA,最小权限原则关键时刻能保命。配额那一行表示该账号在users表空间最多占用100MB,如果漏了这一行,新用户建表时会报ORA-01950 no privileges on tablespace,很多人在这里卡住。
4.2 创建定时任务(Jobs)的两种姿势
定时任务在Oracle里有两种写法:老的DBMS_JOB和新的DBMS_SCHEDULER。新版本强烈推荐DBMS_SCHEDULER,功能更全面,表达式也更灵活。PLSQL Developer左侧有Jobs节点,右键New可以在界面上操作,底层生成的还是DBMS_SCHEDULER脚本。
手写一个每天凌晨2点执行的任务:
BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'JOB_DEMO_DAILY', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN your_procedure_name; END;', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0', enabled => TRUE, comments => '每天凌晨2点执行示例作业' ); END;repeat_interval就是调度表达式,FREQ=DAILY加BYHOUR=2表示每天2点。每周一晚上10点就是FREQ=WEEKLY; BYDAY=MON; BYHOUR=22; BYMINUTE=0; BYSECOND=0。
作业建完要看执行情况,有两张视图常用:
SELECT * FROM user_scheduler_jobs; SELECT * FROM user_scheduler_job_run_details ORDER BY log_date DESC;常见的问题是作业建了但一直没跑,先检查enabled是否为TRUE,再去run details里看执行报错。在PLSQL Developer的Jobs节点右键就能看到运行历史和日志,比命令行直观很多。
4.3 导入导出别用错模式
开发环境之间迁移小表,PLSQL Developer的Tools菜单下Export Tables和Import Tables非常方便。导出可选几种格式,最常用的是Oracle Export,生成.pde文件,这是工具自带的格式,导入最顺手;另外还可以导出SQL Inserts,生成标准Insert语句,适合跨工具迁移。
我的经验是:几十万行以内的小表,用Oracle Export导出成pde,再到目标库Import Tables选择文件点Import,基本无脑完成,表结构、数据、索引都能带上。但数据量大或者跨大版本迁移,别用这工具,老老实实走expdp/impdp。有个实用小技巧:在PLSQL Developer里直接把一个表从连接A拖到连接B,也能快速复制表结构和数据,临时建测试表时特别方便。
4.4 写SQL时顺手看眼执行计划
看执行计划是SQL优化的基本功。在PLSQL Developer里很简单:写完SQL,光标停在语句上,按F5,下方立刻展示执行计划。
举一个最典型的全表扫描案例。业务表T_ORDER有个500万行,查询某个用户最近30天的订单:
SELECT * FROM t_order WHERE user_id = '10086' AND order_time > SYSDATE - 30;执行计划里如果出现TABLE ACCESS FULL,慢一般就慢在这里。原因通常是两种:没建索引,或者统计信息过期。先检查表上有没有(user_id, order_time)组合索引,没有就建:
CREATE INDEX idx_order_user_time ON t_order(user_id, order_time);再按F5看执行计划,会从全表扫描变成INDEX RANGE SCAN,响应时间从秒级降到毫秒级。这里要说句公道话:看到全表扫描别急着骂优化器,如果表只有几百行,全表扫描反而是最快的。优化的核心是结合数据量和实际执行情况,而不是机械地认为全表扫描一定坏。
5. 从ORA-12560到乱码:典型报错排查清单
5.1 ORA-12560和ORA-12154,两个最常见的连接问题
连接Oracle数据库最常见的两个连接报错,一个是ORA-12560,一个是ORA-12154。我把它们的区别和排查思路整理成一张表:
| 错误码 | 含义 | 最常见原因 | 解决思路 |
|---|---|---|---|
| ORA-12560 | 协议适配器错误,连不上服务 | Oracle服务未启动或监听器未启动 | 服务管理器启动数据库,监听器执行lsnrctl start |
| ORA-12154 | TNS名称解析失败 | tnsnames.ora路径不对或连接名写错 | 核对TNS_ADMIN变量、检查连接串括号和连接名 |
| ORA-12514 | 监听器不识别服务 | SERVICE_NAME写错或未注册到监听 | 查数据库服务名,确认动态注册或手工静态注册 |
ORA-12560的排查顺序建议是:先看服务管理器里OracleServiceORCL是否运行,再看监听状态,然后本地sqlplus连一次确认账号没问题,最后才排查网络。ORA-12154则主要在tnsnames.ora本身,确认TNS_ADMIN指向的目录下真的有这个文件,连接串的括号和连接名大小写都没问题。
5.2 启动报错“Could not load oci.dll”
工具能打开,一点连接就报这错,几乎就是OCI路径没配对。解决办法前面提过:拿到Instant Client解压目录,把oci.dll完整路径填到Tools > Preferences > Oracle > Connection的OCI library里,然后重启。还不行就把ORACLE_HOME和PATH都配上,再检查位数是否一致。这个报错90%以上都是位数不匹配或者路径填错,没有更复杂的原因。
5.3 乱码问题的完整排查顺序
乱码问题按下述顺序排查,基本几分钟内能定位:
- 先确认数据库字符集:SELECT userenv('language') FROM dual。
- 比对本地NLS_LANG环境变量,不一致就去改。
- 改完环境变量,完全退出PLSQL Developer再重新启动,注意是全部退出,包括右下角托盘。
- 还没好,检查操作系统区域设置和PLSQL Developer的字体设置,Tools > Preferences > User Interface > Fonts里换一个支持中文的等宽字体。
如果数据库用了AL32UTF8,而公司旧环境还在用GBK,建议新项目统一按数据库字符集来配,旧库以数据库实际字符集为准。
5.4 试用期到期后怎么办
PLSQL Developer是商业共享软件,官网提供30天试用版。相信不少朋友搜过注册码、破解版之类的东西,这里我直接说一句:不建议去搞来路不明的注册机或破解包。这类东西很容易被塞进挖矿程序、键盘记录器,真中招了成本远超买授权。公司生产环境用盗版工具,出了问题也是自己背锅。
正规路径其实很简单。公司场景,找采购或IT负责人买正版License,官方站直接能下单,价格相对于人力成本来说并不夸张,而且能持续收到版本更新。个人学习和测试,用Oracle官方的SQL Developer或者DBeaver这类免费工具,一样能连Oracle写SQL、看执行计划。SQL Developer虽然界面朴实一点,但胜在免费可靠。如果你日常工作确实重度依赖PLSQL Developer的调试功能,让公司买正版授权就是最省心的答案。
6. 最后分享几个我离不开的小设置
6.1 快捷键和三件套窗口
用久了会发现,PLSQL Developer最常用的就三个窗口:SQL Window写查询和DDL,Command Window执行脚本,Test Window调试存储过程。配套快捷键记熟能省不少时间:
- Ctrl+D:打开Command Window
- Ctrl+T:打开Test Window
- F5:看执行计划
- F8:执行SQL
- Ctrl+Enter:执行当前语句
对经常写存储过程的人来说,Test Window的调试功能是PLSQL Developer最值钱的部分,设断点、看变量、单步执行,比在SQL*Plus里靠dbms_output输出靠谱太多。
6.2 记住登录历史和保存窗口布局
重装工具最烦的就是重新配环境。PLSQL Developer的配置都存在本地,建议把配置目录整体备份一份,系统重装后直接恢复,登录历史、快捷键、颜色主题、窗口布局就全回来了。
Tools > Preferences里把Logon History勾选上,以后打开工具直接双击历史连接,不用每次手输服务器地址。如果运维环境里有大量测试机,这个功能能省下不少时间。窗口布局乱了之后,用Window > Save Layout固化自己的习惯布局,换屏幕分辨率或者换电脑时也能一键恢复。
6.3 一点关于安全的碎碎念
最后说一句可能不中听但很重要的话。数据库客户端会缓存SQL历史、登录信息甚至密码,如果你常年用Sysdba连生产库,这台机器的安全级别就要拉高。不要随意在公网环境保存生产库密码,不要拿一个万能密码连所有环境,该分开的账号权限要分开,该走堡垒机就走堡垒机。工具是提效的,不是让人放松安全警惕的。
这些年我用PLSQL Developer最大的体会是,这个工具的上限确实很高,但大多数人长期只用了它20%的功能。先把安装、连接、字符集、权限、定时任务、执行计划这些基础打牢,再去深入调试器、DBMS_SCHEDULER这些高级功能,它会成为你工作里最可靠的一件趁手工具。希望这篇内容能让你少走一些我当年走过的弯路。
本文还有配套的精品资源,点击获取