Я получаю следующую ошибку при попытке создать соединение в Google colab с OracleDB с помощью cx_Oracle:
DatabaseError: Ошибка при попытке получить текст для ошибки ORA-12154
Я следовал этому коду, чтобы подключить мою базу данных к Google Colab:
! 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.