技术开发 频道

Oracle10g新特性——审计

这一操作产生了一个事务,并记录一条审计记录。但你如何知道记录中实际记录的是什么呢?如果这条记录是一个事务,这个字段就记录了事务的ID。你可以用它遇视图FLASHBACK_TRANSACTION_QUERY连接查询。下面就是一个例子:

SQL> select start_scn, start_timestamp,

2 commit_scn, commit_timestamp, undo_change#, row_id, undo_sql

3 from flashback_transaction_query

4 where xid = '<the transaction id>';

    除了哪些关于这个事务的统计信息,如undo change#、rowid等等,10g中还记录了回归事务变化的SQL语句在字段UNDO_SQL中,记录了回归影响的行的rowid在字段ROW_ID中。

    System Change Number (SCN) 最后,来看下记录的变化前的数据。如何得到它呢。在9i的FGA中,这个数据可以通过闪回查询得到。但是你必须首先从审计记录的SCN字段中中得到System Change Number (SCN)。执行以下命令:

SQL> select size from class as of SCN 123456 2 where where class_id = 123;
这样可以得到变化前的数据了。

扩展DB审计

    我们最想得到的是:捕捉在标准审计中没有记录的用户所执行的SQL语句和绑定的变量。通过设置一个参数可以进入10g的扩展审计,在参数文件中写入以下内容:

audit_trail = db_extended

    这一设置激活了在相应字段中记录SQL语句和绑定的变量的值。在早期版本中是没有这一参数的。

什么时候需要触发器

    避免错误 审计数据都是通过一个自治事务从源事务中从产生的。因此,及时源事务

    已经回滚,它们还是会被提交。这有一个简单的例子来说明这一点。加入我们已经设定在表CLASS上审计UPDATE操作。一个用户执行一个SQL将SIZE数据从20更新到10,然后回滚事务,如下所示:
SQL> update class set size = 10 where class_id = 123; SQL> rollback
    现在字段SIZE的数据是20而不是10。尽管回归了,审计跟踪还是会捕捉到这些变化。在某些情况下,我们并不希望它这样做,特别是用户回滚了很多事务。在这种情况下,你就需要在CLASS表上建一个触发器捕捉仅事务提交时的变化。如果在表CLASS上有一个插入数据到用户定义的审计跟踪中的触发器,当回归时审计跟踪也会回滚。

    捕捉变化前的数据 Oracle提供的审计跟踪没有记录变化前后的数据。例如。上面的变化会产生一条审计记录,记录下SQL语句和变化时的SCN数,但是没有变化前的数据(20)。这个数据可以通过使用SCN数从闪回查询中获取到,但是这依赖于必须能从回滚段中获取到相应信息。这些信息能否获取到就看参数undo_retention设置的大小了,如果在它设置的时间范围内,之前的数据就可以获取到。使用触发器捕捉这个值就不需要依赖遇这个参数的设定了,可以随时获取到变化前的值。

统一审计跟踪

     由于FGA和标准审计捕捉的时类似类型的信息。他们可以共同提供很多十分有用的信息。Oracle 10g通过视图DBA_COMMON_AUDIT_TRAIL将这些跟踪信息统一成一个统一的跟踪信息。它是通过UNION ALL将视图DBA_AUDIT_TRAIL和DBA_FGA_AUDIT_TRAIL联合起来。但是这两个统计跟踪数据还是有很大的不同的。

来源:WWW.HelloDBA.COM
0
相关文章