我已经把头发拉出这个问题两天了:
我正在尝试使用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
My 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文件的情况下连接到代码,但是当我尝试使用它时,它会中断。
有什么建议吗?
答案 0 :(得分:1)
不确定是否有帮助,但以下内容对我有用:
使用tnsnames.ora进行本地连接(在$ ORACLE_HOME / network / admin目录中):
my $db = DBI->connect( "dbi:Oracle:mydatabase", "scott", "tiger" );
并且不使用tnsnames.ora进行连接:
my $db = DBI->connect("dbi:Oracle:host=$host;sid=$sid;port=1521",$user,$passwd)
|| die( $DBI::errstr . "\n" );
必须事先定义$ host,$ sid。
答案 1 :(得分:0)
这是一个旧帖子,但是问题通常是连接问题。要解决此问题,您需要确保在端口1521上允许从客户端到服务器端的连接。您可以通过在客户端“ telnet 1521”上发出此命令来执行测试,您应该会收到一个空白屏幕,指示连接成功进入数据库。否则,路径之间将存在ACL或防火墙阻止端口1521。