2011-06-29 18 views
5

Czy ktoś miał z tym jakiś sukces? Nie ma zbyt wielu referencji online i wyczerpałem wszystkie trafne wyniki w Google. Oto mój skrypt:Podłączanie do Teradata przez Perl

#!/usr/bin/perl 

use DBI; 
use DBD::ODBC; 

$user = "user"; 
$pw = "pw"; 
$ip = "192.168.1.0" 

#DBI->trace(DBD::ODBC->parse_trace_flags('odbconnection')); 

#my $connect_attrs = { PrintError => 0, RaiseError => 1, AutoCommit => 1 }; 

my $dbh = DBI->connect("dbi:ODBC:$ip", $user, $pw); 

Komunikat o błędzie:

DBI connect('192.168.1.0','user',...) failed: (no error string) at ./teradata.pl line 13 

Dwie linie, które są komentowane na zewnątrz są resztki z moich poprzednich bezowocnych prób połączenia z DB.

AKTUALIZACJA: Oto poprzednie starania, które zrobiłem z modułem DBD.

#!/usr/bin/perl 

use DBI; 

$user = "xxxx"; 
$pw = "xxxx"; 

my $dbh = DBI->connect("dbi:Teradata:tdsn", $user, $pw); 

Błąd:

DBI connect('tdsn','xxxx',...) failed: Unable to get host address. at ./teradata.pl line 12 

Druga próba:

#!/usr/bin/perl 

use DBI; 

$user = "xxxx"; 
$pw = "xxxx"; 

my $dbh = DBI->connect("dbi:Teradata:192.168.1.0", $user, $pw); 

Błąd:

DBI connect('192.168.1.0','xxxx',...) failed: Deprecated logons are not allowed by administrator. Upgrade client software to latest version. at ./teradata.pl line 12 

trzecie ...

#!/usr/bin/perl 

use DBI; 
use DBD::ODBC; 

$user = "xxxx"; 
$pw = "xxxx"; 

my $dbh = DBI->connect("dbi:ODBC:tdsn", $user, $pw); 

.odbc.ini

[ODBC] 
InstallDir    = /usr/odbc 
Trace   = 0 
TraceDll    = /usr/odbc/lib/odbctrac.so 
TraceFile    = /home/xxxx/odbctrace.log 
TraceAutoStop   = 0 

[ODBC Data Sources] 
default   = tdata.so 
testdsn   = tdata.so 

[default] 
Driver   = /usr/odbc/drivers/tdata.so 
Description    = Default DSN is Teradata 5100 
DBCName   = **ip_addr** 
LastUser    = DLPStats 
Username    = xxxx 
Password    = xxxx 
Database    = MSS_TEMP 
DefaultDatabase   = MSS_TEMP 

[tdsn] 
Driver=/usr/odbc/drivers/tdata.so 
Description=Teradata running Teradata V1R5.2 
DBCName=**ip_addr** 
LastUser= 
Username=xxxx 
Password=xxxx 
Database= 
DefaultDatabase= 

Błąd:

DBI connect('tdsn','xxxx',...) failed: (no error string) at ./teradata.pl line 13 

ODBCINST.INI

[ODBC DRIVERS] 
Teradata=Installed 

[Teradata] 
Driver=/usr/odbc/drivers/tdata.so 
APILevel=CORE 
ConnectFunctions=YYY 
DriverODBCVer=3.51 
SQLLevel=1 
+0

Moduł DBI zapewnia interfejs dla Teradata? Użyj modułu 'DBD :: Teradata' zamiast: – Rahul

+0

Próbowałem tego, ale ten moduł jest nieaktualny dla mojej wersji Teradata. Daje mi błąd dotyczący nieaktualnych poświadczeń logowania. – SemperFly

+0

Cóż, po prostu trochę googlowałem i okazało się, że prawie każdy nie był zadowolony z DBI LUB DBD :: ODBC dla Teradata. Jeszcze jedno mogę zasugerować, że ... spróbuj ze sterownikiem ODBC Teradata, który jest dostarczany z klientem Teradata i zobacz, czy pozwala ci przejść przez – Rahul

Odpowiedz

4

Musisz pobrać i zainstalować moduł Teradata DBD.

+0

Próbowałem już połączyć się z tym modułem; Dołączę skrypt i komunikat o błędzie. – SemperFly

1

$ ip nie może być adresem IP. Musi to być nazwa źródła danych ODBC, które jest znane menedżerowi sterowników ODBC. Musimy znać Twojego menedżera sterowników, aby pomóc dalej. Zakładając, że jest to unixODBC, otrzymasz plik odbcinst.ini, w którym sterownik teradanych musi zostać nazwany z linią wskazującą obiekt udostępniony sterownika. Następnie w pliku odbc.ini utworzysz źródło danych.

+0

Zorientowałem to wczoraj. Dodałem dodatkowe informacje do mojego postu. – SemperFly

+0

Sądzę więc, że (z tych plików ini) korzystasz z menedżera sterowników iODBC? Nie moja specjalizacja, ponieważ używam unixODBC. Jednak powiedziałbym, że z twoich plików "tdsn" jest prawidłowym DSN, więc ciąg DBI musi być "dbi: ODBC: tdsn". Jeśli to nie działa, ustaw i wyeksportuj DBI_TRACE = 15 = x.log i dodaj "DBI-> trace (DBD :: ODBC-> parse_trace_flags ('Odczyt połączenia | odbcunicode'));" przed połączeniem. Zobaczmy, co jest w x.log po uruchomieniu kodu. – bohica