Oracle Audit Trail 获取在上次事务中更新的列的列表

Oracle Audit Trail to get the list of columns which got updated in last transaction

考虑一个 table(Student) 在模式下说 Candidates(NOT DBA):

Student
{RollNumber : VARCHAR2(10),
Name : VARCHAR2(100),
CLass : VARCHAR2(5),
...
...
...
}

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

我执行了更新查询来修改学生 table

的姓名和 class
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 可以访问的一些 table 日志中维护它。但是我没有DBA权限。

我所需要的只是在架构 Candidates 下的上次事务中更新的列的列表,我 DO NOT 拥有 DBA 权限

请给我一些建议。

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

"I am pretty sure that oracle must be maintaining this in some table logs which could be accessed by DBA."

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

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

审计是一个非常广泛的话题,需要考虑和配置很多事情。 Oracle 文档将安全手册的大部分内容用于审计。找到 Introduction To Auditing here. For monitoring updates to specific columns, what you're talking about is Fine-Grained Audit. Find out more


"I have got 8-10 tables ... Writing triggers would be a complex for all tables."

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