我一直在嘗試在 python 腳本中使用連續查詢通知 (CQN) 從資料庫獲取有關對特定表所做更改的通知。
我已經按照此鏈接的教程 https://python-oracledb.readthedocs.io/en/latest/user_guide/cqn.html
連接到 oracle 資料庫成功,我可以查詢表以獲取結果,但我無法從回呼函式中獲取任何訊息,如下所示
def cqn_callback(message):
print("Notification:")
for query in message.queries:
for tab in query.tables:
print("Table:", tab.name)
print("Operation:", tab.operation)
for row in tab.rows:
if row.operation & oracledb.OPCODE_INSERT:
print("INSERT of rowid:", row.rowid)
if row.operation & oracledb.OPCODE_DELETE:
print("DELETE of rowid:", row.rowid)
subscr = connection.subscribe(callback=cqn_callback,
operations=oracledb.OPCODE_INSERT | oracledb.OPCODE_DELETE,
qos=oracledb.SUBSCR_QOS_QUERY | oracledb.SUBSCR_QOS_ROWIDS)
subscr.registerquery("select * from regions")
input("Hit enter to stop CQN demo\n")
我可以看到在我運行腳本后在資料庫中創建了注冊,但在我通過 SQL* Plus 或 SQL Developer 執行任何這些操作后,我沒有收到任何關于插入或洗掉的訊息。
我正在閱讀有關此功能的其他問題和博客,但目前沒有成功,因此如果有人有任何建議或遇到類似問題,請在此處發表評論或回答。
來自 docker 的 Oracle 資料庫 12C
Python 版本是 3.10.7
我在厚模式下運行它,對于 oracle 客戶端庫,我正在使用這個命令
oracledb.init_oracle_client(lib_dir = ".../instantclient_21_3"
PS這是我第一次在這里發布問題,所以如果我沒有正確遵循提問的結構或規則,請糾正我,在此先感謝:)
uj5u.com熱心網友回復:
請查看檔案中對 CQN 的要求。特別注意資料庫需要連接回應用程式這一事實。如果無法做到這一點,即使資料庫注冊成功,也不會發出通知。Oracle 資料庫 19.4 引入了一種新模式,消除了這一要求,但由于您仍在使用 12c,因此它不適合您。您需要確保資料庫可以連接回應用程式——打開任何埠,確保在引數中直接指定 IP 地址,或者可以從連接到應用程式的客戶端計算機的名稱中查找 IP 地址資料庫等
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531646.html
標籤:Python甲骨文查询通知python-oracledb连续查询通知
