私はこの問題について 2 日間、頭を悩ませてきました。
Oracle データベースと連携するための perl スクリプトを取得しようとしています。アプリケーションをデプロイしたい新しいサーバーがあります。このスクリプトは以前は機能していました。
これまでに行ったことは次のとおりです。
私の 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 ファイルを使用せずにコードに接続できますが、使用しようとすると壊れます。
助言がありますか?