创建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
相关产品推荐
相关产品推荐

