2010-05-26 16 views
5

मैं एक साधारण पर्ल स्क्रिप्ट का उपयोग कर एक Oracle 11g डेटाबेस से कनेक्ट निम्न त्रुटि हो रही है:जब मैं ओरेकल 11 जी से कनेक्ट करने का प्रयास करता हूं तो पर्ल की डीबीआई "विफल: त्रुटि OCIEnvNlsCreate" के बारे में शिकायत क्यों करती है?

failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var or PATH (Windows) and or NLS settings, permissions, etc. at 

स्क्रिप्ट इस प्रकार है:

#!/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(); 
} 

किसी को भी करने से पहले इस समस्या को देखा है?

+0

जॉन, जब आप यह तय करते हैं, तो कृपया यहां वापस आएं और अपने पसंदीदा उत्तर को "स्वीकार करें" याद रखें। अगर आपको अपने पर्यावरण के लिए कुछ संशोधित करना है, तो आप * उस * समाधान को पोस्ट कर सकते हैं और इसे स्वीकार कर सकते हैं, और उसके बाद उन उत्तरों को "अप-वोट" कर सकते हैं जो आपको वहां पहुंचने में मदद करते हैं। यह एसओ अभिलेखागार के लिए सवाल ठीक से सेवानिवृत्त होगा। – Prune

उत्तर

6

अपने ओरेकल क्लाइंट कॉन्फ़िगरेशन (जैसे संदेश कहता है, ORACLE_HOME), फ़ाइल अनुमतियां जांचें, आदि की जांच करें। यह संभावना नहीं है कि डीबीआई प्रति से समस्या के साथ कुछ भी करने के लिए, और मुझे पता है कि डीबीडी :: ओरेकल 11 जी पुस्तकालयों (कम से कम 11 जी InstantClient) के साथ संगत है।

+2

