由于业务需要,系统必须保存所有记录的改动前的数据。
例如,修改或删除一条记录,必须有保存这条记录修改前或删除前的记录。
当前,系统使用的方案是, 创建一个历史表,用 before_字段名,after_字段名,更改类型。来保存所有的更改记录。
当有数据变化通过触发器向历史表插入记录。现在问题是,如果一次性处理大量数据,比如 删除一些数据,但这些记录关联了很多其他数据,也必须一并删除。
这时候,不仅要删除这些记录 还得向历史表插上新的数据。存储过程 导致 MS SQL Server 内存用量急剧增加,用时很长。请问对这种业务需要,还有没更好的设计方案!或者对这个方案,如何优化下。

解决方案 »

  1.   

    一般都是主要的业务表才会做此记录,其他的表一般不会,在所有需要记录的表加入记录日志触发器每个需记录的表用不同的日志表记录,类型也就是insert,update,delete不管级联多少,还有一次更新多少,这个工作对数据库来说应该都是很简单的反正我是这么干的
      

  2.   

    CDC(Change Data Capture)通过对事务日志的异步读取,记录DML操作的发生时间、类型和实际影响的数据变化,然后将这些数据记录到启用CDC时自动创建的表中。通过cdc相关的存储过程,可以获取详细的数据变化情况。由于数据变化是异步读取的,因此对整体性能的影响不大,远小于通过Trigger实现的数据变化记录。参考:
    http://www.cnblogs.com/chenxizhang/archive/2009/04/28/1445297.html