oracle流

对于想要集中数据审计函数以创建通用审计过程的开发者,也许就该考虑使用Oracle流。我们要一个数据审计表,保存对数据库进行的所有修改。这个数据库范围的审计表可用于多进程,它会引发一些性能问题(这已超出本书范畴),但这些问题可通过调整对象存储参数来减轻。

集中式数据审计跟踪将包含一个主表和一个附表,命名为AUDIT_TRAIL_1和AUDIT_TRAIL_2。AUDIT_TRAIL_1如下:

oracle流_第1张图片 

AUDIT_TRAIL_2如下:

oracle流_第2张图片 

流使用SYS.ANYDATA类型来存储列值。(ANYDATA类型列包含了数据示例和数据类型描述。)在审计表中将使用相同的数据类型。

简单的流配置包含了两个进程:捕捉进程从重做日志中获取DML的修改,并将它们写入数据库队列。应用进程拆分修改队列,并将它们传递给DML处理过程,而这个过程由开发者自己编写。DML处理过程将把DML修改写入数据审计跟踪。

要使用流,必须满足一些先决条件。我们需要使用Oracle企业版,数据库必须运行于归档日志模式。一些初始化参数必须设置,而流管理员账户必须创建并配置。说太多步骤会脱离主题,但我们将涵盖足够多细节,以教给你在审计中使用流的方法。

通过如下PL/SQL过程调用来配置流:

oracle流_第3张图片 
配置特定表的DML中的捕捉和应用进程。它们的配置方法大致相同,就是开启审计。
oracle流_第4张图片 
添加额外信息到重做日志中,这样流中的每个修改就会包含行的主键了。
 
将用户过程与应用进程关联起来。这将在INSERT和DELETE操作中完成。
oracle流_第5张图片 

DML_HANDLER是一个向表AUDIT_TRAIL插入数据的程序。它是可用于任何表的通用程序。

流捕捉进程从重做日志文件中读取所做的修改。这些修改不包含执行修改的用户名和修改的日期,但审计跟踪需要这些信息。可以用下面的方法使其对DML_HANDLER可用。

oracle流_第6张图片 
触发器获得事务的SCN号,将其与用户名和时间戳相关联,并将这3个值保存在一个表中。(我们要不时地删除这个表。)流应用进程现在拥有所需的信息以创建完整的审计跟踪。它将获得通过使用事务SCN号所保存的用户名和日期,并把信息增加到审计跟踪里。下面就是DML_HANDLER。
oracle流_第7张图片 
oracle流_第8张图片 
oracle流_第9张图片 
下面是用流捕捉审计过程的例子。
oracle流_第10张图片 
注意到,在审计跟踪里可以看到真正的修改以及主键,但不是表中的所有列。这是DELETE示例。
oracle流_第11张图片 
如果想以正常顺序查看各列的数据,可以将审计跟踪与TAB_COLUMNS视图联结。
oracle流_第12张图片 
你也许想知道用于显示SYS.ANYDATA数据类型的DISP_ANY函数。下面是保存于SYS.ANYDATA列的值。
oracle流_第13张图片 

流进程可以自动地(松散地)基于事件执行程序。事件就是流捕捉进程,它能对所有记录于数据库重做日志中的DDL和DML修改起作用。创建一个好的流程序并不需很多编程。

你可能感兴趣的:(oracle,数据库,delete,insert,存储,编程,学习ing,etl)