[संपूर्ण समस्या निवारण जानकारी] (http://search.cpan.org/dist/DBD-Oracle/) - फ़ाइलों 'README' और 'README.help.txt' से शुरू करें। – daxim

+0

यदि मैं 10 जी उदाहरण के लिए ORACLE_HOME सेट करता हूं, तो यह 11 जी डेटाबेस से कनेक्ट करने में सक्षम है, हालांकि अगर मैं 11 जी इंस्टेंस में ORACLE_HOME सेट करता हूं तो मुझे त्रुटि मिलती है ... – John

+0

ठीक है तो अगर 10 जी बाइनरी के संदर्भ हैं तो ORACLE_HOME बदल गया है अपने पैथ में क्या आप उन्हें अपने 11 जी समकक्षों को भी रीसेट कर रहे हैं? –

3
  • पर्ल मॉड्यूल स्थापित DBD::Oracle
  • use DBD::Oracle; अपने पर्ल स्क्रिप्ट में जोड़ें।

इससे समस्या मेरे लिए दूर हो गई। निम्नलिखित निर्देश समस्या का समाधान जोड़ने

DBI connect('DB','user',...) failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var or PATH (Windows) and or NLS settings, permissions, etc. at ... OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var or PATH (Windows) and or NLS settings, permissions, etc.! at ...

:

2

afther ओरेकल रूप 10.2.0.4 उन्नयन 10.2.0.5 करने के लिए मेरे पर्ल-सीजीआई काम नहीं कर रहा, अपाचे की error.log फ़ाइल त्रुटि थी

my $ORACLE_HOME = "/usw/app/oracle/product/10.2"; 
$ENV{ORACLE_HOME}=$ORACLE_HOME; 
0

#!/usr/bin/perl (अपनी स्क्रिप्ट की पहली पंक्ति) की जांच करें सही पर्ल संस्करण है जिसका आप भी उपयोग करना चाहते हैं!

0

पिछला उत्तर इस समस्या को हल नहीं करते हैं, लेकिन उन्होंने मुझे सही दिशा में इंगित किया: लॉन्च वातावरण में ओरेकल तत्काल के लिए DYLD_LIBRARY_PATH गुम था। आप को फोन करके देख सकते हैं: launchctl export

या

ओएस में launchctl getenv variable_name एक्स 10.10

मैं अपने .bash_profile से उत्पादन की तुलना की और पाया कि instanclient के लिए पथ launchctl PATH और DYLD_LIBRARY_PATH में नहीं था - एक बार मैं निम्नलिखित के साथ उन्हें जोड़ा गया:

launchctl setenv PATH /path/to/instantclient 
launchctl setenv DYLD_LIBRARY_PATH /path/to/instantclient 
2

इस धागे को फिर से जीवित लाने के लिए खेद है, लेकिन मैं इस मुद्दे को सप्ताहों के लिए हल करने का प्रयास कर रहा हूं। मुझे कहीं नहीं मिला कि आखिरकार मेरे लिए यह हल हो गया।

पर्यावरण: RedHat 6.5, ओरेकल त्वरित ग्राहक 12.1, अपाचे 2.2

इसमें मेरे लिए क्या हल: बदलें निर्देशिका जहां ओरेकल त्वरित क्लाइंट स्थापित किया गया है की अनुमति है, जो भी की मान होना चाहिए। LD_LIBRARY_PATH। निर्देशिका "अन्य", बस मालिक और समूह तक पहुंच योग्य नहीं थी। मैं ORACLE_HOME और LD_LIBRARY_PATH के हर संभव संयोजन बनाने के लिए कोशिश कर रहा था

# chmod o+rx INSTANTCLIENT-DIRECTORY 

: यह आदेश पूरे फर्क पड़ा।(यहां तक ​​कि "अनसेटिंग" ORACLE_HOME; मुझे ऐसे सुझाव मिले जो समस्या को हल करेंगे, क्योंकि तत्काल ग्राहक को केवल LD_LIBRARY_PATH की आवश्यकता है और नहीं! ORACLE_HOME।) कुछ भी मदद नहीं मिली ... यह मुझे त्रुटि संदेश में आगे देखने के लिए मारा:

failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var 
    or PATH (Windows) and or NLS settings, permissions, etc. 

अनुमति कुंजी शब्द होने के नाते!

उम्मीद है कि यह किसी और की मदद करेगा!

+0

समाधान को स्पष्ट करने के लिए कृपया थोड़ा और स्पष्टीकरण जोड़ें। हमारे कुछ नागरिक अंग्रेजी में धाराप्रवाह नहीं हैं, जैसे कि अंतर्निहित उत्तर छोड़कर उन्हें समाधान में नहीं ले जाया जा सकता है। – Prune

+0

धन्यवाद! वास्तविक समाधान में कुछ और पाठ जोड़ा गया। जब मुझे समस्या मिली तो मैं इसे साझा करने के लिए उत्सुक था। तो शायद मैं बहुत शैक्षिक नहीं था =) अगर आपको लगता है कि गुम जानकारी है तो इसे और अधिक बदलने के लिए स्वतंत्र महसूस करें। – Joakim

+0

मेरे लिए समाधान यहां आपने जो लिखा है उसका हिस्सा था: मुझे तत्काल ग्राहक निर्देशिका के पथ पर LD_LIBRARY_PATH सेट करने की आवश्यकता थी। –

0

ओरेकल लाइब्रेरी निर्दिष्ट करने के लिए उपयोग किए जाने वाले पर्यावरण चर एक सिस्टम से दूसरे सिस्टम में भिन्न हो सकते हैं। अधिकांश प्रणालियों पर, LD_LIBRARY_PATH का उपयोग करें, लेकिन यह LIBPATH (विशेष रूप से AIX पर), DYLD_LIBRARY_PATH, या शायद अन्य भी हो सकता है।

0

मैं भी एक ही मुद्दे से गुजर गया। मेरे मामले में ORACLE_HOME पर्यावरण चर गलत था।

संबंधित मुद्दे