我有一个审计表设置,它基本上反映了我的一个表以及日期、用户和命令类型。下面是它可能的样子:
AuditID UserID Individual modtype user audit_performed
1 1239 Day Meff INSERT dbo 2010-11-04 14:50:56.357
2 2334 Dasdf fdlla INSERT dbo 2010-11-04 14:51:07.980
3 3324 Dasdf fdla DELETE dbo 2010-11-04 14:51:11.130
4 5009 Day Meffasdf UPDATE dbo 2010-11-04 14:51:12.777由于这些类型的表可以很快变大-我正在考虑添加某种类型的自动删除较旧的行。例如,如果我有3个月的历史记录-如果我可以删除第一个月,而保留最后两个月。同样,所有这些都必须是自动的-我想像一下,一旦命中某个日期,查询就会激活并删除包含审计数据的最旧月份。做这件事最好的方法是什么?
顺便说一下,我正在使用SQL Server 2005。
发布于 2010-11-05 03:44:21
您可以使用SQL Server agent,..you可以安排一个重复的作业,比如在一段时间后从当前审计表中删除条目。Here就是你要做的事情。
我建议将数据存储在另一个表audit_archive表中,并将其从当前audit表中删除。所以,如果你想要一些历史记录,你仍然拥有它,并且你的表也不会变得太大。
发布于 2010-11-05 03:47:06
SQL代理作业在这里应该没问题。您绝对不需要使用触发器在每个单独的插入上执行此操作。我甚至怀疑你是否需要每天都这样做。您可以安排一个每月运行一次的作业,并清除任何超过2个月的数据(因此,在任何给定时间,您最多有3个月的数据减去1天)。
发布于 2010-11-05 03:40:40
您可以在每次添加行时尝试触发器,它将清除超过3个月的任何内容。
您也可以尝试SQL Agent每天运行一个脚本来执行此操作。
https://stackoverflow.com/questions/4100548
复制相似问题