繁体   English   中英

在SQL Server中审核数据和检索时间点数据的最佳实践

[英]Best practice for auditing data in SQL Server and retrieving point in time data

我已经在数据库中创建历史记录表已有一段时间了,但是从未投入过多精力或思考。 我想知道什么是最佳实践。

我的主要目标是记录特定日期记录的任何更改。 如果一天中发生多个更改,那么将仅存在一个历史记录。 我需要记录记录的更改日期,而且当我检索数据时,还需要从历史记录中提取正确的记录,就像在特定时间一样。 因此,举例来说,我有一个客户表,想提取特定日期他们的地址。 我的Sprocs(例如get Cust详细信息)将采用一个可选日期,如果没有传入任何日期,则它将返回最新记录。

所以这就是我在寻找建议的地方:

我是否将历史记录表保留在同一表中,并使用逻辑删除标志隐藏历史记录? 我通常不这样做,因为某些表可能会改变很多,并且有很多记录。 我是否使用一个单独的表来镜像主表? 我通常这样做。 我应该只将更改记录放入历史记录表中而不是当前记录吗? 给定日期在某个时间点提取正确的记录,获取客户的每条记录<=传递的日期,然后按最近的日期排序并排在最前,最有效的方法是什么?

谢谢您的所有帮助...问候M

建议使用基于触发器的审计,并为需要审计的所有表创建触发器。

使用触发器,您可以满足每天不存储多个记录更新的要求。

我建议您检查一下ApexSQL Audit ,它会为您生成触发器,并尝试对它们使用的触发器,存储表的外观等进行反向工程。

这将为您提供一个良好的开端,您可以在那里开始工作。

免责声明:不隶属于ApexSQL,但我每天都会使用它们的工具。

我不是该领域的专家,但是一位优秀的sql顾问曾经告诉我,如果所有数据都可以更改,一个好的方法通常是使用同一张表。 否则,原始表仅包含核心不可更改数据,历史表仅包含可更改的内容。

您应该明确阅读这篇有关管理时空数据的文章。 这种方法的好处是,它提供了一种可纠正历史数据的可审计方式。

我相信这将解决您对修改历史数据的担忧

我一直使用本文所述审核表的修改版本。 尽管确实需要您对数据进行透视以使其类似于表的本机结构,但它可以抵抗模式更改。

您可以创建一个UDF,该UDF返回一个表并接受表名( varchar )和时间点( datetime )作为参数。 UDF应该使用审计(历史值)重建表,并在该日期和时间为您提供有效值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM