当前位置:首页 > 问答 > 正文

ORA-06904错误远程连接不通,传输地址找不到咋整啊ORACLE报错处理

ORA-06904错误远程连接不通,传输地址找不到咋整啊ORACLE报错处理

ORA-06904错误是Oracle数据库在网络连接配置中一个比较典型的报错,它的完整错误描述通常是“ORA-06904: NET: 连接描述符中找不到传输地址”,就是你的客户端程序(比如SQL*Plus)拿着一个“地址条”(连接字符串)去找数据库服务器,但是这个“地址条”上的信息要么写错了,要么不完整,导致客户端根本不知道应该去哪个地方、用哪种方式敲门(建立网络连接),这个问题和数据库实例本身是否启动、监听器是否启动有关系,但更多的时候,问题出在客户端用于连接的配置上。

要解决这个问题,你不能只盯着一个地方看,需要像侦探一样,从客户端到服务器端,一步步排查线索,下面我们就来详细说说“咋整”。

第一步:先检查最明显的地方——客户端连接字符串

很多时候,问题就出在你输入的命令或者配置的连接信息里,如果你是用类似 sqlplus username/password@连接串 的方式登录,那么这个“连接串”就是首要怀疑对象。

  1. 检查TNSNAMES.ORA文件(客户端上的“通讯录”):这个文件就像是客户端的电话本,里面记录了“连接串”对应的详细服务器地址、端口号和数据库服务名,你需要找到这个文件(位置通常在$ORACLE_HOME/network/admin目录下),用文本编辑器打开,找到你使用的那个“连接串”对应的配置项。

    • 核对主机名(HOST):这里应该填写数据库服务器的IP地址或者能够被你的电脑正确解析的域名,你可以尝试用ping 主机名的命令,看看能不能通,如果ping不通,说明网络本身有问题,或者主机名写错了,在客户端电脑的hosts文件里手动把服务器IP和主机名绑定一下也能临时解决。
    • 核对端口号(PORT):默认是1521,但DBA可能改了别的端口,一定要确认这里写的端口号和服务器上监听器实际监听的端口号一致。
    • 核对服务名(SERVICE_NAME)或SID:新版本Oracle多用SERVICE_NAME,老版本可能用SID,这个信息必须和数据库实际创建的服务名一致,而不是随便写的,你可以让DBA在服务器上通过SELECT NAME FROM V$DATABASE;之类的命令查一下正确的服务名。
    • 检查文件格式:TNSNAMES.ORA文件对格式要求很严格,括号、等号都不能错,确保你的配置项没有多余的空格或者缺少括号。
  2. 试试简易连接语法:如果你不想依赖TNSNAMES.ORA文件,可以尝试使用Oracle的简易连接语法,直接在命令行里指定所有信息。sqlplus username/password@//服务器IP:端口/服务名,如果这样能连上,那百分百就是你的TNSNAMES.ORA文件配置有问题。

第二步:如果客户端配置看起来没问题,就该检查服务器端了

客户端“地址条”写对了,但服务器那边“没人开门”也不行,服务器端的“门卫”叫做监听器(Listener)

  1. 检查监听器状态:让DBA或者在服务器上运行lsnrctl status命令,这个命令会列出监听器的详细状态。
    • 监听器启动了吗?:如果命令报错或者说监听器没启动,那就需要用lsnrctl start命令启动它。
    • 监听器在监听正确的地址和端口吗?:在lsnrctl status的输出结果里,看“Listening Endpoints Summary”部分,这里会显示监听器正在监听的IP和端口,确认一下是不是和客户端配置里写的一样,有时候服务器有多个IP地址(比如本地回环127.0.0.1和真实网卡IP),监听器可能只绑定了其中一个,导致客户端从外部连不上。
    • 数据库服务注册上了吗?:继续看lsnrctl status的输出,找到“Services Summary”部分,这里应该列出你的数据库服务名,并且状态显示为“READY”或“BLOCKED”,如果这里空空如也,或者没有你的数据库服务,说明数据库实例没有向监听器成功注册,这可能是因为数据库没启动,或者动态注册有问题,可以尝试让DBA在数据库内执行ALTER SYSTEM REGISTER;命令强制注册一下,或者检查静态注册配置。

第三步:检查网络层面的连通性

即使两边软件配置都对,网络不通也是白搭。

  1. 用Telnet测试端口:在你的客户端电脑上,打开命令提示符(CMD),输入telnet 服务器IP 端口号telnet 192.168.1.100 1521),如果屏幕变黑,只有一个光标在闪,说明网络是通的,TCP连接能建立到监听器端口,如果提示“无法打开到主机的连接...”,那就说明网络不通,可能是防火墙(服务器本身的防火墙或者网络中间的防火墙)把端口给挡住了,需要联系网络管理员放行这个端口的访问。

总结一下排查流程:

就像一个快递员送包裹,ORA-06904错误就是“地址找不到”,你得:

  1. 先看快递单(客户端TNSNAMES.ORA或连接字符串):地址、门牌号(IP、端口)、收件人(服务名)写对了吗?
  2. 再问收件方小区(服务器端):门卫(监听器)上班了吗?他负责这个门牌号吗?收件人在家的登记簿上(服务注册)了吗?
  3. 最后检查道路(网络):从你这到小区的路通吗?有关卡(防火墙)拦着吗?

按照这个顺序,一步步仔细检查,绝大多数ORA-06904错误都能被解决,如果以上步骤都试过了还是不行,那可能涉及到更复杂的网络配置(如域名解析、Oracle命名方法配置等),这时候最好把客户端和服务器端的日志文件(如客户端的sqlnet.log、服务器端的listener.log)拿出来仔细分析,或者寻求资深DBA的帮助。

ORA-06904错误远程连接不通,传输地址找不到咋整啊ORACLE报错处理