跟踪数据更改 - 审计日志 - 上篇

本文介绍了如何在数据库中实现数据更改跟踪的审计日志机制,通过继承审计抽象类,自动生成触发器记录数据变更。这种方法简单且易于维护,但也存在未修改数据被复制和消耗磁盘空间的问题。
摘要由CSDN通过智能技术生成

简介

许多应用程序都需要记录数据库中的数据变化,包括:哪些数据被更改、更改人和更改时间(审计日志记录) (维基百科audit logging)。 关于这个问题已经有了很多文章,而关于如何在Caché中实现也有很多不同的方法。

本文将介绍一个机制,帮助您实现用一个框架来跟踪和记录数据更改。一旦您的持久类继承自“审计抽象类”(Sample.AuditBase),此机制将通过“objectgenarator”方法创建一个触发器。由于这个持久类继承了Sample.AuditBase,所以当您编译持久类时,将自动生成用于审计更改的触发器。


Audit Class  

这是将记录更改的类。

Class  Sample.Audit  Extends  %Persistent {           Property  Date As  %Date ;           Property  UserName As  %String ( MAXLEN  = "" );           Property  ClassName As  %String ( MAXLEN  = "" );           Property  Id As  %Integer ;           Property  Field As  %String ( MAXLEN  = "" );           Property  OldValue As  %String ( MAXLEN  = "" );           Property  NewValue As  %String ( MAXLEN  = "" ); }

Audit Abstract Class  

这是您的持久类将继承的抽象类。这个类包含触发器方法(objectgenerator),除了在审核表(Sample.Audit)中写入更改之外,该触发器方法还知道如何识别哪些字段被更改、更改人、新旧值等。

Class  Sample.AuditBase  [ Abstract  ] { Trigger  SaveAuditAfter [ CodeMode  = objectgenerator, Event  = INSERT/UPDATE, Foreach  = row/object, Order  = 99999 , Time  = AFTER ] {           #dim  %compiledclass As  %Dictionary.CompiledClass           #dim  tProperty  As  %Dictionary.CompiledProperty           #dim  tAudit  As  Sample.Audit           Do  %code . WriteLine ( $Char (9)_ "; get username and ip adress" )           Do  %code . WriteLine ( $Char (9)_ "Set tSC = $$$OK" )           Do  %code . WriteLine ( $Char (9)_ "Set tUsername = $USERNAME" )           Set  tKey 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值