SharePoint 2007 – August 2011 CU Released

Yes, there are still lots of clients running 2007 and Microsoft is still pumping out those non-regression-tested CU’s for it.

More details about the updates:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;2553022
http://support.microsoft.com/default.aspx?scid=kb;EN-US;2553020

After the patch, don’t forget to run the PSCONFIG to update the farm.  While most of the time this works fine:

PSCONFIG.EXE -cmd upgrade -inplace b2b -wait -force

My favorite is this:

PSCONFIG.EXE -cmd upgrade -inplace b2b -wait -force -cmd applicationcontent -install -cmd installfeatures

Because it works every time.

SharePoint 2010–Disabling Enterprise Features

So you turned on Enterprise features…. now you need to go back to Standard because lets face it, not everyone needs to pay for Enterprise…. so what is involved in disabling Enterprise features?  It’s actually pretty straight forward.
 
To remove the Enterprise Feature from all Sites and Site Collections and your farm, please perform the following steps:

  1. Create a list of all the Site Collection and Sub sites that are using the enterprise feature "Office SharePoint Server Enterprise Feature".
  2. Then either run the following command or batch it using one of the following commands.
    1. For Site Collections
      1. Stsadm –o deactivatefeature –id "8581a8a7-cf16-4770-ac54-260265ddb0b2" –url <URL of Site Collection>
    2. For Sub Sites
      1. Stsadm –o deactivatefeature –id "0806d127-06e6-447a-980e-2e90b03101b8"-url <URL of Subsite>
  3. After running the command or batch I would then go thru and insure you have removed the feature from all Site Collection and Sub sites
  4. Navigate to the Farm Features page in Central Admin -> Applications, and then disable the farm-level Office SharePoint Server Enterprise Feature

As always, perform a full backup of the farm before disabling these features by using the Backup-Farm commandlet

Backup-SPFarm -Directory <BackupFolder> -BackupMethod {Full | Differential} [-Verbose]

SharePoint 2010 – Application pools recycle when memory limits are exceeded.

Title Application pools recycle when memory limits are exceeded.
Severity 0 – Rule Execution Failure
Category Performance
Explanation Access is denied.
Remedy In the Internet Information Services Manager, uncheck any memory-based maximums set for the application pools named above. For more information about this rule, see "http://go.microsoft.com/fwlink/?LinkID=142692".
Failing Services SPWebService (WSS_Administration)

Another fun MSCryptic message from our good friend the SharePoint Health Analyzer.  In this case, Microsoft has yet to allow us to separate out the HA rules to individual servers Unfortunately these rules tend to be an all or nothing approach, and in the case of this rule’s scope we get two choices:

image

So, what this means is that if we’re running a medium or large farm and we’ve gone and separated out our various application pools so that the Central Admin (CA) and the Web Front End (WFE) are on different services and are in fact isolated, then even though everything is properly set up, because it does not see certain app pools on a server that it thinks should be there it flags the SPHA rule.

Hopefully MS will someday allow us to configure the rules to run on a per-server level instead of just farm level.  In the meantime, three possible solutions:

  1. Easiest way to make this rule go away is disable it
  2. second easist is to install the app pools/services it is expecting on every server in the farm. The health rule checks each application pool in the SPWebService ContentService ApplicationPools collection. If it can’t find the Application Pool on the member server is it checking, it will fail and cause this Health Analyzer (HA) item (notice the application pool name(s) are blank in the message).  You can determine the potentially missing Application Pool(s) with the following PowerShell:
$contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$contentService.ApplicationPools | fl Name


3. Complete Hack, but you can create dummy application pools so the SPHA can find them but they don’t do anything, thus preserving your service isolation on the farm and at the same time keeping the rule intact.

EDIT: So, turns out if you reassign the web application to a generic application pool and delete the old application pools from the server, SharePoint is still expecting to see them and will throw a Health Analyzer alert if you delete them from the server since it is trying to check for them. In order to remove unused application pools from the SharePoint configuration, please review: SharePoint 2010 – Application pools recycle when memory limits are exceeded (PART 2) where I show how to remove unused application pools from the ApplicationPools collection.

SharePoint 2010 – Search Crawl Returns Error When Crawling Gantt Chart Views

Error message: The SharePoint item being crawled returned an error when attempting to download the item.

I was getting my crawl logs filled with error messages when crawling a particular section of one of my web applications that house a lot of Project collaboration sites. After investigating this issue what we found is that our standard template for projects used that Gantt chart extensively on some of the pages since the visual representation of tasks looks so darn good. The bad news was that the crawler was having problems interpreting these views. The solution was actually fairly easy once we knew the issue. For some reason it appears that the search server is presenting its crawl request as a very old version of Internet Explorer (IE 4!). The solution is to change the registry settings that control the gathering manager to present the User Agent to a higher version of IE on the search server.

  1. Open Regedit on your search server.
  2. Navigate to this registry key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\14.0\Search\Global\Gathering Manager
  3. Change the value of “UserAgent” from “MSIE 4.01″ to “MSIE 8.0″
  4. Reboot the server and run a full crawl to index the items that were erroring out.

It does seem strange that in an environment that no longer supports IE 6 that Microsoft hasn’t updated this registry setting to a more modern broader/user agent, but this also explains why on some of my non-SharePoint sites that I index I was seeing a proliferation of older browser hits!

SQL Server: How to Remap Existing Database Users on New Instance

One common scenario I’ve faced is the need to have a SharePoint database replicated to a disaster recovery site.  Depending on the setup and how the DBAs have provisioned the backup databases, we sometimes face issues where there are orphaned users in the new instance.  Here’s the fix for remapping the orphan database users on the new instance:

/*******************************************************

This procedure should be created in the Master database. This procedure takes no parameters. It will remap orphaned users in the current database to EXISTING logins of the same name. This is usefull in the case a new database is created by restoring a backup to a new database, or by attaching the datafiles to a new server.

*******************************************************/

Use Master 

Go 

IF OBJECT_ID('dbo.sp_fixusers') IS NOT NULL

BEGIN

DROP PROCEDURE dbo.sp_fixusers

IF OBJECT_ID('dbo.sp_fixusers') IS NOT NULL

PRINT '<<< FAILED DROPPING PROCEDURE dbo.sp_fixusers >>>'

ELSE

PRINT '<<< DROPPED PROCEDURE dbo.sp_fixusers >>>'

END

GO

CREATE PROCEDURE dbo.sp_fixusers

AS

BEGIN

DECLARE @username varchar(25)

DECLARE fixusers CURSOR

FOR

SELECT UserName = name FROM sysusers

WHERE issqluser = 1 and (sid is not null and sid <> 0x0)

and suser_sname(sid) is null

ORDER BY name

OPEN fixusers

FETCH NEXT FROM fixusers

INTO @username

WHILE @@FETCH_STATUS = 0

BEGIN

IF @username='dbo'

BEGIN

EXEC sp_changedbowner 'sa'

END

ELSE

BEGIN

EXEC sp_change_users_login 'update_one', @username, @username

END

FETCH NEXT FROM fixusers

INTO @username

END

CLOSE fixusers

DEALLOCATE fixusers

END

go

IF OBJECT_ID('dbo.sp_fixusers') IS NOT NULL

PRINT '<<< CREATED PROCEDURE dbo.sp_fixusers >>>'

ELSE

PRINT '<<< FAILED CREATING PROCEDURE dbo.sp_fixusers >>>'

go