0

我正在寻找一种解决方案来动态记录对指定 Oracle 模式或表所做的 DML 和 DDL 更改,这意味着可以在应用程序运行时更改受监控的模式和表。

总之,我要实现一个Oracle数据库探测,而不是用于同步数据库。

更新

例如,我将监视器设置test为 database的表db。我想检索对 所做的所有更改test,例如删除/添加/修改列或插入/更新/删除记录等,我需要分析所有更改并将其发送到区块链,例如table test added a column field1,这就是我想要获取所有对受监控的表执行 SQL。

我已阅读有关数据保护和流的 Oracle 文档。

数据保护文档说:

SQL 应用(仅限逻辑备用数据库)

从从主数据库接收到的重做重构 SQL 语句,并针对逻辑备用数据库执行 SQL 语句。

逻辑备用数据库可以在读/写模式下打开,但由逻辑备用数据库维护的目标表以只读模式打开以进行报告(前提是适当地设置了数据库保护)。SQL Apply 使您能够使用逻辑备用数据库来报告活动,即使在应用 SQL 语句时也是如此。

文档说:

Oracle Streams 提供了两种隐式捕获数据库更改的方法:捕获进程和同步捕获。捕获过程可以捕获对表、模式或整个数据库所做的 DML 更改以及 DDL 更改。同步捕获可以捕获对表所做的 DML 更改。规则确定捕获过程或同步捕获捕获哪些更改。

而在此之前,我已经尝试通过使用oracle LogMinner 分析redo log 来获取SQL 更改,并最终做到了。

Oracle流似乎是实现我的目的最合适的方式,但它实现的步骤过于复杂和手动。事实上,阿里巴巴有一个开源的 MySQL 项目,名为canal,canal 伪装成从机,让 MySQL 转储 binlog 并推送到 canal 服务,然后 canal 从 binlog 重构原始 SQL。

我认为 Oracle 备用数据库就像 MySQL 从站一样,因此可以以类似的方式实现探测。所以我想使用数据保护方式,但我不想自己分析重做日志,因为它需要root权限才能关闭数据库并启用某些功能,但是在生产中我只有一个只读用户。我想使用逻辑备用数据库,但问题是我没有看到如何获得Reconstitutes SQL statements上述内容。

那么,有没有高手可以给点建议呢?

总之非常感谢。

4

0 回答 0