Как подключиться к экземпляру контейнера, используя имя службы с 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";