At some point you may have encountered an error like this while browsing through the SharePoint Health Analyzer or if you are attempting to test your content database (i.e., Test-SPContentDatabase) prior to mounting it. Message reads something like this:
One caveat is that the log message never reveals the Location of the culprit web part. Luckily we can utilize T-SQL to query the content database and reveal the location of the web part in question.
Query the Content Database
To do this fire up the SQL Server Management Studio either locally from your machine or while logged on to the SQL Server back-end of your SharePoint farm, open up the new Query window and enter the following statement:
USE <Content_Database_Name>
SELECT AllDocs.SiteId,WebId, Webs.Title as 'Web Title', ListId, DirName,LeafName
FROM AllDocs
inner join AllWebParts on Alldocs.Id = AllWebParts.tp_PageUrlID
inner join Webs on Alldocs.WebId = webs.Id
WHERE AllWebParts.tp_WebPartTypeId = '7b56595c-625c-2eab-7907-8ab6f735e313'
NOTE: The text in red should be the content database name and the GUID from the error message.
Once you execute the query you should receive output similar to this:
WebID
|
WebTitle
|
List ID
|
Dir Name
|
Leaf name
|
b0cc8dd2-2bb9-4682-b90c-e0a043bed0e8
|
Knowledge Base
|
NULL
|
Corporate/KB
|
default.aspx
|
Find the URL of the Web Part Page
Given this we know that the DirName is the relative URL path of the site, and LeafName is an ASPX page where the web part is located. From this we can construct the URL:
http://root/DirName/LeafName
which translates to something like this:
http://root/Corporate/KB/default.aspx
Delete the Web Part(s)
Now that we know the location of the web part we can finally delete the culprit web parts. Open up the browser window and type in the URL followed by the ?contents=1 suffix. It should look something like this:
http://root/Corporate/KB/default.aspx?contents=1
This will open up the Web Part Maintenance page which allows us to select the web parts in question and Delete them from the page.
Select the culprit web part(s) from this page and click Delete.
Check Old Versions and Recycle Bin
One more thing before we wrap it up. Check the Recycle Bin as well as any previous Versions of the page (if Publishing is turned on). Older versions of the page may still have the same web part(s) on them, therefore make sure you either delete those pages or remove the web parts(s) from them. Do not forget to check the Recycle Bin for permanent deletion of those pages.
There is an error in your SQL script, the correct table name is "AllWebParts". Script worked great after that fix. Thanks
ReplyDeleteHello John,
DeleteGood catch, and thanks for pointing this out!
There are also few of other SQL tables to keep an eye out for where web parts may reside (i.e., Sites, Webs). I'll update the post to reflect these changes.
In SharePoint 2013 use this:
ReplyDeleteUSE "YOUR_DATABASE_NAME"
select DirName,LeafName from dbo.AllDocs where id in
(select tp_PageUrlID from dbo.AllWebParts where
(tp_WebPartTypeID='YOUR_GUID')
)
go
Change:
YOUR_DATABASE_NAME for the database you wish to query
YOUR GUID to the GUID of the webpart that is missing, this is the number that follows:
Message : WebPart class [THIS_NUMBER]
You get this when you run:
test-SPContentDatabase -name YOUR_DATABASE_NAME -WebApplication http://YOUR_SITE
Hello Longtrail.
DeleteI'll make a note and modify the entry.
Thanks for the feedback.