【问题标题】:Oracle: How to identify data and schema changes [closed]Oracle:如何识别数据和架构更改 [关闭]
【发布时间】:2016-03-07 09:25:40
【问题描述】:

我需要收集执行每晚批处理后发生的数据库数据更改或架构更改。例如,有一个表employee 有两条记录。每晚批处理后假设插入一条记录并更新一条记录。我想捕获更新了哪些记录以及插入了哪些记录。我正在使用 Oracle 数据库。我正在寻找一个脚本来执行此操作,因为我们在获取执行此任务的新工具的许可证时遇到了一些问题。所以任何人都可以建议如何以编程方式或使用 Oracle 11g 内置函数来完成这项工作?非常感谢任何示例代码。由于我们有大量表,我正在寻找一种通用的方法来做到这一点。

谢谢

【问题讨论】:

  • Oracle 具有内置的审计功能。阅读文档。

标签: sql database oracle plsql oracle11g


【解决方案1】:

我建议对您要捕获的更改使用触发器,并将该信息插入到另一个捕获这些更改的表中。 stackoverflow 中有一些信息the best way to track data changes in oracle

如果触发器不是一个可行的选项,请查看一次插入 2 个表,一个是您的目标表,一个是您的日志记录/更改捕获表。 这是stackoverflow的一个例子

Oracle INSERT into two tables in one query

第三个选项是表审计。请参阅stackoverflow上的以下内容

Auditing in Oracle

【讨论】:

  • 过度使用触发器可能会严重影响 Databse。
  • 我不能使用触发器,因为我的任务是处理大数据的批处理作业,使用触发器会降低性能。
【解决方案2】:

在 OLTP 系统中,您可以在表 create_date、update_date 或 last_modified_time、transaction_type 中添加审计列。

使用 create_date、update_date - 您可以将默认 sysdate 设置为 create_date,然后您需要修改应用程序逻辑以更新 update_date。触发器也可以工作,而不是以牺牲少量性能为代价更改代码。

使用 last_modified_time、transaction_type - 您需要在插入或更新时更新这两个字段,作为应用程序逻辑的一部分或使用触发器。

【讨论】:

  • 跟踪删除怎么样?
  • 为此,您需要有日志表和触发器,以便在删除时插入日志表。
  • 别告诉我。编辑你的答案。)
  • 用户没有问过,他只是想知道插入或更新了哪些记录:)
猜你喜欢
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 2021-03-14
  • 2019-02-26
  • 2019-03-25
  • 2023-03-28
相关资源
最近更新 更多