我想将对表中所有字段所做的更改记录到另一个表中.这将用于保存对该表所做的所有更改的历史记录(您的基本更改日志表).
在SQL Server 2005中执行此操作的最佳方法是什么?
我将假设逻辑将放在一些触发器中.
在不对所有字段进行硬编码的情况下,循环检查所有字段检查更改的好方法是什么?
正如您从我的问题中看到的那样,示例代码将非常受欢迎.
我注意到SQL Server 2008有一个名为Change Data Capture(CDC)的新功能.(这是CDC上一个不错的Channel9视频).这与我们正在寻找的类似,除了我们使用的是SQL Server 2005,已经就地存在日志表布局,并且还记录了进行更改的用户.当一个字段可能改变时,我也发现很难证明写出整个记录的前后图像是合理的.
我们当前的日志文件结构具有字段名称,旧数据,新数据的列.
提前谢谢,祝你有个愉快的一天.
2008年12月22日更新:我做了一些更多的研究,并在Live Search QnA上找到了这两个答案
您可以创建一个触发器来执行此操作.请参阅 如何审核对sq l服务器数据的更改.
您可以使用触发器将数据更改记录到日志表中.您还可以从www.lumigent.com购买Log Explorer 并使用它来读取事务日志以查看用户进行了更改.但是,数据库需要完全恢复此选项.
更新于2008年12月23日:我还想要一个简洁的方法来比较改变的内容,这看起来像是PIVOT的反面,我在SQL中发现它被称为UNPIVOT.我现在倾向于在INSERTED和DELETED表上使用UNPIVOT触发器.我很好奇,如果这已经完成,所以我正在搜索" unpivot deleted inserted ".
发布使用后触发器的更新功能有一些不同的想法,但我仍然相信UNPIVOT将成为前进的路线.
小智.. 5
很晚但希望它对其他读者有用......
以下是我上周在类似主题上发布的答案的修改.
简短的回答是,没有适合所有人的"正确"解决方案.这取决于要求和被审计的系统.
触发器
优点:相对容易实现,审计内容具有很大的灵活性,以及如何通过完全控制来存储审计数据
缺点:当你有很多表甚至更多的触发器时,它会变得混乱.除非有一些第三方工具可以提供帮助,否则维护工作会很重.此外,根据数据库,它可能会对性能产生影响.
在SQL Server中创建审计触发器使用触发器将
更改更改为数据库表
CDC
优点:非常容易实现,本机支持
缺点:仅在企业版中可用,不是非常强大 - 如果您更改架构,您的数据将会丢失.我不建议将其用于长期审计跟踪
阅读交易日志
优点:您需要做的就是将数据库置于完全恢复模式,所有信息都将存储在事务日志中
缺点:您需要第三方日志阅读器才能有效地阅读此内容
在sql server 2008 SQL Server事务日志浏览器/分析器中读取日志文件(*.LDF)
第三方工具
我使用过ApexSQL的几个审计工具,但也有来自Idera(合规经理)和Krell软件(全方位审计)的好工具
ApexSQL Audit - 基于触发器的审计工具.生成并管理审计触发器
ApexSQL日志 - 允许通过读取事务日志进行审核
很晚但希望它对其他读者有用......
以下是我上周在类似主题上发布的答案的修改.
简短的回答是,没有适合所有人的"正确"解决方案.这取决于要求和被审计的系统.
触发器
优点:相对容易实现,审计内容具有很大的灵活性,以及如何通过完全控制来存储审计数据
缺点:当你有很多表甚至更多的触发器时,它会变得混乱.除非有一些第三方工具可以提供帮助,否则维护工作会很重.此外,根据数据库,它可能会对性能产生影响.
在SQL Server中创建审计触发器使用触发器将
更改更改为数据库表
CDC
优点:非常容易实现,本机支持
缺点:仅在企业版中可用,不是非常强大 - 如果您更改架构,您的数据将会丢失.我不建议将其用于长期审计跟踪
阅读交易日志
优点:您需要做的就是将数据库置于完全恢复模式,所有信息都将存储在事务日志中
缺点:您需要第三方日志阅读器才能有效地阅读此内容
在sql server 2008 SQL Server事务日志浏览器/分析器中读取日志文件(*.LDF)
第三方工具
我使用过ApexSQL的几个审计工具,但也有来自Idera(合规经理)和Krell软件(全方位审计)的好工具
ApexSQL Audit - 基于触发器的审计工具.生成并管理审计触发器
ApexSQL日志 - 允许通过读取事务日志进行审核