ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PL/SQL Developer实战指南:安装配置、连接调试与高频问题排查

PL/SQL Developer实战指南:安装配置、连接调试与高频问题排查 简介面向Oracle数据库管理与开发的PLSQL Developer集成开发环境安装包适合数据库管理员、DBA、开发人员以及刚接触PL/SQL的初学者。工具支持本地/远程Oracle数据库连接可在同一界面中创建和维护表、视图、存储过程、函数、触发器及索引编辑器带有语法高亮、代码提示、自动完成与代码片段查询结果可导出为CSV或Excel也支持数据导入导出与备份迁移。调试方面断点、单步执行、变量查看和单元测试能帮助快速定位存储过程与函数中的问题SQL分析器、Explain Plan可查看执行计划配合SVN/Git版本控制和工作区管理兼顾团队协作与SQL性能优化。资源以RAR压缩包形式提供整包约19.05MB解压即可部署使用无需费时寻找可用版本。目前已有190人学习下载对日常Oracle开发、脚本调试和性能调优都是很实用的工具选择。 PL/SQL Developer这个名字只要摸过Oracle的人基本都听过。我十几年前做Oracle开发那会儿每天到工位第一件事就是打开它写存储过程、调包、看执行计划、比对数据一天在里面待的时间比跟同事说话都多。直到现在团队里来了新人我给的第一个任务清单里肯定有一条把PL/SQL Developer装好、配好能连上测试库。在Oracle日常开发这块还真没有哪个工具能完全替代它。这篇文章我打算把这些年装过、配过、踩过的坑一次性捋明白。从下载安装、连接局域网其他机器的Oracle数据库到中文界面切换、查询乱码处理再到建用户、导数据、定时任务、DBLINK报错这些高频操作全部按实操场景来讲。新人照着做就能少走弯路老鸟也可以直接翻到最后一节的问题速查表找答案。1. 为什么我用PL/SQL Developer一用就是十几年1.1 它到底解决了什么问题先纠正一个容易混淆的概念PL/SQL Developer是Allround Automations公司出的商业客户端工具真正干活的Oracle数据库装在另外一台机器上。这工具解决的核心痛点是把写SQL—执行—看结果—调试—优化这条开发链路从黑窗口里解放出来。语法高亮和自动补全帮我减少拼写错误对象浏览器里点开表就能看字段、索引、约束、触发器省了无数条查询数据字典的SQL。特别是调试存储过程这个功能设断点、单步执行、查变量值比在SQL*Plus里用dbms_output.put_line打印靠谱太多。日常工作里我常驻四个窗口SQL Window用来跑临时查询和写业务SQLTest Window用来调试存储过程和函数Command Window保留给需要命令行操作的特殊场景Object Browser则充当整个库的对象地图。这几个窗口各司其职配合快捷键用起来非常顺手。所以这工具适合谁毫不夸张地说只要你的工作是跟Oracle打交道从DBA到应用开发再到数据分析都用得上。1.2 版本选择与安装准备下载安装这里说几个要点。版本方面目前官方最新是1614和15也还有大量用户在用功能和界面差异不太大新装的话直接上16就行。位数这个问题容易被忽略如果机器上装了Oracle完整客户端那PL/SQL Developer的位数最好和客户端一致否则后面指定OCI库的时候会报错如果走Instant Client方案就看你下载的Instant Client是32位还是64位工具跟它保持一致即可。我见过不少人系统是64位就下载64位工具结果连接的Oracle客户端是32位折腾半天连不上其实就是位次不匹配。安装本身没什么技术含量但路径别带中文、别带空格也别装到权限容易出问题的目录。装完第一件事是设置OCI库在Preferences菜单进入Oracle下的Connection页面填写OCI Library为oci.dll的实际路径。这里有个常见误区PL/SQL Developer不是装完就能连数据库的它只是一个壳真正的网络连接能力来自Oracle客户端组件如果打开工具后没有报类似ORA-12154 TNS无法解析指定的连接标识符的错说明OCI库基本加载正常了。另外补一句Oracle官方有个免费工具叫Oracle SQL Developer功能也很全但PL/SQL Developer在存储过程调试和补全上更顺手这也是我坚持用它的原因。2. 连接Oracle数据库的全场景配置2.1 先把连接逻辑搞清楚很多刚入门的人问怎么连局域网其他机器的Oracle数据库我一般先反问三个问题目标机器的数据库服务启动了吗监听启动了吗客户端和数据库之间网络通不通这三个问题都解决了连接配置其实就是填写连接串的事情。Oracle的连接模型可以拆成三层客户端发起请求监听器Listener在服务器上接收再把请求转给数据库实例。所以目标机器上通常有两个Windows服务要盯着一个是数据库实例服务名字类似OracleServiceORCL后面跟实例名另一个是监听服务名字类似OracleOraDb11g_home1TNSListener所有从外面发来的1521端口请求都是它先接住。服务没起来你再怎么改配置也白搭。判断网络通不通最简单是用cmd里ping目标IP通了再继续往下配置。2.2 手把手配置tnsnames.oratnsnames.ora是Oracle客户端的通讯录里面定义了连接标识符和真实地址的对应关系。它放在Oracle客户端安装目录的network\admin子目录里也就是$ORACLE_HOME\network\admin如果用的是Instant Client就放在解压目录下的network\admin里。还有一个环境变量TNS_ADMIN可以手动指定目录PL/SQL Developer加载OCI库的时候会读取这里。注意TNS_ADMIN如果设置得不干净经常会造成高级别覆盖低级别的诡异问题所以配好之后我在cmd里用echo %TNS_ADMIN%检查一遍。文件内容大概长这样ORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.1.100)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) )这里HOST填局域网机器的IPPORT默认1521SERVICE_NAME是数据库的服务名不一定等于实例名可以从服务器上执行show parameter service_names确认。保存后回到命令行执行tnsping ORCL如果能解析出地址并收到响应这个连接标识符就算配好了。我一般会多敲一次tnsping看延迟和报错信息很多连接超时其实是网络问题而不是配置问题这一步能区分开。2.3 局域网其他机器的连接实战有了上面的基础连接到局域网其他机器就很简单了。打开PL/SQL Developer登录窗口在Username和Password里填账号密码Database一栏填你配置好的连接标识符这里可以填ORCL也可以直接填192.168.1.100:1521/orcl这种即时连接串后者在没配tnsnames.ora时特别有用。Connect as保持Normal除非要管理员操作才选SYSDBA。实操中最容易卡住的是Windows防火墙。目标机器的1521端口如果被防火墙拦了tnsping会超时。处理方式是把1521端口加入入站规则或者干脆在数据库服务器上把Oracle相关的程序加到允许列表。还有一次帮同事排查数据库在虚拟机里网络用的是NAT模式宿主机外面怎么都连不上后来改成桥接模式就好了。这种网络拓扑问题不在Oracle范围内但排查顺序一定先于改配置否则白折腾。2.4 没装Oracle客户端怎么办Instant Client方案很多开发机其实不想装几百兆的Oracle完整客户端这时候用Instant Client是最省事的。去Oracle官网下载instantclient-basic包注意区分Windows 32位和64位解压到比如D:\instantclient_19_24这样的目录。在这个目录下新建network\admin子目录把tnsnames.ora丢进去然后回到PL/SQL Developer的Preferences - Oracle - Connection把OCI Library指到Instant Client目录下的oci.dll。这个方案的坑主要在路径。Instant Client对路径中的空格和中文特别敏感我之前图省事解压到带空格的目录工具直接报Failed to load library后来挪到纯英文无空格路径就正常了。另外Instant Client版本和数据库版本不用完全一致一般客户端版本不低于服务器版本问题都不大。老库配新客户端、新库配旧客户端容易出一些意想不到的性能或编码问题所以公司内部我会统一客户端版本再推广。3. 界面汉化与中文乱码问题3.1 中文界面切换的正确姿势网上搜PL/SQL Developer中文设置会跳出来一堆语言包下载。这里我提醒一句不要乱下载来路不明的语言包有的捆绑了广告甚至后门。官方其实提供多语言支持最保险的办法是到Allround Automations官网的下载页面找到和你主程序版本完全一致的语言包比如中文包一般是chinese.exe下载后安装到PL/SQL Developer的安装目录重开工具在Tools - Preferences - User Interface - Language里切换成Chinese即可。版本匹配非常关键。我曾经给PL/SQL Developer 15装了一个14的中文包启动直接报资源文件版本不匹配只能卸载重装。所以记住一条主程序什么版本语言包就必须是什么版本小版本号都不能差。如果只是想要英文界面默认就是不用折腾。3.2 查询结果乱码的根源与解决办法查询结果出现乱码十有八九是字符集不匹配。Oracle数据在数据库里按服务器的字符集存储客户端读出来要转成客户端字符集两边不一致中文就会变成问号或者方框。想确认服务器字符集在SQL Window里执行SELECT USERENV(LANGUAGE) FROM DUAL;返回结果类似SIMPLIFIED CHINESE_CHINA.AL32UTF8或者AMERICAN_AMERICA.ZHS16GBK。记住这个值然后让客户端NLS_LANG环境变量跟它一致。如果服务器是AL32UTF8而客户端设成ZHS16GBK就很容易乱码。而且这个乱码往往是单向的你往库里插入中文可能没事但读出来的中文就乱了因为转换发生在客户端显示那一刻。还有一种情况是PL/SQL Developer内部的字符集缓存遇到改了NLS_LANG还是乱码的关掉工具重启多半能好。我排查的顺序是先查服务器的language再比对本机NLS_LANG最后看Windows的区域设置很少跑到第三步就能解决。3.3 NLS_LANG环境变量的配置细节Windows下设置NLS_LANG右键此电脑打开属性进入高级系统设置在环境变量里新建系统变量变量名填NLS_LANG变量值填成SIMPLIFIED CHINESE_CHINA.AL32UTF8或你刚查到的服务器字符集。改完一定要重启PL/SQL Developer环境变量是进程启动时读取的不重启不生效。有两点容易被忽略。第一NLS_LANG的值由语言_地域.字符集三段组成中间绝对不能少了那个点少了就会变成无效设置工具会静默回退到默认值乱码依旧。第二如果你的SQL文件本身是用GBK编码保存的而客户端字符集又是AL32UTF8执行带中文的SQL时可能报字符无效或者结果错乱这类问题跟数据库无关是文件编码和客户端字符集的组合问题建议把SQL文件统一存成UTF-8无BOM。4. 三个高频实操建用户、导数据、定时任务4.1 用PL/SQL Developer创建新用户新建用户的GUI操作在Tools菜单下打开Users窗口右侧空白处右键Create填用户名和密码Password直接填明文工具会帮你加密存储。创建完还要授权否则这个用户只能登录什么表和操作都碰不了。开发环境我一般给connect和resource两个角色connect允许登录resource允许建表、建存储过程这类对象。如果是要做DBA管理或跨用户操作才会额外给dba角色。生产环境角色分配更严格通常按最小权限来。等价SQL是这样GUI操作生成的背后就是这些命令CREATE USER app_user IDENTIFIED BY YourPwd_123; GRANT CONNECT, RESOURCE TO app_user;这里踩过一个坑Oracle 12c以后引入了CDB/PDB概念如果是在PDB里创建用户用户名要加c##前缀公共用户或者直接连到PDB再建。PL/SQL Developer里连接PDB需要确认登录的服务名是PDB的服务名不是根容器否则创建的用户可能不在你预期的库里。这个问题直接导致过我建的账号怎么都登不上应用后来检查才发现用户建到根容器去了。4.2 数据导入导出的常见方式与坑数据导入导出也是日常工作高频操作。Tools - Export Tables可以把选中的表导出成SQL文件里面包含建表语句和Insert数据适合小数据量的交付和备份导出单表数据量大时建议在Export窗口勾选压缩、分批提交避免生成的SQL文件大到编辑器打不开。导入则用Tools - Import Tables选择SQL文件后会按顺序执行建表和插入。这里有个隐藏坑如果同时导入了多张存在外键关系的表顺序乱了会导致插入失败。我有次导一个订单系统先导了订单表、明细表再导客户表外键约束直接报错后来改成先导主表再导从表才搞定。大数据量场景我更推荐用Oracle自己的expdp/impdpPL/SQL Developer的导出功能毕竟不是专业备份工具。另外它还支持ODBC导入用来把Excel数据倒进Oracle很方便Tools - ODBC Importer选好数据源和表工具会做字段类型匹配。这个功能用来导测试数据特别好用但要注意Excel里的日期格式、空值处理匹配错类型会出现ORA-01843等报错。4.3 创建Jobs定时任务定时任务在Oracle里主要有两种实现DBMS_JOB是老牌方案很多老项目里还在用DBMS_SCHEDULER是后来的官方推荐方案功能更强。PL/SQL Developer在对象树的Jobs节点下可以直接管理这些任务。右键Jobs - New能打开编辑窗口填上要执行的存储过程名、开始时间和间隔。其实它生成的就是一段调度代码所以直接在SQL Window里执行也行。用DBMS_JOB写一个每天凌晨0点跑的定时任务DECLARE jobno NUMBER; BEGIN DBMS_JOB.SUBMIT(jobno, PKG_REPORT.P_DAILY_GENERATE;, SYSDATE, TRUNC(SYSDATE)1); COMMIT; END;最后一个参数是间隔表达式TRUNC(SYSDATE)1表示每天0点。查看任务运行情况和最近错误直接查视图SELECT * FROM user_jobs; SELECT job_name, state, last_start_date, next_run_date FROM user_scheduler_jobs;DBMS_JOB的任务挂了不会自动发告警所以我在生产上会用DBMS_SCHEDULER因为它有更完善的日志和重试机制。简单示例BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name JOB_DAILY_GENERATE, job_type PLSQL_BLOCK, job_action BEGIN PKG_REPORT.P_DAILY_GENERATE; END;, start_date SYSDATE, repeat_interval FREQDAILY; BYHOUR0, enabled TRUE ); END;两种方式各有适用场景老系统里已存在的DBMS_JOB存量任务尽量别去动它新写的调度建议统一走DBMS_SCHEDULER。PL/SQL Developer对象树里能直接右键停止、启用任务维护起来很直观。5. 开发调试的核心技巧执行计划与DBLINK5.1 用执行计划定位全表扫描SQL跑得慢第一件事不是去给服务器加内存而是看执行计划。在PL/SQL Developer的SQL Window里选中SQL按F5或者右键Explain Plan下方就会列出Oracle实际打算怎么执行这条SQL。重点看Operation那一列出现的表访问方式TABLE ACCESS FULL代表全表扫描INDEX RANGE SCAN代表索引范围扫描TABLE ACCESS BY INDEX ROWID代表通过索引拿到rowid再回表取数据。通常全表扫描在数据量大的表上是性能杀手加个合适索引就能扭转。举个我最近处理的简单例子。业务表orders有几十万行查询条件是customer_id原来没加索引执行计划里就是TABLE ACCESS FULLSQL跑到秒级。我的处理是先确认customer_id的选择性——区分度不够高就不建区分度高才建。CREATE INDEX idx_orders_customer_id ON orders(customer_id);再回来看执行计划变成了INDEX RANGE SCAN加回表操作查询从一两秒降到几十毫秒。这里要提醒一句全表扫描不等于错小表扫描一下可能比走索引更快Oracle的优化器认为小表全扫更合算时会主动选全扫但你得核对它判断的表行数是否准确统计信息太旧会导致优化器误判。我刚入职时吃过这个亏优化半天发现是统计信息没更新跑一次EXEC DBMS_STATS.GATHER_TABLE_STATS(APP,ORDERS)就正常了。5.2 DBLINK创建与ORA-12560排查跨库查数据是Oracle开发常事比如从业务库查数据到报表库就得在报表库上建一个指向业务库的DBLINK。创建语法如下CREATE DATABASE LINK LINK_ERP CONNECT TO scott IDENTIFIED BY tiger USING ERP_TNS;这里USING后面的ERP_TNS就是目标库在tnsnames.ora里的连接标识符。建好之后查询远端表SELECT * FROM order_infoLINK_ERP。日常开发中DBLINK用得最多的场景是同步数据、跨库join、定时拉取用起来和本地表差不多只是网络开销会体现在性能上SQL里尽量别拿跨库大表跟本地大表做hash join容易撑爆内存和网络。创建或查询DBLINK时如果报ORA-12560这是个典型错误。ORA-12560的字面意思是TNS协议适配器错误在Windows环境下绝大多数原因是Oracle相关服务没启动。排查我按这个顺序来先看OracleServiceXXX服务是否启动再看TNSListener服务是否启动然后确认环境变量ORACLE_SID是否正确、对应用户是否权限足够接着在cmd里跑sqlplus username/password ERP_TNS如果能连上再去PL/SQL Developer试。我见过有同事配置好DBLINK却在查询时报ORA-12560最后发现是本地默认的ORACLE_SID指向了一个不存在的实例导致本地连接校验失败改一下环境变量就好了。5.3 sysdba登录与权限操作登录窗口的Connect as有Normal、Sysdba、Sysoper几个选项。Normal就是普通用户身份Sysdba是数据库管理员身份能在实例级做启动关闭、建库、恢复这类操作Sysoper权限比Sysdba小主要用于启动停止实例和备份恢复。用sysdba登录用户名填sys密码是sys用户的密码Connect as选择SYSDBA此时即使填的是普通用户名也能以管理员身份连接前提是你有相应密码。sysdba高频用途之一是改密码。有次开发忘了测试库应用账号的密码我直接用sys登录执行ALTER USER app_user IDENTIFIED BY NewPass_123;然后就恢复了。还有查v$视图、看会话、杀会话、切换归档模式这类DBA操作在PL/SQL Developer里用sysdba身份执行很方便。这里提醒一句sysdba权限极大生产环境千万别随手用误操作影响是实例级的。6. 高频问题速查表这里把前面分散说过的坑汇总成一张表方便直接对着查。试用期到期这个问题问得最多PL/SQL Developer官方有30天评估期到期后个人学习和评估场景可以清理本机评估信息后重新评估商业项目请采购正版授权别在公司环境用盗版给自己挖坑。清理方式我一般做两步删掉安装目录下的user.prefs如果有再清理注册表HKEY_CURRENT_USER\Software\Allround Automations\PLSQL Developer下的评估相关项。其他常见问题整理如下现象常见原因处理办法连接超时tnsping无响应防火墙拦截1521端口数据库服务器放行1521端口入站连接报ORA-12154tnsnames.ora找不到或解析失败检查TNS_ADMIN路径和文件名查询中文乱码NLS_LANG字符集与服务器不一致设置NLS_LANG为服务器language值打开工具报Failed to load libraryOCI库位次不匹配或路径有空格重新指定OCI库路径改纯英文中文界面切换失败语言包版本不匹配主程序版本下载与主程序完全一致的语言包DBLINK查询报ORA-12560Oracle服务或监听未启动检查服务和监听状态启动时断言失败Assertion failedOCI.dll与工具位次不一致统一客户端和工具位数重指OCI库最后再分享一个我自己的习惯。我习惯把常用SQL和模板存到PL/SQL Developer的本地文件里每次用的时候直接拖出来改参数省得反复敲。类似查当前会话、查大表统计信息这类脚本都建好模板团队其他成员要的话我也直接分发效率能明显提升。工具用得久了真正拉开效率差距的往往不是某个炫技功能而是把重复动作沉淀成模板的意识。这个观念在数据库开发里尤其重要——你每天省下的几分钟一年累积起来就是几十个小时。本文还有配套的精品资源点击获取
返回列表