Как подключиться к экземпляру контейнера, используя имя службы с ORACLE DBI для perl

Я не Perl-кодер, я пытаюсь использовать ora2pg Perl-программа для преобразования оракула в postgresql.

Я получаю ошибку DBI.

У меня есть база данных XE в подключаемой базе данных, к которой я могу получить доступ через sqlplus и java.

Мой экземпляр работает, мой слушатель работает.

Для подключения из sql * plus я использую.

alias sqlpadxe='export ORACLE_SID=XE;. oraenv;sqlplus aerodemo/xxxxxxx@xepdb1'

lsnrctl status дает:

    Service "xepdb1" has 1 instance(s).
  Instance "XE", status READY, has 1 handler(s) for this service...

xepdb1 это услуга, а не SID

Сообщение от DBI говорит, чтобы проверить мои разрешения дома оракула.

Я могу CD $ORACLE_HOME/network/admin и я могу cat tnsnames.ora,

Я получаю сообщение об ошибке:

[2019-07-29 15:39:35] Trying to connect to database: dbi:Oracle:host=localhost;sid=xepdb1;port=1526
DBI connect('host=localhost;sid=xepdb1;port=1526','aerodemo',...) failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var  or PATH (Windows) and or NLS settings, permissions, etc. at /usr/local/share/perl5/Ora2Pg.pm line 1625.
[2019-07-29 15:39:35] FATAL: -1 ... ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var  or PATH (Windows) and or NLS settings, permissions, etc.

Если я пытаюсь использовать имя_сервиса, я получаю это:

[2019-07-29 15:41:59] Trying to connect to database: dbi:Oracle:host=localhost;service_name=xepdb1;port=1526
DBI connect('host=localhost;service_name=xepdb1;port=1526','aerodemo',...) failed: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var  or PATH (Windows) and or NLS settings, permissions, etc. at /usr/local/share/perl5/Ora2Pg.pm line 1625.
[2019-07-29 15:41:59] FATAL: -1 ... ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var  or PATH (Windows) and or NLS settings, permissions, etc.

Итак, что такое "OCIEnvNlsCreate"?

https://community.oracle.com/thread/4081480

мой LD_LIBRARY_PATH является /opt/oracle/product/18c/dbhomeXE/lib

Oracle XE 18-й версии огромен, имеет полный набор функций базы данных enteprise, трудно поверить, что в нем отсутствуют какие-либо компоненты OCI.

Я попытался установить новый мгновенный клиент, но он конфликтует с моими базами данных:

sudo rpm -i oracle-instantclient19.3-basiclite-19.3.0.0.0-1.x86_64.rpm 
error: Failed dependencies:
oracle-xe conflicts with oracle-instantclient19.3-basiclite-19.3.0.0.0-1.x86_64
oracle-database-xe-18c conflicts with oracle-instantclient19.3-basiclite-19.3.0.0.0-1.x86_64

Обновление: это что-то в ora2pg модуль perl для преобразования базы данных oracle в postgresql. Я говорю это, потому что следующий код работает.

#!/usr/bin/perl
use strict;
use DBI;
my $ORACLE_DSN=$ENV{'ORACLE_DSN'};
my $ORACLE_USER=$ENV{'ORACLE_USER'};
my $ORACLE_PWD=$ENV{'ORACLE_PWD'};
print "ORACLE_DSN: $ORACLE_DSN\n";
print "ORACLE_USER: $ORACLE_USER\n";
my $dbh = DBI->connect($ORACLE_DSN,$ORACLE_USER,$ORACLE_PWD);
print "I am alive\n";
print "handle is $dbh\n";

0 ответов

Другие вопросы по тегам