SCCM 在运行某些报告时提示如下格式的错误
在运行某些报告时提示如下格式的错误 Error in XML document. Hexadecimal value 0x0C,is an invalid character Manager SCCMR2 Version 5.0.7958.1203 SQL Version 2012R2 11.0.3000.0 Operating System6.3.9600 故障现象: 在SCCM控制台(monitoringOverviewReportingReports*)运行某些报告时会出现下面截图中的错误: 查看详细信息,内容如下: 原因: 正如字面意思,出现这个错误是由于你当前运行的这个报告,在做数据库查询时,遇到表中某些值包含非法字符。而字符值就是上面***标记中,开头""包含部分,转换为16进制后的值是0x0C。这些值无发被正确的识别,所以出现报告无法继续运行的错误。 造成这种错误的情况,在SCCM上主要是"资产智能"这个功能导致,出现最多的是在软件数据的收集上,由于某些软件设计不规范导致的,至于微软为什么让这些字符写入到数据库,我就无法解释了,而且这样还会导致安全隐患。 解决方案: 虽然知道了问题的原因,我该如何解决? 首先,我们知道是表中的值出现非法字符,那么一定找出这个值,修改或者删除它即可,思路如下:找出报告中涉及的表à找出表中出问题的值à修改或者删除非法的值 A 找出报告涉及的表格 可以通过ReportBuilder工具,查看报告的数据源,找出对应的视图,然后通过视图找出涉及的表。 通过WEB方式,访问SCCM的报表点,这个报告点取决于你的部署。我的报告点就是我的SCCM服务器。 打开Report Builder(如过你打开后不能看到上图中的内容,那么请你先解决这个问题再继续),在ReportBuilder里面打开出现错误的报告。我这里是Software 01A 我们会看到DataSets,这里面配置了这个报告所需要的所有查询语句,我们可以通过查看DataSets的配置,找出报告引用的视图。打开每个DataSet的属性。 打开Query Designer 把Query中间的语句复制到记事本中,注意下图中标黄的语句,这些语句就是这个报告所涉及的视图,根据报告的不同可以会涉及很多个视图。如过有多个DataSet那么可以分析那个是最有可能的,例如我现在用的这个报告,是根据指定的集合和指定的发布者显示安装数量和版本信息。那么DataSet0根据名称判断就是已经安装软件的视图。而Dataset1主要是集合ID的查询,如过集合ID出现问题,那么方式要用到集合的报告都会出问题,根据排除法集合ID的表格是没有问题的,而且集合信息本身是在SCCM中生成,肯定是符合规范的。对于Dataset2是用户SID这个就更不用去查了。 那么我将注意力集中到v_GS_INSTALLED_SOFTWARE 这个视图上。 通过SQL Management Studio打开SCCM数据库,找到这个视图: 点击右键,选择Design 通过Design我们可以看到这个视图引用了哪些表 注意黄线部分就是这个视图引用的数据库中的表。 B 查询出问题的数据 找到表了,我们的工作已经完成一半了,找到对应的表,查询错误的值: 通过如下语句: SelectPublisher00,* from [CM_TTY].[dbo].INSTALLED_SOFTWARE_DATA WHERECONVERT(varchar(max),convert(varbinary(max),Publisher00),2)LIKE'%0C%' 注意%0C%就是错误中出现的值,以16进制形式表示,查询出来的值拷贝到Excel中如下图,会出现很多乱码,这些都是错误的数据。 C 删除错误数据 SQL 语句: delete from [CM_TTY].[dbo].INSTALLED_SOFTWARE_DATA where InstanceKey='86' and MachineID='16777774' 根据表的主键,我们将错误的数据删除,建议大家将查询出来的数据都删除,即使看起来正常。 PS: 我的版本是SCCM 2012R2 ,论坛上有说升级到R2 SP1可以解决这个问题,有可能这个是SCCM的一个Bug。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |