【发布时间】:2020-03-09 12:11:50
【问题描述】:
我一直在尝试使用 python 以编程方式从 linux ec2 机器连接到 teradata(在本地服务器上)。但程序因错误而失败。
以下是我使用的详细信息:
环境变量:
export ODBCINI=/opt/teradata/client/16.20/odbc_64/odbc.ini
export ODBCINST=/opt/teradata/client/16.20/odbc_64/odbcinst.ini
export LD_LIBRARY_PATH=/opt/teradata/client/16.20/odbc_64/lib
odbcinst.ini
[ODBC Drivers]
Teradata Database ODBC Driver 16.20=Installed
[Teradata Database ODBC Driver 16.20]
Description=Teradata Database ODBC Driver 16.20
Driver=/opt/teradata/client/16.20/odbc_64/lib/tdataodbc_sb64.so
# Note: Currently, Data Direct Driver Manager does not support Connection Pooling feature.
odbc.ini
[ODBC]
# For Data Direct to load its error messages
# Data Direct Driver Manager looks for the messages here:
# "/opt/teradata/client/16.20/locale/xx_xx/LC_MESSAGES/"
InstallDir=/opt/teradata/client/16.20/odbc_64
Trace=no
Pooling=yes
[ODBC Data Sources]
Teradata ODBC DSN=Teradata Database ODBC Driver 16.20
[Teradata ODBC DSN]
# This key is not necessary and is only to give a description of the data source.
Description=Teradata Database ODBC Driver 16.20
# Driver: The location where the ODBC driver is installed to.
Driver=/opt/teradata/client/16.20/odbc_64/lib/tdataodbc_sb64.so
# Required: These values can also be specified in the connection string.
DBCName=
UID=
PWD=
# Optional
AccountString=
CharacterSet=ASCII
DatasourceDNSEntries=
DateTimeFormat=AAA
DefaultDatabase=
DontUseHelpDatabase=0
DontUseTitles=1
EnableExtendedStmtInfo=1
EnableReadAhead=1
IgnoreODBCSearchPattern=0
LogErrorEvents=0
LoginTimeout=20
MaxRespSize=65536
MaxSingleLOBBytes=4000
MaxTotalLOBBytesPerRow=65536
MechanismName=
NoScan=0
PrintOption=N
retryOnEINTR=1
ReturnGeneratedKeys=N
SessionMode=System Default
SplOption=Y
TABLEQUALIFIER=0
TCPNoDelay=1
TdmstPortNumber=1025
UPTMode=Not set
USE2XAPPCUSTOMCATALOGMODE=0
UseDataEncryption=0
UseDateDataForTimeStampParams=0
USEINTEGRATEDSECURITY=0
UseSequentialRetrievalOnly=0
UseXViews=0
EnableUDFUpload=0
UDFUploadPath=Please enter the UDF folder path
这是连接到 Teradata 的 Python 代码:
import teradata
udaExec=teradata.UdaExec(odbcLibPath="/opt/teradata/client/16.20/odbc_64/lib/libodbc.so",appName="testconnec", version="1.0",logConsole=False)
session = udaExec.connect(method="odbc", system="TeraDev",username="myusername", password="mypassword", driver="Teradata Database ODBC Driver 16.20");
执行后出错
teradata.api.DatabaseError: (439, u"[08001] [Teradata][WSock32 DLL] (439) WSA E HostUnreach: The Teradata server can't currently be reached over this network")
我在这里错过了什么?
【问题讨论】:
-
从你的 linux 机器上,你可以通过 telnet 到你的 teradata 服务器的 1025 端口吗?
-
我也没有看到您的 odbc.ini 中实际定义的 DSN。
-
此错误来自 TCP 套接字层,通常表示防火墙或某些与网络相关的配置正在阻止从客户端到数据库服务器上端口 1025 的流量。 (您不需要 DSN,因为您的连接字符串是带有
system=的“无 DSN”。)