尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PLSQL Developer远程连接Oracle配置与排错实战

PLSQL Developer远程连接Oracle配置与排错实战 1. 为什么远程连接Oracle这件事值得单独拿出来讲先说清楚这篇东西是给谁看的。如果你手里有一台装好Oracle的服务器不管是公司内网的测试机还是云上自己买的实例而你的开发机是Windows日常写SQL、查数据、调存储过程都离不开PLSQL Developer那这篇就是写给你的。核心关键词就三个PLSQL、Oracle、远程连接。本地连本机数据库谁都会tnsnames一配就通了真正让人头大的是跨机器连接——监听没起、服务名填错、防火墙拦了1521、客户端位数和Oracle客户端位数对不上、ORA-12541和ORA-12154轮流报这些坑我基本都踩过一遍。远程连接Oracle的本质是让PLSQL Developer所在的客户端机器通过网络找到目标服务器上的监听器Listener由监听器把连接请求转交给对应的数据库实例。这条链路上一共有四个环节客户端的Oracle网络配置、客户端的网络连通性、服务器端监听器状态、服务器端服务名/实例名映射。任何一环断了你看到的都是连接失败但失败的原因完全不同。很多人一看到连不上就去重装PLSQL方向就错了重装十遍也没用因为问题大概率在服务器那一侧。我见过太多新手在这一步卡住本机装了Oracle服务端PLSQL装在本机连localhost没问题等到要连同事的机器或者测试服务器就懵了。还有人把PLSQL Developer理解成数据库软件其实它只是一个客户端工具本身不包含数据库也不包含Oracle的网络通信组件——它需要依赖一个Oracle Client或Instant Client才能建立到Oracle的连接。这个认知差异是后面所有问题的根源。这篇会从整体思路讲到每一步的落地配置包括tnsnames.ora怎么写、监听器怎么查、防火墙怎么放行、遇到报错怎么按顺序排查。目标很直接你照着走一遍能把远程Oracle连上连不上也能自己定位到是哪一环的问题。不管你是刚学数据库课程设计的学生还是刚接手公司测试环境的后端这套排查路径都能直接用。2. 整体思路与工具选型为什么是PLSQL Developer Oracle Client2.1 PLSQL Developer到底扮演什么角色PLSQL Developer是一个Windows平台上的Oracle数据库开发工具它的定位是IDE不是数据库。它提供代码编辑器、SQL窗口、对象浏览器、调试器、执行计划查看等功能但它自己不实现Oracle的通信协议。真正负责把SQL发出去、把结果收回来的是Oracle提供的客户端库OCIOracle Call Interface。所以PLSQL Developer的安装包里有一个Oracle Home和OCI Library的配置项让你指定用哪个客户端的DLL。这就解释了一个很常见的现象同样一台机器上SQLPlusOracle自带的命令行工具能连上远程库PLSQL Developer却连不上。因为SQLPlus自带的oci.dll来自它自己的Oracle Home而PLSQL Developer可能指向了另一个路径或者压根没配置。遇到这种情况第一反应应该是去检查PLSQL的Preferences里OCI Library的路径而不是怀疑网络。提示PLSQL Developer是32位程序还是64位程序直接决定了它只能加载对应位数的OCI库。32位的PLSQL只能配32位的Oracle Client64位的反过来。位数不匹配时你看到的往往不是明确报错而是PLSQL启动时闪一下就没或者Preferences里根本列不出可选的OCI路径。这是新手最容易忽略的一点。2.2 为什么需要单独安装Oracle Client有人会问我服务器上装了Oracle数据库能不能把它的客户端组件拷过来用。理论上有Oracle Home就有OCI但实际不建议这么干。原因有三一是服务端的Oracle Home通常体积巨大几十GB拷贝和维护成本高二是服务端和客户端的版本匹配有讲究服务端Oracle 11g的客户端连Oracle 19c的库可能因为协议版本问题出各种怪毛病三是服务端目录里往往还包含实例数据文件直接拷过来既不干净也不安全。因此标准做法是在开发机上单独装一个Oracle Client。这里有两种选择完整版Oracle Client和Instant Client。完整版带安装程序、带网络配置助手、带SQL*Plus等全套工具安装完自动创建Oracle Home网络配置有图形界面Instant Client是绿色版解压即用体积小只包含最核心的DLL但没有netca图形工具tnsnames.ora需要手动建。我的建议很明确如果你只是要连数据库、用PLSQL开发Instant Client足够用而且更干净。它不需要管理员权限安装不写注册表卸载就是删目录。对于临时接手一个环境、或者在自己笔记本上配一套开发环境的人来说Instant Client是性价比最高的选择。完整版Client适合需要用到netca、netmgr、SQL*Plus这些命令行工具的场合。2.3 版本匹配这件事别不当回事Oracle的客户端和服务端版本兼容矩阵是有官方说明的大意是客户端可以连比自己版本高的服务端但高版本客户端连低版本服务端要谨慎。实践中我总结的经验是19c的Instant Client基本能连11g到19c的所有服务端这是目前最省心的组合。如果你服务器是Oracle 11g很多老的课程设计、老项目还在用客户端选19c的Instant Client一般都能连上反过来用11g的客户端去连19c的库可能会遇到协议协商失败。另外一个关键点数据库的字符集。如果服务端是ZHS16GBK客户端配的NLS_LANG不对你会看到中文变成问号或乱码。Instant Client默认不带NLS_LANG设置需要在系统环境变量里显式指定比如NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK或者AMERICAN_AMERICA.AL32UTF8。这个后面会在配置环节具体讲。3. 核心细节解析远程连接链路上的四个关键配置3.1 网络配置三件套tnsnames.ora、listener.ora、sqlnet.ora这三个文件是Oracle网络体系的核心。listener.ora在服务器端定义监听器监听的地址和端口以及把哪个连接请求转发给哪个实例tnsnames.ora在客户端定义连接标识符就是你在PLSQL登录框里填的那个Database到具体主机、端口、服务名的映射sqlnet.ora两边都有用于控制命名方法解析顺序、认证方式、日志追踪等。对于只做客户端的机器你只需要关心tnsnames.ora和sqlnet.ora。tnsnames.ora的一个典型条目长这样ORCL_REMOTE (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.1.100)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) )注意这里每个部分都有讲究。HOST可以是IP也可以是主机名用主机名的话客户端必须能解析到否则报错跟没配置一样PORT是监听器端口默认1521但生产环境经常改这个要跟服务器管理员确认SERVICE_NAME是数据库服务名注意不是实例名SID两者在多数场景下可以混用但并不等价用错会报ORA-12505。SERVERDEDICATED是专用服务器模式绝大多数普通连接用这个就行共享服务器模式SHARED现在很少见了。写tnsnames.ora最容易犯的错是括号不匹配。Oracle的解析器对括号配对极其严格少一个右括号整段条目就废了而且报错信息往往指向别处。我习惯用编辑器的括号高亮功能检查一遍或者干脆用Oracle的tnsping命令去测——tnsping ORCL_REMOTE能返回OK就说明客户端这边的配置语法和网络都通了。3.2 服务名与SID一个让无数人栽跟头的地方必须把这两个概念掰开讲清楚。SID是数据库实例的唯一标识一个实例一个SID比如orclSERVICE_NAME是数据库对外提供的服务名一个数据库可以有多个服务名也可以用服务名来区分不同的业务访问路径。在单实例数据库里SID和服务名经常被设成一样所以很多人以为它们是一回事直到连一个服务名和SID不同的库时才发现连不上。PLSQL Developer的登录框里有两个Radio选项Database和Connect as。老版本的PLSQL登录框有一个下拉框让你选Database可选的项来自tnsnames.ora的条目名。但如果你用的是Easy Connect方式可以在Database里直接填主机:端口/服务名比如192.168.1.100:1521/orcl这种写法不依赖tnsnames.ora文件非常方便临时连接。如果你在tnsnames的CONNECT_DATA里写的是SID orcl而不是SERVICE_NAME orcl那就必须保证目标实例的SID真的是orcl。怎么确认在服务器上执行lsnrctl status输出里会列出该监听器代理的服务包括Service和Instance两个名字都能看到。这是最快的确认方式。3.3 监听器远程连接的总入口服务器端的监听器进程是远程连接能建立的前提。它由lsnrctl命令管理常用操作就三个lsnrctl status看状态、lsnrctl start启动、lsnrctl stop停止。status的输出信息量很大要重点看几行Listen Endpoint里列出的地址和端口是不是你期望的比如(DESCRIPTION(ADDRESS(PROTOCOLtcp)(HOST0.0.0.0)(PORT1521)))如果HOST是127.0.0.1那外部机器根本连不进来Service Summary里有没有你要连的服务名Instance Summary里实例状态是不是READY。监听器只监听某个IP是一个高频坑。默认安装时listener.ora里经常写的是HOST localhost或者具体的主机名监听器就只绑在这个地址上。外部机器发起连接时TCP包到达服务器的公网/内网IP但没有进程在这个IP的1521端口上监听表现就是连接超时或拒绝。解决方式是改listener.ora把HOST改为0.0.0.0监听所有IPv4地址或者服务器的实际网卡IP然后重启监听器。注意改listener.ora之前先备份原文件。重启监听器会影响所有正在连接的客户端生产环境要选在业务低峰期操作并提前通知相关使用方。3.4 防火墙最容易被绕过也最容易忘的一环在服务器本机用lsnrctl status一切正常从客户端tnsping却超时八成是防火墙。Windows Server的防火墙默认会拦截入站的1521端口Linux的iptables或firewalld同理如果是云服务器还有一层安全组要在控制台放行。排查顺序建议是先在服务器本机用netstat -an | grep 1521Windows用netstat -ano | findstr 1521确认监听器确实在LISTENING状态且绑定的地址是0.0.0.0或目标网卡IP然后从客户端用telnet 服务器IP 1521或Test-NetConnection 服务器IP -Port 1521测试端口连通性。telnet通了说明网络和防火墙没问题问题在Oracle层telnet不通就先解决防火墙。这里有个细节有些网络环境里只放开ICMP能ping通但没放开TCP 1521ping通不代表能连数据库。反过来有些防火墙禁ping但放行了1521这也正常。所以判断连通性一定要用端口测试不能只看ping。4. 实操过程从零把一个远程Oracle连起来4.1 准备Instant Client并配置环境第一步下载对应位数的Instant Client Basic包。你的PLSQL是几位的就下几位的。下载回来是个zip直接解压到一个没有空格、没有中文的路径比如D:\oracle\instantclient_19_19。路径带空格或中文会在某些场景下引发解析问题虽然不一定必现但没必要给自己找麻烦。第二步配置系统环境变量。需要设置的有两个PATH里加上Instant Client目录这样系统能找到oci.dll和相关DLLTNS_ADMIN指向存放tnsnames.ora和sqlnet.ora的目录如果tnsnames.ora就放在Instant Client目录下TNS_ADMIN可以不设但显式设置更稳妥尤其是当你有多套客户端时。第三步设置NLS_LANG。这是中文是否乱码的关键。打开系统环境变量新建NLS_LANG值要和服务器数据库的字符集对应。服务器字符集怎么查连上之后执行SELECT * FROM nls_database_parameters WHERE parameterNLS_CHARACTERSET;或者在服务器上用sqlplus / as sysdba连进去查。如果是ZHS16GBK客户端就设SIMPLIFIED CHINESE_CHINA.ZHS16GBK如果是AL32UTF8设SIMPLIFIED CHINESE_CHINA.AL32UTF8。设错了会乱码设成SIMPLIFIED CHINESE_CHINA.ZHS16GBK但库是UTF8中文会显示成问号。第四步启动PLSQL Developer进Preferences工具→首选项找到Oracle → Connection在Oracle Home和OCI Library两栏里分别填入Instant Client的目录和oci.dll的完整路径。填完之后重启PLSQL登录框的Database下拉列表里应该能看到tnsnames.ora里配的条目了。4.2 写好客户端tnsnames.ora在TNS_ADMIN指向的目录下新建或编辑tnsnames.ora。上面给过一个模板这里补充几个实际常用变体。如果你连的服务名不是orcl把SERVICE_NAME改成实际值。如果你的库配了共享服务器模式需要走SHARED把SERVER改成SHARED但一般不建议专用模式更稳定。PROD_DB (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 10.20.30.40)(PORT 1521)) (ADDRESS (PROTOCOL TCP)(HOST 10.20.30.41)(PORT 1521)) ) (CONNECT_DATA (SERVICE_NAME prodsvc) (FAILOVER_MODE (TYPE SELECT) (METHOD BASIC) ) ) )上面这个例子用了ADDRESS_LIST配两个地址做简单的连接故障转移适合有RAC或主备双机的场景。普通单机不需要这么写单ADDRESS就够。写多地址时注意FAILOVER_MODE的配置要和实际架构匹配配错了不会报错但故障转移不生效这种看起来配了实际没用的情况最坑。写完tnsnames.ora后在命令行执行tnsping PROD_DB。这个命令会尝试解析条目、发起网络握手输出里有OK和耗时就说明客户端配置和网络到监听器这一层都通了。如果报TNS-03505找不到名称检查TNS_ADMIN和文件位置如果报TNS-12541无监听器说明网络通但服务器1521没在监听或防火墙挡了如果是TNS-12154无法解析服务名通常是CONNECT_DATA里的SERVICE_NAME和服务器上实际的服务名对不上。4.3 服务器端确认监听与服务登录服务器用oracle用户Linux或管理员命令行Windows执行lsnrctl status。重点看三块内容Listen Endpoint确认主机和端口。如果显示的是(HOST127.0.0.1)外部连不进来需要改listener.ora。Service Summary确认你的服务名在列表里状态是READY。Instance Summary确认实例状态是READY而不是BLOCKED或UNKNOWN。如果Service里没有你要的名字说明数据库实例没注册到这个监听器上。这种情况要么是数据库没启动要么是实例的local_listener参数没配好。可以在数据库里执行ALTER SYSTEM SET local_listener(ADDRESS(PROTOCOLTCP)(HOST服务器IP)(PORT1521)) SCOPEBOTH;然后ALTER SYSTEM REGISTER;手动触发注册再lsnrctl status看是否出现。如果监听器压根没起lsnrctl start启动即可。启动失败的话看日志常见原因是listener.ora语法错、端口被占用、或者ORACLE_HOME环境变量不对。日志位置一般在$ORACLE_HOME/network/log/listener.logLinux或%ORACLE_HOME%\network\log\listener.logWindows。4.4 关于服务名与Easy Connect的实战用法临时连一个库、不想配tnsnames.ora的时候直接在PLSQL登录框的Database里填Easy Connect串主机:端口/服务名。例如10.20.30.40:1521/prodsvc。这种写法支持的变体还包括主机:端口/服务名:参数。它依赖客户端已经能解析主机不需要tnsnames.ora非常适合临时排查。但要注意Easy Connect在很老的Oracle版本和某些客户端上支持不完整如果报语法错误就老老实实走tnsnames.ora。另外Easy Connect串里如果服务名后面带了域或者其他连接描述符里的东西很容易写错我一般只在确认服务名确实就是那一个词的时候才用。4.5 PLSQL Developer的登录参数与实际填写PLSQL Developer登录窗口里有几个字段Username、Password、Database、Connect as。Username是数据库用户注意Oracle的用户名默认大写但PLSQL会帮你做默认处理Password是密码Database填tnsnames.ora里的条目名如PROD_DB或者Easy Connect串Connect as选择Normal、SYSDBA、SYSOPER等普通业务用户选Normal做维护才用SYSDBA。登录后建议先执行一条select sysdate from dual;验证连接是活的再看一下select * from v$instance;确认连到的实例名和版本。如果这些都能正常返回说明整条链路已经打通。这时候再去做业务查询、存过调试就不会莫名其妙中断。第一次连接成功后PLSQL会把最近的连接历史记下来后续可以快速重连。如果密码输错次数过多Oracle账户可能被锁需要DBA执行ALTER USER xxx ACCOUNT UNLOCK;解锁。这个是新手经常撞的墙尤其是复制粘贴密码时前后带了空格。5. 常见问题与排查技巧实录5.1 报错速查先看编号再动手Oracle的连接报错编号是最有价值的线索不同编号对应完全不同的环节。下面这张表是我平时排查时脑子里过的对照表报错编号含义大概率原因优先排查动作ORA-12154TNS无法解析服务名tnsnames条目名写错或TNS_ADMIN不对tnsping 条目名检查文件位置ORA-12541无监听器监听没起、端口错、防火墙拦服务器lsnrctl status客户端测端口ORA-12514监听器不认识服务名SERVICE_NAME写错或实例没注册lsnrctl status看Service列表ORA-12505监听器不认识SID用了SID方式且SID值错改用SERVICE_NAME或核对SIDORA-12560协议适配器错误客户端环境变量或OCI配置错检查PATH、ORACLE_HOME、OCI路径ORA-01017用户名密码错误密码错或账户被锁核对密码必要时解锁账户表里的顺序基本就是我实际排查的顺序。先确认名称能解析12154再确认能到达监听器12541再确认监听器认识服务12514/12505最后才是认证问题01017。如果跳过前面的直接去改密码就是南辕北辙。5.2 PLSQL启动闪退或Preferences里找不到OCI这个问题我在不同机器上遇到过很多次基本都指向两个原因位数不匹配和DLL依赖缺失。位数不匹配前面说过了。DLL依赖缺失通常是Instant Client包下得不全——Basic包包含了oci.dll但某些功能需要额外的DLL比如某些字符集需要oraociei19.dll如果只解压了Basic但没配好PATHPLSQL加载oci.dll时会因为找不到依赖而静默失败。排查方法是把Instant Client目录加到系统PATH最前面然后重启命令行和PLSQL让新PATH生效。如果还是不行用Dependency Walker现在用lucasg/Dependencies更好用打开oci.dll看有没有红色的缺失依赖项。常见缺失是Visual C运行库装上对应的VC Redistributable即可。还有一个隐蔽的坑一台机器上装了多个Oracle产品比如同时装了完整版Client和Instant ClientPATH里的顺序决定了哪个oci.dll被加载。PLSQL Preferences里如果填的是裸的oci.dll路径系统会在PATH里找可能找到的不是你想要的那个。稳妥做法是填绝对路径如D:\oracle\instantclient_19_19\oci.dll。5.3 中文乱码不是数据库的问题乱码的根因是客户端NLS_LANG和服务器字符集不匹配。判断方法很简单在服务器上用sqlplus查一条含中文的数据如果服务器上显示正常、客户端显示乱码那就是客户端NLS_LANG的问题如果服务器上也乱码那可能是数据本身存的时候就出问题了。修复步骤确认服务器字符集查nls_database_parameters把客户端NLS_LANG设成对应的值。这里要特别注意一点NLS_LANG的格式是language_territory.charsetperiod前后不能有空格charset部分必须和服务器一致。设完之后必须完全退出并重启PLSQL Developer因为NLS_LANG是在进程启动时读取的改完不重启不生效。还有一种情况是数据里存储的是特殊中文比如生僻字即使字符集一致也可能显示成方框这是字体或字符集覆盖范围的问题跟连接本身无关。5.4 连接能建立但执行SQL特别慢有几个原因值得怀疑。一是DNS反向解析Oracle客户端在连接时会尝试做反向DNS查询如果DNS配置不当每次连接都要等超时。解决办法是在sqlnet.ora里加NAMES.DIRECTORY_PATH(TNSNAMES, EZCONNECT)和SQLNET.ALLOWED_LOGON_VERSION_SERVER等参数或者直接在hosts文件里把服务器IP和主机名做个静态映射。这个问题在跨网段访问时尤其明显一个连接能卡十几秒。二是网络链路本身的问题可以通过tracert看路由跳数和延迟。三是数据库负载高连接建立慢这个就得让DBA看数据库的等待事件了。区分方法是如果只是第一次连接慢、后续操作快倾向网络解析问题如果所有操作都慢倾向数据库负载或网络带宽问题。5.5 几个我踩过的实操坑坑一以为改了tnsnames.ora就不用重启PLSQL。实际上PLSQL的Database下拉列表是启动时读的改完文件要么重启PLSQL要么在登录框里手动输入条目名。手动输入不需要重启这也是我为什么更习惯直接手输而不是从下拉选。坑二在服务器上用localhost测通了就以为远程也没问题。localhost走的是本地回环完全绕过网卡和防火墙能说明监听器活着但完全不能说明外部能不能连。坑三把防火墙关了当万能药。关防火墙确实能让连接立刻通但这只是掩盖问题。正确做法是放行1521端口而不是关掉整个防火墙。生产服务器关防火墙是绝对不能接受的。坑四用SYS用户做日常开发。有些教程为了省事直接用system或sys连权限大确实不会遇到权限问题但风险极高。正确做法是让DBA给建一个专用业务用户只授必要的权限。坑五Instant Client解压在带中文或空格的路径。表现是PLSQL能启动但连不上或者干脆加载OCI失败。换成纯英文无空格路径就好了比如D:\oracle\instantclient。坑六忘了64位系统也能装32位PLSQL这件事。有些老教程里的PLSQL是32位的配套的Instant Client也必须是32位。在64位Windows上32位程序和64位DLL不能混用这个必须对上。不确定的话在任务管理器里看PLSQL进程有没有32位标注。这几条都是真金白银踩出来的尤其是第一条和第六条浪费过不少时间。把这几条记住能省下很多排查功夫。6. 一套可以直接抄的完整配置流程6.1 客户端配置清单把下面这些步骤按顺序过一遍一个标准的远程连接环境就成型了。我把它整理成清单方便对照检查确认PLSQL Developer的位数32或64下载对应位数的Instant Client Basic包。解压到纯英文无空格路径如D:\oracle\instantclient_19_19。系统环境变量PATH加入该目录新建TNS_ADMIN指向该目录新建NLS_LANG按服务器字符集设置。在目录下新建tnsnames.ora按模板写目标库条目。命令行执行tnsping 条目名确认返回OK。打开PLSQLPreferences里把Oracle Home和OCI Library指向Instant Client目录和oci.dll绝对路径。重启PLSQL登录框输入用户名密码Database填条目名或Easy Connect串Connect as选Normal。登录后执行select sysdate from dual;和select instance_name,version from v$instance;验证。6.2 服务器端配合清单如果你能登录服务器或者能和服务器管理员对接下面这几项让对面确认一遍监听器在运行lsnrctl status能看到Listen Endpoint、Service Summary、Instance Summary。监听器绑定地址是0.0.0.0或实际对外网卡IP不是127.0.0.1。监听端口默认1521在防火墙和安全组里已放行。目标服务名在Service Summary里状态READY。如果实例没注册执行ALTER SYSTEM REGISTER;手动注册。6.3 一套最小验证命令连上之后这几条SQL建议固定跑一遍确认拿到的确实是目标库select instance_name, host_name, version, status from v$instance; select name, value from v$parameter where name service_names; select sys_context(USERENV, DB_NAME) from dual; select name, value$ from sys.props$ where name in (NLS_CHARACTERSET, NLS_LANGUAGE);第一条确认实例和版本第二条确认服务名第三条确认库名第四条确认字符集。四条的返回信息拼起来就能准确判断你现在连的到底是哪个库、字符集是什么、版本多少。这比凭感觉判断靠谱得多尤其是环境多的时候很容易连串库。6.4 临时连不上时的降级排查路径如果上面都配好了还是连不上按这个顺序降级排查基本能定位到问题客户端tnsping不通 → 客户端网络配置问题tnsping报12541 → 网络或监听器问题。客户端telnet IP 1521不通 → 防火墙或监听绑定地址问题。服务器lsnrctl status正常但客户端telnet不通 → 防火墙/安全组问题。telnet通tnsping也通PLSQL登录报12514 → 服务名不匹配核对Service Summary。前面都通登录报01017 → 认证问题核对账号密码和锁定状态。全都通PLSQL闪退 → OCI位数或DLL依赖问题。这套路径的价值在于每一步都把问题范围缩小到确定的一层不会让你在错误的层反复折腾。远程连接Oracle说到底就是把这条链路上的每一环都验证一遍链路上任何一个环节的问题都有自己的特征报错看懂报错、按顺序验证就没有连不上的库。6.5 补充一个多环境切换的小技巧手上同时维护开发、测试、生产三套库的时候tnsnames.ora里条目会越堆越多。我的做法是给条目名加前缀比如DEV_、TEST_、PROD_然后在PLSQL登录历史里保存常用连接。另外可以在tnsnames.ora里用注释分段每个环境一块改的时候不容易看花眼。这种小习惯在环境多了之后能显著降低连错库的概率。还有一点tnsnames.ora是纯文本文件可以纳入版本管理当然密码不要写进去tnsnames里本来也不应该写密码。把配置当代码管换机器、重装环境的时候直接拉一份配置过来省去重新手配的时间。这个思路对有多个工作机的人来说很实用。我个人在实际操作中的体会是远程连接Oracle这件事难点从头到尾都不在PLSQL Developer这个工具本身而在于你对整条连接链路的理解。把客户端配置、网络、监听器、服务注册这四块分开看每块的验证手段和典型报错都清楚了剩下的就是按顺序排除。工具是死的链路是活的把链路想通了换任何客户端工具都一样能连上。
返回列表