Warum Perl-DBI beschweren sich über "fehlgeschlagen: FEHLER OCIEnvNlsCreate" wenn ich versuche eine Verbindung zu Oracle 11g?
Bin ich immer den folgenden Fehler beim herstellen einer Verbindung zu einer Oracle 11g-Datenbank mit einem einfachen Perl-Skript:
failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var or PATH (Windows) and or NLS settings, permissions, etc. at
Das Skript ist wie folgt:
#!/usr/local/bin/perl
use strict;
use DBI;
if ($#ARGV < 3) {
print "Usage: perl testDbAccess.pl dataBaseUser dataBasePassword SID dataBasePort\n";
exit 0;
}
my ($user, $pwd, $sid, $port) = @ARGV;
my $host = `hostname`;
my $dbh;
my $sth;
my $dbname = "dbi:Oracle:HOST=$host;SID=$sid;PORT=$port";
openDbConnection();
closeDbConnection();
sub openDbConnection() {
$dbh = DBI->connect ($dbname, $user ,$pwd , { RaiseError => 1}) || die "Database connection not made: $DBI::errstr";
}
sub closeDbConnection() {
#$sth->finish();
$dbh->disconnect();
}
Jemand dieses problem gesehen?
John, wenn Sie dieses Problem behoben haben, bitte denken Sie daran, wieder hierher kommen und "übernehmen" Sie Ihre Lieblings-Antwort. Wenn Sie ändern müssen, um etwas für Ihre Umwelt, können Sie sogar posten Sie das - Lösung und übernehmen Sie es, und dann "up-vote" die Antworten, die geholfen, die Sie dort bekommen. Diese werden ordnungsgemäß in den Ruhestand die Frage nach dem SO-Archive.
InformationsquelleAutor John | 2010-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Check Ihrer Oracle-client-Konfiguration (einschließlich, wie die Botschaft sagt, ORACLE_HOME), überprüfen Sie die Datei Berechtigungen, etc. Es ist unwahrscheinlich, dass DBI per se hat nichts mit dem problem zu tun, und ich weiß, für eine Tatsache, dass DBD::Oracle ist kompatibel mit 11g-Bibliotheken (zumindest die 11g-InstantClient).
README
undREADME.help.txt
.Wenn ich ORACLE_HOME um die 10g-Instanz, es ist in der Lage, eine Verbindung zu den 11g-Datenbank, jedoch wenn ich ORACLE_HOME auf die 11g-Instanz erhalte ich den Fehler...
OK, so ORACLE_HOME geändert wird, wenn es Verweise zu den 10g-Binärdateien in Ihrem PFAD, werden Sie das zurücksetzen dieser auch für Ihre 11g-Kollegen als gut?
Nicht nur ändern ORACLE_HOME auf eine andere oracle-client-Bibliothek, OHNE die Neuerstellung DBD::Oracle - es wird höchstwahrscheinlich nicht funktionieren. Wenn Sie bauen DBD::Oracle untersucht die header-Dateien und der client um zu sehen, was version Sie haben, und baut ein DBD::Oracle für Ihre jeweilige client-Bibliotheken. Es gibt eine Last mehr Gründe, zu viele um in einem Kommentar.
InformationsquelleAutor hobbs
use DBD::Oracle;
in Ihre perl-Skript.Dies machte das problem Weg für mich.
InformationsquelleAutor Shib
Afther upgrade Oracle form 10.2.0.4 auf 10.2.0.5 meine Perl-CGI nicht funktioniert, der Fehler.log-Datei von Apache die Fehlermeldung:
hinzufügen der folgenden Richtlinie das problem zu lösen:
InformationsquelleAutor VegaX
Sorry, um diesen thread wieder zum Leben erwecken, aber ich habe versucht, dieses Problem zu lösen, für Wochen. Nirgends konnte ich finden, dass das, was schließlich erledigt es für mich.
Umgebung: RedHat 6.5, Oracle Instant Client 12.1, Apache 2.2
Was löste es bei mir aus:
Ändern Sie die Berechtigungen für das Verzeichnis, in dem Oracle Instant Client installiert ist., das muss auch der Wert des LD_LIBRARY_PATH. Das Verzeichnis war nicht zugänglich "anderen", nur Besitzer und Gruppe. Dieser Befehl machte den ganzen Unterschied:
Hatte ich auch schon versucht zu erstellen, jede mögliche Kombination von ORACLE_HOME und LD_LIBRARY_PATH. (Selbst "lösche" ORACLE_HOME; ich fand Vorschläge, das würde das Problem lösen, da Instant Client benötigt nur LD_LIBRARY_PATH und !NICHT! ORACLE_HOME.) Nichts half, bis ...
es traf mich, weiter zu schauen in der Fehlermeldung:
Berechtigungen Stichwort!
Hoffe, dies hilft jemand anderes!
Danke! Hinzugefügt, etwas mehr text zu den tatsächlichen Lösungen. Ich war so begierig, zu teilen, wenn ich das problem gefunden. Also ich war wohl nicht zu pädagogischen =) Fühlen Sie sich frei, es zu ändern, wenn Sie denken, dass ist fehlende information.
Für mich war die Lösung ein Teil von dem, was Sie hier schrieb: ich musste nur LD_LIBRARY_PATH um den Pfad zu dem instant-client-Verzeichnis.
InformationsquelleAutor Joakim
Überprüfen Sie die
#!/usr/bin/perl
(erste Zeile Ihres Skripts) ist die richtige perl-version, die Sie verwenden möchten, auch !InformationsquelleAutor José
Vorherigen Antworten nicht dieses problem zu lösen, aber Sie haben mich in die richtige Richtung: Die gestartete Umgebung fehlte die
DYLD_LIBRARY_PATH
für Oracle instantclient. Sie können überprüfen, durch den Aufruf:launchctl export
oder
launchctl getenv variable_name
in OS X 10.10Verglich ich die Ausgabe von meiner .bash_profile und fand, dass der Weg zu instanclient war nicht in
launchctl PATH
undDYLD_LIBRARY_PATH
- Nachdem ich Sie Hinzugefügt mit folgenden gearbeitet:InformationsquelleAutor Spencer
Die environment-variable verwendet, um die Oracle-Bibliotheken können unterschiedlich sein, von einem system zu einem anderen. Auf den meisten Systemen, verwenden LD_LIBRARY_PATH es kann aber auch sein LIBPATH (insbesondere auf AIX), DYLD_LIBRARY_PATH, oder vielleicht auch anderen.
InformationsquelleAutor tprocter
Ich ging auch über das gleiche Problem. In meinem Fall Umgebungsvariable ORACLE_HOME falsch war.
InformationsquelleAutor krish___na