如何记录在sql server表中更改的数据。哪种方法更好
只是想知道有关日志数据修改。如何记录在sql server表中更改的数据。哪种方法更好
我见过跟踪数据变化(DML)的方法。
- 使用触发器
- 在同一个表中保持列添加日期,添加者,修改日期,修改者。
使用方法(1),我可以写触发器,插入/删除/更新每个表记录的变化,因此可以应用在所有表按要求外键关系等方面的限制类似唯一键约束。
但我不明白它是如何可以应用使用方法(2)各种约束。 由于我必须制作复合独特密钥并且必须考虑更多的列。
数据库表中是否存在任何设计问题。方法(2)记录数据的建议方式是什么?
哪种方法更好。
而且我来自我的一些同事知道,触发器做不火批量插入查询,是真的吗?
我最喜欢的解决方案是要求(如果可能,使用安全功能)访问所有应用程序数据(或至少所有CRUD操作)以完成存储过程,并让SP管理变更跟踪和审计。
触发器的问题是它们不能很好地扩展;他们可以通过将批量插入或更新转换为许多单行操作来施加显着的性能命中。
至于是否保留在行或其他表的变化,我的偏好是使用另一个表。这样,我就可以在需要的时候获得实际变化的历史记录,而不仅仅是在什么时候。保持源表缩小也可以帮助查询/读取性能。
您也可以申请分配到审计表,这将使得他们很容易在时机成熟时,以年龄关闭/下降。
你错过了一个大的:Change Data Capture。 Sql Server企业版已内置此功能。
谢谢。只有我们会根据客户的来改变我们的数据库服务器的问题。所以我们试图尽可能减少对数据库服务器的依赖。但是,谢谢你提出这一点。 –
好问题,我已经看到/使用了两种方法,但都没有看起来正确,我认为rdbms应该提供一些内置功能。 –
在Sql Server 2008中,引入了一项新功能,即提供相同功能的** CDC“更改数据捕获”**。但我担心以前的版本。 –
CDC告诉你什么改变了(包括实际数据),改变跟踪告诉你哪些行已经改变,但是都没有告诉你是谁做的。审计可能是您唯一的避免触发器的内置功能,但它需要Enterprise。对于你的2.如果你不使用触发器你如何捕获特别更新的信息? –