You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建Oracle到Teradata数据库链接遇NativeErr=50404错误排查

Oracle到Teradata数据库链接问题排查(NativeErr = 50404)

问题描述

我在创建Oracle到Teradata的数据库链接时遇到问题:isql可正常运行,但通过数据库执行查询时出现“NativeErr = 50404”错误。以下是我的配置文件及日志信息,请问是否缺少必要配置?


配置文件信息

odbc.ini配置

[myteradatadb]
Description = TERRADATA
Driver = /opt/teradata/client/20.00/odbc_64/lib/tdataodbc_sb64.so
DBCName=192.168.1.7

initmyteradatadb.ora配置

HS_FDS_CONNECT_INFO = myteradatadb
HS_FDS_SHAREABLE_NAME = /opt/teradata/client/20.00/odbc_64/lib/tdataodbc_sb64.so

tnsnames.ora配置

myteradatadb =
    (DESCRIPTION =
        (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP) (HOST = localhost)(PORT = 1521))
        )
        (CONNECT_DATA =
            (SID = myteradatadb)
        )
        (HS = OK)
    )

listener.ora配置

SID_LIST_LISTENER =
  (SID_LIST =
        (SID_DESC = (PROGRAM = dg4odbc) (SID_NAME = myteradatadb) (ORACLE_HOME = /app/oracle/product/19.0.0/db_home))
  )

odbcinst.ini配置

[myteradatadb]
Description=Driver For TerraData
Driver=/opt/teradata/client/20.00/odbc_64/lib/tdataodbc_sb64.so

日志信息

Exiting hgolofns at 2025/04/30-08:31:09
Entered hgolofns at 2025/04/30-08:31:09
 libname=/opt/teradata/client/20.00/odbc_64/lib/tdataodbc_sb64.so, funcname=SQLStatisticsW
 symbol_peflctx=0x58e891cb
 hoaerr:0
Exiting hgolofns at 2025/04/30-08:31:09
Entered hgolofns at 2025/04/30-08:31:09
 libname=/opt/teradata/client/20.00/odbc_64/lib/tdataodbc_sb64.so, funcname=SQLTablesW
 symbol_peflctx=0x58e898ad
Entered hgolofn at 2025/04/30-08:31:09
HOSGIP for "HS_FDS_SHAREABLE_NAME" returned "/opt/teradata/client/20.00/odbc_64/lib/tdataodbc_sb64.so"
Exiting hgolofns at 2025/04/30-08:31:09
Exiting hgolofn, rc=0 at 2025/04/30-08:31:09
HOSGIP for "HS_OPEN_CURSORS" returned "50"
HOSGIP for "HS_FDS_FETCH_ROWS" returned "100"
HOSGIP for "HS_LONG_PIECE_TRANSFER_SIZE" returned "65536"
HOSGIP for "HS_NLS_NUMERIC_CHARACTERS" returned ",."
HOSGIP for "HS_KEEP_REMOTE_COLUMN_SIZE" returned "OFF"
HOSGIP for "HS_FDS_DELAYED_OPEN" returned "TRUE"
HOSGIP for "HS_FDS_WORKAROUNDS" returned "0"
HOSGIP for "HS_FDS_MBCS_TO_GRAPHIC" returned "FALSE"
HOSGIP for "HS_FDS_GRAPHIC_TO_MBCS" returned "FALSE"
treat_SQLLEN_as_compiled = 0
Exiting hgoinit, rc=0 at 2025/04/30-08:31:09
Entered hgolgon at 2025/04/30-08:31:09
 reco:0, name:DBC, tflag:0
Entered hgosuec at 2025/04/30-08:31:09
Exiting hgosuec, rc=0 at 2025/04/30-08:31:09
Entered hgopoer at 2025/04/30-08:31:09
hgopoer, line 240: got native error 10210 and sqlstate H; message follows...
[
Exiting hgopoer, rc=0 at 2025/04/30-08:31:09
hgolgon, line 204: calling SQLSetConnectAttr got sqlstate H
Exiting hgolgon, rc=28500 at 2025/04/30-08:31:09 with error ptr FILE:hgolgon.c LINE:204 ID:Connection Attribute: TRACE
Entered hgoexit at 2025/04/30-08:31:09
Exiting hgoexit, rc=0

问题分析与解决方案

核心问题定位

从日志关键信息calling SQLSetConnectAttr got sqlstate H和ID:Connection Attribute: TRACE可以看出:Oracle异构服务(DG4ODBC)尝试设置Teradata ODBC驱动的TRACE属性时失败,这是导致NativeErr = 50404的直接原因。isql能正常连接是因为它不会额外设置这类ODBC属性,而Oracle HS的默认配置会触发该冲突。

具体修复步骤

1. 补充init.ora的HS配置参数

修改initmyteradatadb.ora,添加禁用TRACE及Teradata连接必需的参数:

HS_FDS_CONNECT_INFO = myteradatadb
HS_FDS_SHAREABLE_NAME = /opt/teradata/client/20.00/odbc_64/lib/tdataodbc_sb64.so
# 禁用ODBC TRACE,解决属性设置失败问题
HS_FDS_TRACE_LEVEL = OFF
# 配置Teradata连接的用户名和密码(需与isql使用的账号一致)
HS_FDS_USER = <你的Teradata用户名>
HS_FDS_PASSWORD = <你的Teradata密码>
# 关闭统计功能,避免HS与Teradata ODBC的兼容性问题
HS_FDS_SUPPORT_STATISTICS = FALSE

2. 修正odbcinst.ini的驱动定义

Teradata ODBC驱动在odbcinst.ini中的标准命名格式需要调整,避免HS识别异常:

[Teradata]
Description=Teradata ODBC Driver
Driver=/opt/teradata/client/20.00/odbc_64/lib/tdataodbc_sb64.so
Setup=/opt/teradata/client/20.00/odbc_64/lib/tdataodbc_sb64.so
FileUsage=1

同时更新odbc.ini中的Driver字段为Teradata,保持配置一致。

3. 确保Oracle监听进程加载正确的环境变量

Oracle监听进程需要能访问Teradata ODBC的依赖库,在监听启动前设置以下环境变量(可添加到oracle用户的.bash_profile中):

export LD_LIBRARY_PATH=/opt/teradata/client/20.00/odbc_64/lib:$LD_LIBRARY_PATH
export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc

4. 重启Oracle监听服务

修改配置后,重启监听使配置生效:

lsnrctl stop
lsnrctl start

5. 验证数据库链接

重新创建并测试数据库链接:

CREATE DATABASE LINK teradata_link
CONNECT TO <用户名> IDENTIFIED BY <密码>
USING 'myteradatadb';

-- 测试查询
SELECT * FROM dual@teradata_link;

内容的提问来源于stack exchange,提问作者MIX 2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:06:08