Я потянув меня за волосы над этой проблемой в течение двух дней теперь:Ошибка ORA-12154 на DBI-> подключиться к базе данных Oracle с Oracle Instant Client в Solaris 10
Я пытаюсь получить Perl скрипт для взаимодействия с базой данных Oracle. У меня есть новый сервер, на котором я хочу развернуть свое приложение. Этот скрипт ранее работал.
Вот что я сделал до сих пор:
Размещенные мой файл tnsnames.ora в instantclient/сети/администратора:
ls -la network/admin/
total 8
drwxrwxrwx 2 m staff 512 Apr 19 09:54 .
drwxrwxrwx 3 m staff 512 Mar 28 15:56 ..
-rwxrwxrwx 1 m staff 777 Apr 19 09:54 tnsnames.ora
Мой сценарий Perl выглядит следующим образом:
12 use CGI;
13 use DBI;
14 use Data::Dumper;
15 use strict;
16
28 $ENV{ORACLE_HOME} = "/xxx/instantclient/";
29
32 $ENV{'LD_LIBRARY_PATH'} = "xxx/instantclient/lib";
33
35 use DBD::Oracle;
36
37 print "DBI::VERSION: $DBI::VERSION\n";
38 print "$DBD::Oracle::VERSION\n";
66 my $dbh = DBI->connect("dbi:Oracle:host=computer;port=1521;sid=mydatabase", "user", "pass");
67 my $sth = $dbh->prepare("SELECT sysdate FROM dual");
68 my $rv = $sth->execute;
69 DBI::dump_results($sth) if $rv;
70 $dbh->disconnect;
71
72 print "$database $dbUser $dbPassword \n";
73
74 my $dbh = DBI->connect($database, $dbUser, $dbPassword) or die("PROBLEM WITH LINE:\n$! , stopped");
Этот сценарий производит этот вывод:
DBI::VERSION: 1.609
DBD::Oracle version: 1.24
'19-APR-13'
1 rows
dbi:Oracle:mydatabase user pass
DBI connect('mydatabase','user',...) failed: ORA-12154: TNS:could not resolve the connect identifier specified (DBD ERROR: OCIServerAttach) at ./code.pl line 74
Мой файл tnsnames.ora содержит следующую запись:
mydatabase =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = computer)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = service.computer.com)
)
)
Этот файл tnsnames.ora был скопирован с рабочей машины, поэтому я уверен, что он работает.
Странная вещь, я могу подключиться к коду без использования файла tnsnames.ora, но когда я пытаюсь его использовать, он ломается.
Любые предложения?
У меня такая же проблема, и у меня нет ответа, но я хочу добавить дополнительные примечания. Сначала у меня такая же проблема, используя ldap.ora. Я _assuming_, тогда имена не будут корректно разрешаться. Заметки в Интернете говорят о том, что DBI должен использовать то же разрешение, что и SQL * Net. Также, похоже, есть некоторые признаки того, что 64-битный/32-битный оракул для несовместимости perl может вызвать это, но я, похоже, не добился успеха при переключении драйверов. – nick
Кроме того, имя работает внутри жабы и ссылается на тот же каталог мгновенного клиента, который содержит ldap.ora и sqlnet.ora. – nick