问题描述
最近检查SharepointLog,有极大量以下的logs,大概每分钟2-3个:Unabletolocatethexml-definitionforFieldNamewithFieldId'xxxx-xxxx-xxxx-xxxx',exception:Microsoft.SharePoint.SPException:Catastrophicfailure(ExceptionfromHRESULT:0x8000FFFF(E_UNEXPECTED))--->System.Runtime.InteropServices.COMException:Catastrophicfailure(ExceptionfromHRESULT:0x8000FFFF(E_UNEXPECTED))atMicrosoft.SharePoint.Library.SPRequestInternalClass.GetGlobalContentTypeXml(StringbstrUrl,Int32type,UInt32lcid,ObjectvarIdBytes)atMicrosoft.SharePoint.Library.SPRequest.GetGlobalContentTypeXml(StringbstrUrl,Int32type,UInt32lcid,ObjectvarIdBytes)我比较过所有投诉找不到FieldID的log,这些FieldID(GUID)共有六十多个,不断重覆在投诉找不到,这些Log都是由爬网帐号引发的我用PowerShell检查一次整个SiteCollection都没有Column使用这六十多个FieidID,我看过相关功能的源码,有使用Hardcode的方式订义了GUID,但就没有这六十多个的如果我停了相关FarmSolution,Resetsearchindex就不会再发生错误,再次启动该Solution错误又出来了...有什么方法可以查找?
解决方案
解决方案二:
这六十多个field可能是之前用到的,然后又删掉了。这个不知道有没有用:http://williamvanstrien.blogspot.com/2013_09_01_archive.html
解决方案三:
引用
停了相关FarmSolution
那FarmSolution里,有定义field的XML吗,如果有,需要仔细检查一下,肯有可能XML写的不对。另外一个思路就是,从下往上找。从你的log里可以看出,这些field还是被用在了library。如果你对内容数据库有权限的话,去数据库里,先找到这个field,再找到这个field关联的library,就可以知道是哪个library的那个column出问题了。
解决方案四:
不行就拿fieldid到db里查一下,大概就知道是什么东西了
解决方案五:
引用3楼FoxDave的回复:
不行就拿fieldid到db里查一下,大概就知道是什么东西了
我在DB嘗試找,但我不懂語法,我用以下的找不到.ContentTypeId似乎不是String,也不是數字,我不懂如何找SELECT*FROM[ContentDB].[dbo].[ContentTypes]WHEREContentTypeIdlike‘%xxxx-xxxx-xxxx-xxxx%’引用2楼SPFarm的回复:
引用
停了相关FarmSolution那FarmSolution里,有定义field的XML吗,如果有,需要仔细检查一下,肯有可能XML写的不对。另外一个思路就是,从下往上找。从你的log里可以看出,这些field还是被用在了library。如果你对内容数据库有权限的话,去数据库里,先找到这个field,再找到这个field关联的library,就可以知道是哪个library的那个column出问题了。
我在源碼中看到幾個Element.xml檔,其中一個有定義不同欄位的GUID和名字,但這些GUID全部都不是那六十多個GUID
解决方案六:
查AllUserData表看看
解决方案七:
引用5楼FoxDave的回复:
查AllUserData表看看
是不是tp_GUID欄呢?我查過沒有該六十多個GUID.這也不奇怪?LOG中本來就說找不到麻?
解决方案八:
引用6楼legendgod的回复:
Quote: 引用5楼FoxDave的回复:
查AllUserData表看看是不是tp_GUID欄呢?我查過沒有該六十多個GUID.這也不奇怪?LOG中本來就說找不到麻?
啊对!是的!整反了还得是从xml里面找
解决方案九:
問題尚未解決,但記錄一下吧由於在ContentDB中的ContentTypes表的ContentTypeId是用HEXSTR,要用內置的Function去執行,例子如下:Select*fromContentDB.[dbo].[ContentTypes]wheremaster.dbo.fn_varbintohexstr(ContentTypeId)LIKE'%xxxxxx-xxxxxx-xxxxxx-xxxxxxx%'
解决方案十:
引用7楼FoxDave的回复:
Quote: 引用6楼legendgod的回复:
Quote: 引用5楼FoxDave的回复:
查AllUserData表看看是不是tp_GUID欄呢?我查過沒有該六十多個GUID.這也不奇怪?LOG中本來就說找不到麻?
啊对!是的!整反了还得是从xml里面找
找了幾天都找不到...你指的XML是哪個呢?
解决方案十一:
引用9楼legendgod的回复:
Quote: 引用7楼FoxDave的回复:
Quote: 引用6楼legendgod的回复:
Quote: 引用5楼FoxDave的回复:
查AllUserData表看看是不是tp_GUID欄呢?我查過沒有該六十多個GUID.這也不奇怪?LOG中本來就說找不到麻?
啊对!是的!整反了还得是从xml里面找
找了幾天都找不到...你指的XML是哪個呢?
就是sharepoint目录中你的feature里面的定义文件看看有没有field定义相关的
解决方案十二:
引用10楼FoxDave的回复:
就是sharepoint目录中你的feature里面的定义文件看看有没有field定义相关的
我只知道源碼中有幾個element.xml,查過沒有出現這些GUID,還有其他地方可以查找嗎?謝謝指教!
解决方案十三:
环境是升级上来的?感觉只有这样才会遇到这么糟心的问题,建议检查下字段的xml,看看把缺少的拷贝一下,试试?
解决方案十四:
引用12楼linyustar的回复:
环境是升级上来的?感觉只有这样才会遇到这么糟心的问题,建议检查下字段的xml,看看把缺少的拷贝一下,试试?
沒錯,是升級上來的!請問要怎樣檢查呀...我在服務器上的/15/Templates/Features/找到對應的XML,其中elements.xml也有定義一些GUID,但就沒有LOG中提及的那些GUID...你意思是要把缺少的補上去?
解决方案十五:
谷歌一下,看看有没有类似的解决方案?
解决方案:
引用14楼linyustar的回复:
谷歌一下,看看有没有类似的解决方案?
老實說,已經向微軟開了票,他們還未看得透...
解决方案:
引用15楼legendgod的回复:
Quote: 引用14楼linyustar的回复:
谷歌一下,看看有没有类似的解决方案?老實說,已經向微軟開了票,他們還未看得透...
我这两天折腾毁了。微软支持吧,怎么说呢,有点时候很有效,但大部分时候也没什么用,他们不了解具体的环境,就是给你瞎指挥