我跟着官方的installation guide,但到目前为止还没有运气。我想知道cx_Oracle
是否可以在AWS SageMaker的虚拟环境中运行。到目前为止我使用的步骤是:
/opt/oracle
sudo yum install libaio
和sudo sh -c "echo /opt/oracle/instantclient_18_3 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
:LD_LIBRARY_PATH
当尝试使用export LD_LIBRARY_PATH=/opt/oracle/instantclient_18_3:$LD_LIBRARY_PATH
在笔记本内部运行连接时,我收到connection = cx_Oracle.connect(usr + '/' + pwd + '@' + url)
错误代码,该代码表明DPI-1047
无法打开,但该库位于libclntsh.so
文件夹中。作为另一种选择,当通过终端Python控制台运行相同的连接时,我得到/opt/oracle
错误代码,该代码表示时区文件没有被正确读取,这也是我正在尝试解决的问题,但怀疑是与ORA-01804
无关找到它的库文件夹。 (现在,向我解释一下:为什么亿万富翁公司必须如此难以创建一个像样的图书馆导入和安装?)
我缺少一步吗?我应该考虑AWS SageMaker的详细信息吗?另外,是否有另一种选择通过Python和AWS从oracle服务器中提取数据?
您好,感谢您使用SageMaker!
经过一番努力,我终于找到了一系列允许我从SageMaker笔记本实例中查询Oracle 12数据库的步骤。以下是我采取的步骤:
cx_Oracle
创建了一个Oracle 12数据库用于测试目的。 (如果您已经拥有Oracle数据库,您当然可以跳过此步骤。)here
cd SageMaker
sudo yum install oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
sudo mkdir -p /usr/lib/oracle/12.2/client64/lib/network/admin
# Restart Jupyter...
sudo restart jupyter-server
库:cx_Oracle
source activate python3
pip install cx_Oracle --upgrade
......然后它奏效了!
请注意,我花了一些时间来确定确切的连接字符串,这可能因数据库的配置方式而异。不幸的是,错误消息很难理解 - 在我的情况下,我有错误ORA-12504:TNS:侦听器没有在CONNECT_DATA中给出SERVICE_NAME,直到我在连接字符串的末尾指定了/ ORCL。
如果需要经常执行这些步骤,可以在SageMaker import cx_Oracle
db = cx_Oracle.connect("my_username/my_password@my-rds-instance.ccccccccccc.us-east-1.rds.amazonaws.com/ORCL")
# Example query
cursor = db.cursor()
for row in cursor.execute('select * from DBA_TABLES'):
print(row)
脚本中添加Oracle客户端的安装和配置。我没有测试过这种情况,但可能值得一试!
最后一件事,我在你的问题中注意到你使用的是Oracle 18客户端。我没有测试那个确切的场景,因为我只能访问Oracle 12数据库。但是,Oracle 12客户端也应该能够连接到Oracle 18数据库。
最好,凯文