我需要审计所有数据库活动,无论它是来自应用程序还是通过其他方式发布某些sql的人.因此审计必须在数据库级别完成.有问题的数据库是Oracle.我通过触发器以及Oracle提供的称为细粒度审计的方式查看了这一点.在这两种情况下,我们都启用了对特定表和特定列的审核.但是,当我们使用这些方法中的任何一种时,我们发现性能真的很糟糕.
由于围绕数据隐私的规定,审计是绝对必须的,我想知道在没有显着性能下降的情况下,最好的方法是什么.如果某人具有Oracle特定的相关经验,那么这将有所帮助,但如果不仅仅是围绕数据库活动审计的一般做法也是可以的.
我不知道如何使用事务数据库实现用户友好界面的撤销属性.
一方面,建议用户拥有,因为它是说多(无限)撤销的可能性在这里的答案.可能有助于此问题的模式是Memento 或Command.
但是,使用包含触发器,不断增长的序列号和不可逆转的过程的复杂数据库,很难想象撤消操作如何在不同于事务边界的点处起作用.换句话说,撤消到最后一次提交的事务只是回滚时,但是如何回到不同的时刻呢?
更新(基于到目前为止的答案):我不一定希望撤消在修改已经提交时有效,我将专注于具有开放事务的正在运行的应用程序.每当用户点击保存时,它意味着提交,但在保存之前 - 在同一事务期间 - 撤消应该有效.我知道使用数据库作为持久层只是一个实现细节,用户不应该为此烦恼.但是,如果我们认为"在数据库和GUI中撤消的想法是根本不同的东西",并且我们不对数据库使用撤销,那么无限撤消只是一个流行语.我知道"回滚是......不是用户撤消".
那么如何在同一个事务中给出"由于任何更改而产生的级联效果",实现客户端级撤销?