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控制檯(monitoring\Overview\Reporting\Reports\*)運行某些報告時會出現下面截圖中的錯誤:

查看詳細信息,內容如下:









原因:

      正如字面意思,出現這個錯誤是由於你當前運行的這個報告,在做數據庫查詢時,遇到表中某些值包含非法字符。而字符值就是上面***標記中,開頭""包含部分,轉換爲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。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章