跟踪Oracle中数据更改的最佳方法

| 作为我正在谈论的标题,跟踪oracle中数据更改的最佳方法是什么?我只想知道要更新/删除/插入的那一行? 起初,我想到了触发器,但是我需要在每个表上编写更多的触发器,然后记下影响到变更表的rowid,这不好,然后我在Google中搜索,学习有关物化视图的新概念记录并更改数据捕获, 物化视图日志对我很有好处,我可以将其与原始表进行比较,然后我可以获得不同的记录,甚至是不同的字段,我认为从原始创建/复制新表的方式也是相同的(但是我不不知道有什么不同?); 更改数据捕获组件对我来说很复杂:),所以我不想浪费时间来研究它。 任何人都具有跟踪oracle中数据更改的最佳方法的经验吗?
已邀请:
您将需要查看AUDIT语句。它收集SYS.AUD $表中的所有审核记录。 例:
AUDIT insert, update, delete ON t BY ACCESS
问候, 抢。
您可能想看看金门大桥。这使捕获更改变得很容易,但价格不菲,但性能良好且设置迅速。 如果性能没有问题,则触发器和审计可能是有效的解决方案。 如果性能是一个问题,并且认为Golden Gate太昂贵,您也可以使用Logminer或Change Data Capture。有了这个选择,我更喜欢CDC。 如您所见,有很多选项,接近实时和离线。 手动编写解决方案也需要付出代价,金门大桥值得研究。
Oracle通过重做日志为您完成此操作,这取决于您要使用此信息做什么。我假设您需要复制(跟踪源实例上的更改并传播到1个或多个目标实例)。 如果是这样,您可以考虑使用Oracle流(其他选项,例如“高级复制”,但您需要考虑自己的需求): 从Oracle: 使用Streams时, DML或DDL更改通常包括 三个步骤: 捕获过程或应用程序 创建一个或多个逻辑更改 记录(LCR)并将其排队 一个队列。 LCR是一条带有 描述一个 数据库更改。捕获过程 重新格式化从 重做登录LCR和应用程序 可以构建LCR。如果更改是 数据操作语言(DML) 操作,然后每个LCR封装 DML导致的行更改 对共享表进行操作 源数据库。如果更改是 数据定义语言(DDL) 操作,然后LCR封装 对A进行的DDL更改 源上的共享数据库对象 数据库。 传播传播阶段 LCR到另一个队列,通常 驻留在单独的数据库中 从LCR所在的数据库中 被抓LCR可以传播到 到达之前有许多队列 在目标数据库中。 在目标数据库中,应用 流程消耗更改 将LCR应用于共享 数据库对象。申请过程可以 使LCR出队并直接应用, 否则申请程序可能​​会使 LCR并将其发送到应用处理程序。 在Streams复制环境中, 应用处理程序执行定制 LCR的处理,然后应用 LCR到共享数据库对象。

要回复问题请先登录注册