CRM 4.0的数据删除维护(data deletion)—Part II

本文罗列一些常见的无法删除CRM 4.0数据的场景和解决办法.

***************************************************************************************************************

1.CRM 4.0的产品bugs和hotfixes

这些是应该优先考虑的,节省排错时间精力。

产品bug(1): ExtensionBase 库表记录没有被删除

  症状: Contact实体增加一个自定义属性然后新建一联系人(contact).把该联系人设置为一客户(Account)的关联联系人,然后从用户界面删除该客户记录。24小时后Deletion Service运行后你发现ContactExtensionBase表格还有该联系人的相关记录。

  解决办法: 安装Update Rollup 7。修复已经发生的坏记录需要手动运行工具microsoft.crm.se.cleanupextensiontables.exe.该工具需要把Update Rollup 7的安装包解压缩后得到 (命令行下使用-X参数)

ManualExtraction

 

产品bug(2): 和Activity实体(Email,PhoneCall, Fax etc)有1:N关系的实体无法被删除

  症状: Contact和Letter建立1:N关系,建立Contact和Letter记录后把它们关联起来。删除Contact记录。 24小时后你发现Windows 事件查看器里有如下错误"Error: Deletion Service failed to clear up table=ContactBase”

  解决办法: 安装Update Rollup 8

 

产品bug(3): 和Activity实体(Email,PhoneCall, Fax etc)有多个1:N关系的实体无法被删除

  症状: 自定义的实体和Letter,Phone分别建立了1:N关系(这样和Activity就有了2对1:N关系)。当你删除自定义实体的一条记录后,24小时后你发现Windows 事件查看器里有如下错误"Error: Deletion Service failed to clear up table=XXXBase”

  解决办法: 安装Update Rollup 11或者直接联系售后服务部门安装hotfix KB981625

 

产品bug(4) : 无法删除多对多关系(N:N)

  症状: 创建多对多关系后安装了KB954322,然后执行了工具Microsoft.Crm.SE.FixMissingBulkDeleteFailureRelationship.exe。如果你试图删除已经创建的多对多关系如下错误会发生:

Cannot delete Attribute with id 23b4c5b7-7ea6-dd11-a925-005056b10d7e because a Relationship with id 2774a73e-1e6c-415a-af72-773f927e82fb exists that relates to this Attribute and delete cascade is restricted

解决办法:   安装Update Rollup 8, 然后手动解压缩UR8的包 (在命令行下使用 -x 参数,系统会提示你解压缩地点),在解压缩文件夹下你会发现en\crmse9914workaroundscript SQL脚本。手动执行该脚本。

***************************************************************************************************************

2. 删除一条记录比如Contact总是timeout

原因: 删除一条记录时候CRM平台要把相关的记录根据cascade规则做相应的处理。比如删除Contact时候它要查找DuplicateRecordBase表格是否引用了该contact记录。我们在一个客户处发现CRM数据库为8-9GB左右,DuplicateRecordBase表格本身就已达8GB! 删除Contact大量时间花费在查询DuplicateRecordBase上。

 

解决办法:

注意:为了以防万一出错,请备份你的CRM数据库!!!

(1)停止任何系统中不用的重复检测规则。系统中任何重复检测规则都回导致后台不停运行生成重复结果集,增加SQL的开销。

CRM设置 –〉数据管理 –〉重复检测规则 –〉取消发布那些系统中不用的规则 降低SQL的负载

(2) (可选)如果DuplicateRecordBase表格已经很大,无法通过CRM界面删除重复检测工作进行,那么你可以采用如下办法:

                    SQL management studio -> 直接执行命令 truncate table DuplicateRecordBase

  注意: 以前的重复检测结果都将丢失!若需要可以重新建立重复检测规则生成数据。

删除完表格后需要收缩SQL数据库占用空间,有利于系统管理员定期备份系统。收缩方法如下:

                  SQL management studio -> 找到你的CRM数据库 -> 点击右键 –〉任务 –〉收缩数据库

 

(3) 为了加快查询速度,我们执行了如下SQL语句增加索引

CREATE NONCLUSTERED INDEX

[_dta_index_DuplicateRecordBase_23_503841753__K4_K7_5] ON

[dbo].[DuplicateRecordBase]

(

[DeletionStateCode] ASC,

[DuplicateRecordId] ASC

)

INCLUDE ( [DuplicateId]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF,

DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]

go

CREATE STATISTICS [_dta_stat_503841753_7_4] ON

[dbo].[DuplicateRecordBase]([DuplicateRecordId], [DeletionStateCode])

Go

       Exec sp_msforeachtable 'DBCC DBREINDEX ("?" )'

       Go

      Exec sp_msforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN'

      Go

***************************************************************************************************************

 

thanks

Clifford