【问题标题】:Oracle Audit Trail to get the list of columns which got updated in last transactionOracle Audit Trail 获取上次事务中更新的列列表
【发布时间】:2016-09-06 19:27:32
【问题描述】:

考虑一个模式下的表(学生)说候选人(不是 DBA):

学生
{RollNumber : VARCHAR2(10),
姓名 : VARCHAR2(100),
CLass : VARCHAR2(5),
.. .
...
...
}

让我们假设该表已经包含一些有效数据。

我执行了一个更新查询来修改学生表的名称和类

UPDATE STUDENT SET Name = 'ASHWIN' , CLASS = 'XYZ' 
WHERE ROLLNUMBER = 'AQ1212'

随后是另一个更新查询,我在其中更新了一些其他字段

UPDATE STUDENT SET Math_marks = 100 ,PHY_marks , CLASS = 'XYZ' 
WHERE ROLLNUMBER = 'AQ1212'

因为我在两个不同的查询中修改了不同的列。我需要获取在上次事务中更新的特定列列表。我很确定 oracle 必须在 DBA 可以访问的一些表日志中维护这一点。但我没有 DBA 访问权限。

我需要的只是在架构候选人下的最后一个事务中更新的列列表我没有拥有 DBA 权限

请给我一些建议。

注意:上面我提到了一个简单的表格。但实际上我有 8-10 个表,我需要对其进行审计,其中一个关键因素可以说 ROLLNUMBER 充当所有其他表的外键。编写触发器对于所有表来说都是复杂的。因此,如果有其他方法可以获取相同的内容,请帮助我。

【问题讨论】:

  • 您的真正意思是“交易”还是“声明”?一笔交易由多条语句组成。两个更新可能在同一个事务中。 “最后一笔交易”对您意味着什么?当前会话中的最后一个事务?当前会话中的最后一条语句?还是您真的要遍历所有会话?听起来您需要启用某种审计功能——您不想扫描事务日志以查找此类事情。可能是历史表,其中行的先前版本是通过触发器写入的。
  • 如果您使用“ROWDEPENDENCIES”创建表,则可以跟踪那些已更新的行。当您使用 ROWDEPENDENCIES 创建表时,您将看到新的 rowscn 伪列。 ora_rowscn 在读取表时提供与表中每个单独行关联的系统更改号 (SCN)。当最后一次 DML 在表的块或行级别执行时,该列提供 SCN(系统更改编号)。使用函数 SCN_TO_TIMESTAMP 可以轻松地将 SCN 系统更改号转换为时间戳。
  • @Raj_Te - 这会大致告诉您更新行的时间(存在问题,但对于大多数用途来说可能已经足够接近)。这并不能告诉您更新了哪些列,这就是这个问题的全部内容。
  • @JustinCave..同意..除了创建触发器或一些历史表之外,我们无法实现 OP 的需求。最多他可以知道一行是否正在更新,这就是我试图传达的内容。
  • @R@JustinCave .. 我希望为每个更新语句执行此操作。(遍历所有会话)除了触发器或历史表还有其他方法吗?

标签: sql oracle oracle10g


【解决方案1】:

“我很确定 Oracle 必须在 DBA 可以访问的某些表日志中维护这一点。”

其实,不,不是默认的。维护审计跟踪是一件非常昂贵的事情,因此 Oracle 没有开箱即用。它让我们决定要审计什么(操作、对象、粒度),然后为这些事情开启审计。

Oracle 需要 DBA 访问权限才能启用内置功能,因此无论如何这可能会为您排除。

审核是一个非常广泛的话题,需要考虑和配置很多事情。 Oracle 文档将大部分安全手册用于审计。找到Introduction To Auditing here。对于监视特定列的更新,您所说的是细粒度审计。 Find out more


“我有 8-10 个表……编写触发器对于所有表来说都是复杂的。”

不一定。触发器将彼此相似,因此您可以使用数据字典视图 USER_TAB_COLUMNS 构建代码生成器来自定义一些通用样板文本。

【讨论】:

  • 你能详细解释一下吗? “不一定。触发器都彼此相似,因此您可以使用数据字典视图 USER_TAB_COLUMNS 构建代码生成器来自定义一些通用样板文本。”
猜你喜欢
  • 2022-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多