1

私はこの問題について 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 ファイルを使用せずにコードに接続できますが、使用しようとすると壊れます。

助言がありますか?

4

2 に答える 2