【问题标题】:It says "The Teradata Server can't currently be reached over this network" when i'm trying to connect Teradata using Python当我尝试使用 Python 连接 Teradata 时,它显示“当前无法通过此网络访问 Teradata 服务器”
【发布时间】: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”。)

标签: python teradata


【解决方案1】:

我遇到了同样的问题,我运行了“pdestate -a”,结果出现了“PDESTATE HARDSTOP/DOWN”。意味着数据库服务没有启动和运行。我输入了“/etc/init.d/tpa start”,然后又输入了“/etc/init.d/tgtw start”,然后又输入了“pdestate -a”,这次的结果是“PDESTATE RUN/STARTED”。

Tldr;在尝试通过脚本连接之前启动数据库服务。

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    相关资源
    最近更新 更多