leng11hang 2025-08-18 15:40 采纳率: 0%
浏览 15

ORACLE连接sqlsever

求解决方案:
ORA-28545: 连接代理时 Net8 诊断到错误
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: 紧接着 2 lines (起自 NEWHIS)

  • 写回答

6条回答 默认 最新

  • 檀越@新空间 2025-08-18 15:41
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你遇到的错误信息是:

    ORA-28545: 连接代理时 Net8 诊断到错误 Unable to retrieve text of NETWORK/NCR message 65535
    ORA-02063: 紧接着 2 lines (起自 NEWHIS)
    

    这是一个典型的 Oracle 链接 SQL Server 时出现的问题,通常发生在使用 Oracle 的 Heterogeneous Services (HS) 模块连接非 Oracle 数据库(如 SQL Server)时。以下是详细的解决方案和排查步骤。


    一、问题分析

    1. 错误原因

    • ORA-28545: 表示 Oracle 在连接 SQL Server 时,无法获取网络协议消息,可能是由于以下原因之一:

      • SQL Server 的 ODBC 驱动配置不正确
      • Oracle Heterogeneous Services 配置有误
      • 网络连接问题(如防火墙、端口未开放)
      • SQL Server 的监听服务未正常运行
      • Oracle 的 init.oralistener.ora 配置文件设置不当
    • ORA-02063: 表示在执行查询时,Oracle 与远程数据库之间的连接中断或超时。


    二、解决方案

    1. 检查 SQL Server 的 ODBC 驱动配置

    步骤:

    • 确保 SQL Server 的 ODBC 驱动已正确安装并配置。
    • 打开“ODBC 数据源管理器” → “系统DSN” → 查看是否有一个指向 SQL Server 的 DSN(例如 SQLServerDSN)。
    • 测试该 DSN 是否可以成功连接到 SQL Server。

    如果 DSN 无法连接,请重新安装或更新 ODBC 驱动。


    2. 配置 Oracle Heterogeneous Services

    确保 Oracle 的 hs 相关参数已正确配置。

    修改 init.oraspfile 文件

    HS_FDS_CONNECT_INFO = "DSN=SQLServerDSN;UID=your_user;PWD=your_password"
    HS_FDS_TRACE_LEVEL = 0
    HS_FDS_TRACE_FILE_NAME = /u01/oracle/admin/your_instance/trace/hstrace.log
    HS_FDS_SHARE_MEMORY = FALSE
    HS_FDS_RECOVERY_ACCOUNT = "HR/HR@localhost"
    

    注意: HS_FDS_CONNECT_INFO 中的 DSN 必须与你在 ODBC 中配置的一致。


    3. 修改 listener.ora 文件

    确保 Oracle 的监听器支持 HS 的连接。

    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521))
        )
      )
    
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = your_sid)
          (ORACLE_HOME = /u01/oracle/product/12.2.0/dbhome_1)
          (PROGRAM = hsodbc)
          (ENVS = "LD_LIBRARY_PATH=/usr/lib")
        )
      )
    

    注意: PROGRAM = hsodbc 是必须的,表示使用 ODBC 驱动连接。


    4. 配置 tnsnames.ora 文件

    添加一个用于连接 SQL Server 的 TNS 别名:

    NEWHIS =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521))
      )
      (CONNECT_DATA =
        (SID = your_sid)
      )
      (HS = OK)
    

    注意: HS = OK 表示启用 Heterogeneous Services 支持。


    5. 启动监听器和 Oracle 实例

    lsnrctl stop
    lsnrctl start
    

    启动 Oracle 实例(如果是 PDB 可以使用 sqlplus / as sysdba 登录后启动)。


    6. 测试连接

    使用 sqlplus 测试连接:

    sqlplus "user/pass@newhis"
    

    如果连接成功,则说明配置正确;否则查看日志文件 /u01/oracle/admin/your_instance/trace/hstrace.log 获取详细错误信息。


    7. 检查防火墙和网络

    确保以下几点:

    • SQL Server 的 1433 端口(默认)是否开放
    • Oracle 服务器与 SQL Server 之间的网络是否连通
    • 防火墙是否允许 TCP 通信

    三、常见错误排查建议

    | 错误 | 原因 | 解决方法 | |------|------|----------| | ORA-28545 | 无法获取网络消息 | 检查 ODBC 配置、HS 参数、网络连接 | | ORA-02063 | 连接中断 | 检查 SQL Server 是否可用、网络延迟、超时设置 | | ORA-12154 | 无法解析连接字符串 | 检查 tnsnames.ora 配置是否正确 |


    四、代码示例(修改后的 init.ora 配置)

    # Oracle Heterogeneous Services 配置
    HS_FDS_CONNECT_INFO = "DSN=SQLServerDSN;UID=sa;PWD=your_password"
    HS_FDS_TRACE_LEVEL = 0
    HS_FDS_TRACE_FILE_NAME = /u01/oracle/admin/orcl/trace/hstrace.log
    HS_FDS_SHARE_MEMORY = FALSE
    HS_FDS_RECOVERY_ACCOUNT = "HR/HR@localhost"
    

    五、总结

    要解决 ORA-28545ORA-02063 错误,关键在于:

    1. 正确配置 ODBC 驱动
    2. 合理设置 Oracle Heterogeneous Services
    3. 确保网络连接通畅
    4. 检查日志文件定位具体问题

    如果你能提供更具体的环境信息(如 Oracle 版本、SQL Server 版本、操作系统等),我可以进一步帮你定制解决方案。

    如有需要,我也可以为你生成完整的 init.oralistener.oratnsnames.ora 配置模板。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月18日