[英]Unable to connect using cx_Oracle in a Jupyter notebook on VSCode
[英]How to use cx_Oracle within AWS SageMaker (Jupyter Notebook)
我按照官方安裝指南,但到目前為止還沒有運氣。 我想知道cx_Oracle
可以在AWS SageMaker的虛擬環境中運行。 到目前為止我使用的步驟是:
/opt/oracle
目錄並解壓縮其中的基本instantclient。 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
無法打開,但是該庫是在/opt/oracle
文件夾中。 作為另一種選擇,當通過終端Python控制台運行相同的連接時,我得到ORA-01804
錯誤代碼,該代碼表示時區文件沒有被正確讀取,這也是我正在嘗試解決的問題,但懷疑是與cx_Oracle
找不到它的庫文件夾。 (現在,向我解釋一下:為什么億萬富翁公司必須如此難以創建一個像樣的圖書館導入和安裝?)
我缺少一步嗎? 我應該考慮AWS SageMaker的詳細信息嗎? 另外,是否有另一種選擇通過Python和AWS從oracle服務器中提取數據?
您好,感謝您使用SageMaker!
經過一番努力,我終於找到了一系列允許我從SageMaker筆記本實例中查詢Oracle 12數據庫的步驟。 以下是我采取的步驟:
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
source activate python3
pip install cx_Oracle --upgrade
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)
......然后它奏效了!
請注意,我花了一些時間來確定確切的連接字符串,這可能因數據庫的配置方式而異。 不幸的是,錯誤消息很難理解 - 在我的情況下,我有錯誤ORA-12504:TNS:偵聽器沒有在CONNECT_DATA中給出SERVICE_NAME,直到我在連接字符串的末尾指定了/ ORCL。
如果需要經常執行這些步驟,可以在SageMaker Lifecycle Configuration腳本中添加Oracle客戶端的安裝和配置。 我沒有測試過這種情況,但可能值得一試!
最后一件事,我在你的問題中注意到你使用的是Oracle 18客戶端。 我沒有測試那個確切的場景,因為我只能訪問Oracle 12數據庫。 但是,Oracle 12客戶端也應該能夠連接到Oracle 18數據庫。
最好,凱文
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.