El detalle del error que muestra es el siguiente:
Application error when access /_admin/HealthReport.aspx, Error=You can only specify the READPAST lock in the READ COMMITTED or REPEATABLE READ isolation levels. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows) at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more) at System.Data.SqlClient.SqlDataReader.Read() at System.Data.Common.DataAdapter.FillLoadDataRowChunk(SchemaMapping mapping, Int32 startRecord, Int32 maxRecords) at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue) at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) at Microsoft.SharePoint.Administration.SPHealthReportFactory.LoadAdapter.FillFromReader(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) at Microsoft.SharePoint.Administration.SPHealthReportFactory.GetReportData(String reportName) at Microsoft.SharePoint.WebControls.HealthDataSourceView.Select(DataSourceSelectArguments selectArguments) at Microsoft.SharePoint.WebControls.AdministrationDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) at System.Web.UI.WebControls.DataBoundControl.PerformSelect() at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() at System.Web.UI.Control.EnsureChildControls() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Esto nos impide ver el informe de mantenimiento en la sección de Supervidor del Central Administration.
Gracias al Blog de Jason Lee´s que nos da respuestas correctas para problemas reales. Según explica Jason hay un procedimiento almacenado en la base de datos de WSS_Logging mal escrito y esto impide que se pueda consultar el reporte.
Lo curioso de ello es que el problema esta desde la versión RTM y en el cliente que me dio error tiene una versión superior y de todos modos el error persiste. La versión de mi cliente es 15.0.4481.1005 que básicamente es la actualización obligatoria de Marzo del 2013.
El Store Procedure en mención al artículo que resuelve el problema puedo confirmarlo es el mismo. Abajo les muestro el SP de la versión del SharePoint de mi cliente:
USE [WSS_Logging]
GO
/****** Object: StoredProcedure [dbo].[proc_GetSlowestPages] Script Date: 03/25/2014 10:18:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[proc_GetSlowestPages]
@StartTime datetime = NULL,
@EndTime datetime = NULL,
@WebApplicationId uniqueIdentifier = NULL,
@MachineName nchar(128) = NULL,
@MaxRows bigint = 100
AS
BEGIN
SET NOCOUNT ON
SELECT TOP(@MaxRows)
ServerUrl +
CASE ISNULL(SiteUrl,'')+ ISNULL(WebUrl,'')
WHEN '/' THEN '' ELSE ISNULL(SiteUrl,'')+ ISNULL(WebUrl,'')
END
+ISNULL(DocumentPath,'')
+ISNULL(QueryString,'') AS Url,
CONVERT(float,AVG(Duration))/1000 AS AverageDuration,
CONVERT(float,MAX(Duration))/1000 AS MaximumDuration,
CONVERT(float,MIN(Duration))/1000 AS MinimumDuration,
AVG(QueryCount) AS AverageQueryCount,
MAX(QueryCount) AS MaximumQueryCount,
MIN(QueryCount) AS MinimumQueryCount,
COUNT(*) AS TotalPageHits
FROM dbo.RequestUsage WITH (READPAST)
WHERE PartitionId in (SELECT PartitionId from dbo.fn_PartitionIdRangeMonthly(@StartTime, @EndTime))
AND LogTime BETWEEN @StartTime AND @EndTime
AND (@WebApplicationId IS NULL OR WebApplicationId = @WebApplicationId)
AND (@MachineName IS NULL or MachineName = @MachineName)
GROUP BY ServerUrl,SiteUrl,WebUrl,DocumentPath,QueryString
ORDER BY AVG(duration) DESC
END
La solución prácticamente es eliminar la línea WITH (READPAST) del procedimiento proc_GetSlowestPages de la base de datos WSS_Logging. Yo lo hice y me funciono el error, para lo que sabes algo de SQL Server esto no tiene ninguna implicación importante que afecte de alguna forma el SharePoint, únicamente se esta corrigiendo un código en SQL mal escrito.
Interesante el artículo que menciona que Ms no se opone a que se corrija el problema especialmente con temas de visualización y no de operación. Así que todo depende de Usted.
El artículo que menciono lo puede encontrar en la siguiente dirección: http://www.jrjlee.com/2012/11/problems-viewing-health-reports-in.html
Hasta la próxima!,
Juan Manuel Herrera