我 一直 在 尝试 在 python 脚本 中 使用 Continuous Query Notification ( 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"
格式
这 是 我 第 一 次 在 这里 发帖 , 如果 我 没有 正确 地 遵循 提问 的 结构 或 规则 , 请 纠正 我 , 提前 感谢 : )
1条答案
按热度按时间6kkfgxo01#
请查看文档中对CQN的要求。请特别注意数据库需要连接回应用程序。如果无法连接回应用程序,则即使在数据库中注册成功,也不会发出通知。Oracle Database 19.4引入了一种新模式,消除了此要求。但由于您仍然使用12 c,因此这对您来说不起作用,您需要确保数据库可以连接回应用程序--打开所有端口,确保在参数中直接指定IP地址,或者可以从连接到的客户端计算机的名称中查找IP地址数据库等。