排查Dynamics CRM各个Entity table的大小, 发现AuditBase占了很大的数量,本来准备直接SSMS下Script删除,不过网上查了一下,可以使用CRM自己的Audit Log Management来清理,这样安全很多
步骤如下
1. Setting->System->Auditing
2. 选择“Audit Log Management”
3. 选择特定时间的Audit Log,就可以删除掉了
这时候就有问题了,如果要删除针对一个Entity的audit log,那就不能只是通过这里的界面来操作了,只能通过Script来做了(Audit Entity 只有AuditBase这个table,没有额外的extension table)
select en.name, count(ab.auditid) from [dbo].[AuditBase] ab inner join [MetadataSchema].[Entity] en on ab.[ObjectTypeCode] = en.[ObjectTypeCode] group by en.name order by count(ab.auditid) desc begin tran delete ab from [dbo].[AuditBase] ab inner join [MetadataSchema].[Entity] en on ab.[ObjectTypeCode] = en.[ObjectTypeCode] where en.name = 'account' and ab.createdon <'2015-11-01' commit
更进一步的话可以用script找出原始数据,根据原始数据的属性来删除,例如对于交易数据,如果该交易数据已经被关闭,这样它的相关的audit log就可以删除掉了,这就涉及到数据清理原则的设计了,与公司的商业流程息息相关。
再有就是Audit虽然很有用,但是在开启的时候,尤其是field audit的时候,要有针对性的,根据实际的需要来开启,而不是全面开启,那样就有点滥用了。