Ошибка базы данных: ошибка при попытке получить текст для ошибки ORA-12154 - Google Colab

Я получаю следующую ошибку при попытке создать соединение в Google colab с OracleDB с помощью cx_Oracle:

DatabaseError: Ошибка при попытке получить текст для ошибки ORA-12154

Я следовал этому коду, чтобы подключить мою базу данных к Google Colab:

https://medium.com/@FranckPachot/a-jupyter-notebook-on-google-collab-to-connect-to-the-oracle-cloud-atp-5e88b12282b0

! ls -l oracle-instantclient*-basiclite-*.rpm || wget https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-basiclite-19.3.0.0.0-1.x86_64.rpm

! ls -l oracle-instantclient*-sqlplus-*.rpm   || wget https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm

! sudo apt-get install alien libaio1

! sudo alien -i oracle-instantclient19.3-basiclite-19.3.0.0.0-1.x86_64.rpm

! sudo alien -i oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm

%env ORACLE_HOME=/usr/lib/oracle/19.3/client64/bin

%env LD_LIBRARY_PATH=/usr/lib/oracle/19.3/client64/lib

import numpy as np
import pandas as pd
import cx_Oracle

Тем не менее, когда я запускаю свой код:

CONN_INFO = {
 'host': 'host_name',
 'port': 'port',
 'user': 'username',
 'psw': 'password',
 'service': 'service_name',
}
CONN_STR = '{user}/{psw}@{host}:{port}/{service}'.format(**CONN_INFO)
connection = cx_Oracle.connect(CONN_STR)

print(connection.version)

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

DatabaseError: Ошибка при попытке получить текст для ошибки ORA-12154

---- Этот код прекрасно работает на моей локальной машине в ноутбуке Jupyter.

Может кто-нибудь помочь мне понять, почему он не работает на Google Colab.

Благодарность!

Всего 2 ответа


ORACLE_HOME не является каталогом bin: '/usr/lib/oracle/19.3/client64/bin'. Если все остальное правильно, ваш ORACLE_HOME должен быть '/usr/lib/oracle/19.3/client64'.

Непосредственной причиной «Ошибка при попытке получить текст для ошибки ORA-nnnn» является неправильная установка ORACLE_HOME. MSB-файл, содержащий сообщения об ошибках, расположен по отношению к ORACLE_HOME. Поэтому, если OH неверен, он не сможет найти текст ошибки, о которой пытается сообщить (ORA-12154), поэтому сообщает о вторичной ошибке «ошибка при попытке получить текст для». ORA-12154 будет задокументирован во всей сети (я уже писал об этом здесь ) и, скорее всего, вернется к той же самой проблеме - невозможности найти файл, поскольку ORACLE_HOME (начальная точка для поиска указанного файла) неверен.


Удалите ORACLE_HOME, так как это не должно быть установлено с Instant Client. И, как указано в другом ответе, он установлен в неправильном месте. С RPM Instant Client 19c вам также не нужно устанавливать LD_LIBRARY_PATH, поскольку ldconfig должен был запускаться автоматически для вас. Прочитайте инструкцию по установке .

Если на этом компьютере установлено другое программное обеспечение Oracle, существует вероятность столкновения библиотек Oracle в пути поиска системных библиотек, поэтому вместо RPM следует устанавливать ZIP-файлы Instant Client (которые не запускают ldconfig ).

В примерах файлов Docker в части 1: Docker для приложений базы данных Oracle в Node.js и Python показаны команды мгновенной установки клиента, поэтому они могут быть полезны, даже если вы не используете Docker.


Есть идеи?

10000