0

I need to connect to an Oracle database from a perl script, it works in my tests and when using sqlplus, but not in production. This is a summary of the situation:

Oracle 11g XE (11.2.0.2.0) : (Test environment)
   sqlplus : OK
   perl    : OK

Oracle 11g    (11.2.0.4.0) : (Production environment)
   sqlplus : OK
   perl    : ERROR

The error reported is: Connect failed because target host or object does not exist

I have triple checked the connection settings and are not mistaken.

Specifics:

  • Test Server: Windows Server 2012
  • Production Server: Windows Server (Unknown version)
  • Client: Ubuntu 18.04 x64
  • Perl: 5.26.1
  • SQL*Plus: 12.2.0.1.0

SQL*Plus command:

sqlplus64 user/password@192.168.0.1/db_sid

Perl script:

#!/usr/bin/perl
use DBI;
$driver = "Oracle";
$sid    = "db_sid";
$host   = "192.168.0.1";
$dsn    = "DBI:$driver:sid=$sid;host=$host";
$dbh    = DBI->connect($dsn, "user", "password");

Note: I won't be able to test or execute anything in the production environment until next month.

What could be the issue?

  • The host is not found, perhaps a firewall issue. – Wernfried Domscheit Dec 23 '19 at 11:08
  • How do you connect with sqlplus? Usually you have to provide the port when you give SID and host. Typically you use the DB alias, see also metacpan.org/pod/DBD::Oracle#connect – Wernfried Domscheit Dec 23 '19 at 11:12
  • Does the perl script requires another port open that I'm not aware? Btw, I was connected directly to the server (cross cable). I have updated the question including the sqlplus command (the server is using the default port). Thanks for the link. In 11.2, DRCP may be enabled, and it might be related to that or any other option that the server requires (and that sqlplus command is using by default). – lepe Dec 24 '19 at 1:23
  • Try DBI:Oracle:192.168.0.1/db_sid for $dsn – Wernfried Domscheit Dec 24 '19 at 8:19
  • @WernfriedDomscheit : I will try that the next time and let you know if it worked. Thanks. – lepe Dec 25 '19 at 1:58
0

The connection string format is wrong. Use

$dsn = "DBI:$driver:$host/$sid";
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.