2016-05-10 8 views
0

Я пытаюсь подключиться к удаленной базе данных Oracle в моем приложении perl. При запуске приложения появляется следующее сообщение об ошибке:Ошибка подключения DBI: ERROR OCINlsEnvironmentVariableGet (OCI_NLS_CHARSET_ID)

DBI connect('//XXX.XXX.XXX.XXX:1522/TEST','user','password') 
failed: ERROR OCINlsEnvironmentVariableGet(OCI_NLS_CHARSET_ID) 
Check NLS settings etc. at App.pm line 28. 

Мой App.pm

package App; 

use strict; 
use warnings; 

use DBI; 

my $instance = undef; 
BEGIN { 
    $ENV{OCI_NLS_CHARSET_ID} = "AMERICAN_AMERICA.CL8MSWIN1251"; 
    $ENV{ORACLE_HOME} = "path"; 
} 
sub get_instance { 
    $instance = bless {}, shift unless $instance; 
    return $instance; 
} 

sub new { 
    my ($caller) = @_; 
    my $class = ref($caller) || $caller; 
    return get_instance($class); 
} 

sub connect { 
    my $self = shift; 
    $self->{dbh} = DBI->connect('dbi:Oracle://XXX.XXX.XXX.XXX:1522/TEST', 'user', 'password'); 
} 

sub DESTROY { 
    my $self = shift; 
    $self->{dbh}->disconnect if $self->{dbh}; 
} 

1; 

NLS_PARAMETERS:

PARAMETER              VALUE 
---------------------------------------------------------------- ---------------------------------------------------------------- 
NLS_LANGUAGE              AMERICAN 
NLS_TERRITORY             AMERICA 
NLS_CURRENCY              $ 
NLS_ISO_CURRENCY             AMERICA 
NLS_NUMERIC_CHARACTERS           ., 
NLS_CALENDAR              GREGORIAN 
NLS_DATE_FORMAT             DD-MON-RR 
NLS_DATE_LANGUAGE            AMERICAN 
NLS_CHARACTERSET             CL8MSWIN1251 
NLS_SORT               BINARY 
NLS_TIME_FORMAT             HH.MI.SSXFF AM 
NLS_TIMESTAMP_FORMAT            DD-MON-RR HH.MI.SSXFF AM 
NLS_TIME_TZ_FORMAT            HH.MI.SSXFF AM TZR 
NLS_TIMESTAMP_TZ_FORMAT           DD-MON-RR HH.MI.SSXFF AM TZR 
NLS_DUAL_CURRENCY            $ 
NLS_NCHAR_CHARACTERSET           AL16UTF16 
NLS_COMP               BINARY 
NLS_LENGTH_SEMANTICS            BYTE 
NLS_NCHAR_CONV_EXCP            FALSE 

19 rows selected 

Я использую ActiveStat Perl на Windows 7. сервера ORACLE 11.2.0.2.0 x64 в Windows 2003. DBI 1.634. DBI-Oracle 1.74.

На сервере приложение успешно работает.

ответ

0

Вы используете библиотеки мгновенных сообщений Oracle Oracle? AFAIK Instant клиент поддерживает только WE8ISO8859P1 и AL32UTF8. Попробуйте использовать полный (толстый) клиент Oracle.

+0

I Используйте Мгновенный клиентский пакет. Загружен с http://www.oracle.com/technetwork/topics/winsoft-085727.html для версии 11.2.0.2.0 (Instant Client Package - Basic: все файлы, необходимые для запуска приложений OCI, OCCI и JDBC-OCI) –

+0

На сервере приложение успешно завершено –

+0

сервер содержит «полный» толстый клиент, который поддерживает все кодировки. – ibre5041

0
  1. Загрузите соответствующие пакеты мгновенных клиентов для своей платформы от http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html.

  2. Распакуйте пакеты в один каталог (например, «instantclient_11_2»).

  3. Установка загрузки библиотеки путь сетевой среды (например, LD_LIBRARY_PATH на Linux или PATH в Windows) в директорию, созданную на шаге 2.

И это работает без:

$ENV{OCI_NLS_CHARSET_ID} = "AMERICAN_AMERICA.CL8MSWIN1251"; 
$ENV{ORACLE_HOME} = "path";