【发布时间】:2013-04-19 23:33:24
【问题描述】:
这两天我一直在纠结这个问题:
我正在尝试获取一个 perl 脚本来与 Oracle 数据库交互。我有一个新服务器,我想在上面部署我的应用程序。该脚本以前有效。
这是我到目前为止所做的:
将我的 tnsnames.ora 文件放在 Instantclient/network/admin 中:
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 时遇到了同样的问题。我假设然后名称解析不正确。网上的注释说 DBI 应该使用与 SQL*Net 相同的分辨率。似乎也有一些迹象表明 64 位/32 位 oracle 与 perl 不匹配可能会导致此问题,但我似乎没有成功切换驱动程序。
-
此外,该名称在 toad 内部有效,并引用包含 ldap.ora 和 sqlnet.ora 的同一即时客户端目录。
标签: perl oracle11g dbi solaris-10 tnsnames