如何在AWS SageMaker(Jupyter Notebook)中使用cx_Oracle

问题描述 投票:0回答:1

我跟着官方的installation guide,但到目前为止还没有运气。我想知道cx_Oracle是否可以在AWS SageMaker的虚拟环境中运行。到目前为止我使用的步骤是:

  1. 创建一个qazxsw poi目录并解压缩其中的基本即时客户端。
  2. /opt/oracle
  3. sudo yum install libaiosudo sh -c "echo /opt/oracle/instantclient_18_3 > /etc/ld.so.conf.d/oracle-instantclient.conf"
  4. 最后出口sudo ldconfigLD_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服务器中提取数据?

python-3.x amazon-web-services cx-oracle amazon-sagemaker
1个回答
0
投票

您好,感谢您使用SageMaker!

经过一番努力,我终于找到了一系列允许我从SageMaker笔记本实例中查询Oracle 12数据库的步骤。以下是我采取的步骤:

  1. 我使用cx_Oracle创建了一个Oracle 12数据库用于测试目的。 (如果您已经拥有Oracle数据库,您当然可以跳过此步骤。)
  2. 我按照Amazon RDS的描述下载了Oracle 12 Instant Client RPM。请注意,您需要一个Oracle帐户才能下载此文件。
  3. 我从JupyterLab中将RPM上传到我的SageMaker Notebook实例。请注意,在继续下一步之前,可能需要2-3分钟才能完全上传。 (我最初在运行安装时遇到问题,因为上传仍在进行中。)
  4. 我按照Oracle指令中的规定从Jupyter终端运行了以下所有命令:
here
  1. 然后我安装了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
  1. 最后,我使用conda_python3内核创建了一个新的笔记本:
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数据库。

最好,凯文

© www.soinside.com 2019 - 2024. All rights reserved.