Detectar y resolver los errores comunes del Health Analyzer

Si eres un administrador de SharePoint, ya sea 2007, 2010 o 2013, ya sabrás que al abrir la administración central de SharePoint, recibimos una serie de advertencias, avisos y errores que aparecen en la pantalla de inicio de la Administración Central.

Muchas veces, esos errores no son más que advertencias que no tienen ningún impacto negativo sobre nuestra granja y no afectan ni al rendimiento ni al funcionamiento de la misma, pero hay otros errores y advertencias que sí pueden causar un deterioro en las transacciones a las BBDD o en el rendimiento general de la aplicación, incluso puede hacer que alguna aplicación de servicio falle.

A continuación se van a describir algunos de los errores más comunes y la forma de solucionarlos rápida y eficazmente.

 1. Referencias a características huérfanas o perdidas

Causa: Los erres de este tipo son debidos a la mala desinstalación o retractación de una característica que se ha quedado referenciada en alguna de las BBDD de la granja, normalmente el error que nos encontramos tiene el siguiente formato:

“[MissingFeature] Database [SharePoint_Content_Portal] has reference(s) to a missing feature: Id = [8096285f-1463-42c7-82b7-f745e5bacf29], Name = [My Feature], Description = [], Install Location = [Test-MyFeature]. The feature with Id 8096285f-1463-42c7-82b7-f745e5bacf29 is referenced in the database [SharePoint_Content_Portal], but is not installed on the current farm. The missing feature may cause upgrade to fail. Please install any solution which contains the feature and restart upgrade if necessary.”

 

Resolución: Para poder eliminar este error, debemos realizar los siguientes pasos:

1. Abrir la consola PowerShell de SharePoint, pulsando con el botón derecho del ratón, y seleccionando la opción “Ejecutar como Administrador”.

2. En caso de no ejecutar en este modo, puede dar errores inesperados.Registrar las siguientes funciones de PowerShell:

function Remove-SPFeatureFromContentDB($ContentDb, $FeatureId, [switch]$ReportOnly)
{$db = Get-SPDatabase | where { $_.Name -eq $ContentDb }[bool]$report = $falseif ($ReportOnly) { $report = $true }

$db.Sites | ForEach-Object {

Remove-SPFeature -obj $_ -objName “site collection” -featId $FeatureId -report $report
$_ | Get-SPWeb -Limit all | ForEach-Object {
Remove-SPFeature -obj $_ -objName “site” -featId $FeatureId -report $report
}}}

function Remove-SPFeature($obj, $objName, $featId, [bool]$report)

{
$feature = $obj.Features[$featId]

if ($feature -ne $null) {

if ($report) {
write-host “Feature found in” $objName “:” $obj.Url -foregroundcolor Red
}

else{

try {
$obj.Features.Remove($feature.DefinitionId, $true)
write-host “Feature successfully removed from” $objName “:” $obj.Url -foregroundcolor Red
}

catch {
write-host “There has been an error trying to remove the feature:” $_
}}}

else {
#write-host “Feature ID specified does not exist in” $objName “:” $obj.Url
}}

3. Ejecutar el siguiente comando de PowerShell que para nuestro ejemplo sería:

Remove-SPFeatureFromContentDB -ContentDB “(BBDD)” -FeatureId “(FeatureID)”

Remove-SPFeatureFromContentDB -ContentDB “SharePoint_Content_Portal” -FeatureId “8096285f-1463-42c7-82b7-f745e5bacf29”

 2. No se encuentra un fichero de configuración

Causa: Este error nos indica que una BBDD está haciendo referencia a un archivo de configuración que no existe. Normalmente estos errores tienen el siguiente formato:

“[MissingSetupFile] File [FeaturesReviewPageListInstancesFilesWorkflowsReviewPageReviewPage.xoml] is referenced [1] times in the database [SharePoint_Content_Portal], but is not installed on the current farm. Please install any feature/solution which contains this file. One or more setup files are referenced in the database [SharePoint_Content_Portal], but are not installed on the current farm. Please install any feature or solution which contains these files”.

Resolución: Para poder eliminar este error se deben seguir los siguientes pasos:

  1. Abrir la consola PowerShell de SharePoint, pulsando con el botón derecho del ratón, y seleccionando la opción “Ejecutar como Administrador”. En caso de no ejecutar en este modo, puede dar errores inesperados.
  2. Registrar la siguiente funciones de PowerShell:

function Run-SQLQuery ($SqlServer, $SqlDatabase, $SqlQuery){

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

$SqlConnection.ConnectionString = “Server =” + $SqlServer + “; Database =” + $SqlDatabase + “; Integrated Security = True”

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlCmd.CommandText = $SqlQuery

$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet

$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()

$DataSet.Tables[0]

}

3. Ejecutar el siguiente comando de PowerShell:

Run-SQLQuery -SqlServer “(Servidor de la BBDD)” -SqlDatabase “(BBDD)” -SqlQuery “SELECT * from AllDocs where SetupPath = ‘(Archivo)” | select Id, SiteId, DirName, LeafName, WebId, ListId | Format-List

Que para nuestro ejemplo sería

Run-SQLQuery -SqlServer “SQLSERVER” -SqlDatabase “SharePoint_Content_Portal” -SqlQuery “SELECT * from AllDocs where SetupPath = ‘FeaturesReviewPageListInstancesFilesWorkflowsReviewPageReviewPage.xoml'” | select Id, SiteId, DirName, LeafName, WebId, ListId | Format-List

Este comando nos mostrará un resultado con la siguiente información:

Id       : f5fc66e7-920a-4b44-9e3d-3a5ab825093fSiteId   : 7b4d043c-8bbe-4068-ad91-3c270dfae151

DirName  : subsite/Workflows/Review Page

LeafName : Review Page.xoml

WebId    : 1876be06-419f-46fb-a942-a15e510f1a70

ListId   : a04dda01-a52d-4d5b-b3b4-fcd70a05e4ba

Para obtener el sitio lo podemos realizar con el siguiente comando de PowerShell:

$site = Get-SPSite -Limit all | where {$_.Id -eq “337c5721-5050-46ce-b112-083ac52f7f26”}$web = $site | Get-SPWeb -Limit all | where {$_.Id -eq “2ae0de59-a008-4244-aa66-d8f76c79f1ad”} $web.Url

4. Entonces nos meteremos con el SharePoint Designer a la ubicación que nos indica y borraremos el archivo.

5. Por último debemos acceder a la papelera del sitio y de la colección de sitios para borrar el archivo completamente.

3. No se encuentra un WebPart

Causa: Este error nos indica que una BBDD hace referencia a un WebPart que no existe. El formato típico de este error es el siguiente:

“[MissingWebPart] WebPart class [baf5274e-a800-8dc3-96d0-0003d9405663] is referenced [2] times in the database [SharePoint_Content_Portal], but is not installed on the current farm. Please install any feature/solution which contains this web part.”

Resolución: Para poder eliminar este error se deben seguir los siguientes pasos:

  1. Abrir la consola PowerShell de SharePoint, pulsando con el botón derecho del ratón, y seleccionando la opción “Ejecutar como Administrador”. En caso de no ejecutar en este modo, puede dar errores inesperados.
  2. Registrar la siguiente funciones de PowerShell:

function Run-SQLQuery ($SqlServer, $SqlDatabase, $SqlQuery){$SqlConnection = New-Object System.Data.SqlClient.SqlConnection$SqlConnection.ConnectionString = “Server =” + $SqlServer + “; Database =” + $SqlDatabase + “; Integrated Security = True”$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlCmd.CommandText = $SqlQuery

$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet

$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()

$DataSet.Tables[0]
}    
    
  1. Ejecutar el siguiente comando de PowerShell:
Run-SQLQuery -SqlServer “(Servidor de la BBDD)” -SqlDatabase “(BBDD)” -SqlQuery “SELECT * from AllDocs inner join AllWebParts on AllDocs.Id = AllWebParts.tp_PageUrlID where AllWebParts.tp_WebPartTypeID = ‘(WebPartID)'” | select Id, SiteId, DirName, LeafName, WebId, ListId, tp_ZoneID, tp_DisplayName | Format-List

Que para nuestro ejemplo sería

    Run-SQLQuery -SqlServer “SQLSERVER” -SqlDatabase ” SharePoint_Content_Portal ” -SqlQuery “SELECT * from AllDocs inner join AllWebParts on AllDocs.Id = AllWebParts.tp_PageUrlID where AllWebParts.tp_WebPartTypeID = ‘ baf5274e-a800-8dc3-96d0-0003d9405663′” | select Id, SiteId, DirName, LeafName, WebId, ListId, tp_ZoneID, tp_DisplayName | Format-List    

Este comando nos mostrará un resultado con la siguiente información:

    Id             : 6ab5e70b-60d8-4ddf-93cb-6a93fbc410beSiteId         : 337c5721-5050-46ce-b112-083ac52f7f26DirName        : News/PagesLeafName       : ArticleList.aspxWebId          : dcc93f3e-437a-4fae-acea-bb15d5c4ea7d

ListId         : 7e13fe6c-3670-4d46-9601-832e3eb6a1e4

tp_ZoneID      : Body

tp_DisplayName :

Id             : b3fcfcd2-2f02-4fe9-93e4-9c9b5ecddf5b

SiteId         : 337c5721-5050-46ce-b112-083ac52f7f26

DirName        : Pages

LeafName       : Welcome.aspx

WebId          : 2ae0de59-a008-4244-aa66-d8f76c79f1ad

ListId         : d8f083f0-16b9-43d0-9aaf-4e9fffecd6cc

tp_ZoneID      : RightColumnZone

tp_DisplayName :    

Para obtener el sitio lo podemos realizar con el siguiente comando de PowerShell:

$site = Get-SPSite -Limit all | where {$_.Id -eq “337c5721-5050-46ce-b112-083ac52f7f26”}$site.Url
  1. Entonces para cada webPart erróneo nos deberemos meter en su ubicación y añadir al final de la url el siguiente texto: ?contents=1

En el ejemplo anterior, si suponemos que el “$site.Url” es http://portal, la construcción de la url sería la siguiente:

http://portal/news/pages/articlelist.aspx?contents=1
  1. En esa pantalla podremos ver todos los webPart que tiene dicha página y debemos eliminar los que ponga que están erróneos.

 

4. No se encuentra una referencia

Causa: Este error ocurre cuando se utiliza una referencia a una compilación o dll desde una BBDD y esta no existe. El formato de este error es el siguiente:

“[MissingAssembly] Assembly [DocumentReviewEventHandler, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c] is referenced in the database [SharePoint_Content_Portal], but is not installed on the current farm. Please install any feature/solution which contains this assembly. One or more assemblies are referenced in the database [SharePoint_Content_Portal], but are not installed on the current farm. Please install any feature or solution which contains these assemblies.”

Resolución: Para poder eliminar y resolver este error, se deben seguir los siguientes pasos:

  1. Abrir la consola PowerShell de SharePoint, pulsando con el botón derecho del ratón, y seleccionando la opción “Ejecutar como Administrador”. En caso de no ejecutar en este modo, puede dar errores inesperados.
  2. Registrar la siguiente funciones de PowerShell:

    function Run-SQLQuery ($SqlServer, $SqlDatabase, $SqlQuery)

{

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

$SqlConnection.ConnectionString = “Server =” + $SqlServer + “; Database =” + $SqlDatabase + “; Integrated Security = True”

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlCmd.CommandText = $SqlQuery

$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet

$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()

$DataSet.Tables[0]

}
    
  1. Ejecutar el siguiente comando de PowerShell:
    Run-SQLQuery -SqlServer “(Servidor de la BBDD)” -SqlDatabase “(Nombre de la BBDD)” -SqlQuery “SELECT * from EventReceivers where Assembly = ‘(Assembly)'” | select Id, Name, SiteId, WebId, HostId, HostType | Format-List

Que para nuestro ejemplo sería

Run-SQLQuery -SqlServer “(Servidor de la BBDD)” -SqlDatabase “(Nombre de la BBDD)” -SqlQuery “SELECT * from EventReceivers where Assembly = ‘(Assembly)'” | select Id, Name, SiteId, WebId, HostId, HostType | Format-List

Este comando nos mostrará un resultado con la siguiente información:

Id       : f5fc66e7-920a-4b44-9e3d-3a5ab825093f

SiteId   : 337c5721-5050-46ce-b112-083ac52f7f26

DirName  : subsite/Workflows/Review Page

LeafName : Review Page.xoml

WebId    : 2ae0de59-a008-4244-aa66-d8f76c79f1ad

ListId   : a04dda01-a52d-4d5b-b3b4-fcd70a05e4ba    

Para obtener el sitio lo podemos realizar con el siguiente comando de PowerShell:

$site = Get-SPSite -Limit all | where {$_.Id -eq “337c5721-5050-46ce-b112-083ac52f7f26”}$web = $site | Get-SPWeb -Limit all | where {$_.Id -eq “2ae0de59-a008-4244-aa66-d8f76c79f1ad”}$web.Url
  1. Entonces para eliminar la lista usaremos el siguiente comando:
$list.Delete()

5. Por último debemos acceder a la papelera del sitio y de la colección de sitios para borrar la lista completamente.

 

5. Una aplicación de servicio de estado no tiene ninguna base de datos definida

Causa: Esto se puede deber a una de las siguientes razones

  • El administrador del conjunto o granja de servidores eliminó todas las bases de datos asociadas con la aplicación de servicio del servicio de estado.
  • El administrador de la granja de servidores nunca creó una base de datos o nunca la asoció con la aplicación de servicio del servicio de estado.

Resolución: Para poder resolver este error debe tener los siguientes permisos en la BBDD:

  • Rol securityadmin en la instancia de SQL Server
  • Rol db_owner en todas las BBDD que se van a cargar o asociar con la aplicación de servicio

Los pasos a seguir son los siguientes:

Abrir la consola de Administración de SharePoint como administrador

  1. Si la BBDD no existe, se debe lanzar el siguiente comando:

    New-SPStateServiceDatabase -Name  -DatabaseServer  [-DatabaseCredentials ] [-ServiceApplication ]
  2. Si la BBDD existe, se debe enlazar a la aplicación de servicio, para eso se utilizará el siguiente comando:

    Mount-SPStateServiceDatabase -Name  -DatabaseServer  [-DatabaseCredentials ] [-ServiceApplication ]

    En ambos casos los parámetros son:

    es el nombre de la base de datos como una cadena.

    es el nombre del servidor de bases de datos.

    representa las credenciales de autenticación de SQL Server para la bases de datos. Si no se usa este parámetro, se usará la autenticación de Windows.

    es el identificador de la aplicación de servicio del servicio de estado, como una cadena o un GUID. Si solo hay una aplicación de servicio del servicio de estado, no es necesario especificar este parámetro.

     

6. Las cuentas que usan los grupos de aplicaciones o identidades de servicio se encuentran en el grupo de administradores de la máquina local

Causa: Las cuentas que se usan como cuentas de servicio o para grupos de aplicaciones son Administradores locales de la máquina.

Resolución: Cambiar la cuenta de usuario a una cuenta predefinida o a una cuenta de dominio que no sea administrador de la máquina local.

Pasos a seguir:

  1. La cuenta de usuario que realice estas acciones debe ser Administrador del conjunto de la granja de servidores.
  2. En la página de la Administración central, ir a SeguridadàConfigurar cuentas de usuario
  3. En la página de configuración de cuentas de servicio, seleccionar la aplicación de servicio o el grupo de aplicaciones que se desea actualizar, en este caso sería cualquiera que utilice una cuenta que pertenezca al grupo de administradores de la máquina local.
  4. En la lista, seleccionar una cuenta y establecer la cuenta predefinida “Servicio de red” o bien registrar una nueva cuenta administrada, especificando el login y la contraseña de esa cuenta.

 7. No se han configurado las direcciones URL de acceso alternativo

Causa: Una dirección URL de zona predeterminada está señalando al nombre de equipo de un servidor web front-end.

Resolución: Cambiar la dirección URL de la zona predeterminada a una dirección URL distinta del nombre de equipo de cualquier servidor web front-end.

Pasos a seguir:

  1. La cuenta de usuario que realice estas acciones debe ser Administrador del conjunto de la granja de servidores.
  2. Navegar en la Administración central, ir a Configuración del sistemaàConfigurar asignaciones de acceso alternativas
  3. En el cuadro “Seleccionar una colección de asignaciones de acceso alternativas”, hacer click en la colección de asignaciones alternativas de la que se desee cambiar la dirección URL de la zona predeterminada
  4. Hacer click en “Editar direcciones URL públicas”
  5. En la página de “Editar direcciones URL públicas”, escribir una URL en el cuadro “Predeterminado”, con un nombre distinto a cualquier servidor web front-end.

 8. Los objetos de caché han sido vaciados

Causa: No hay suficiente memoria en el clúster de caché.

Resolución: Agregar más memoria RAM al servidor

Pasos a seguir:

    1. Se debe identificar el servidor que está generando el error, eso nos aparecerá en la propia advertencia de la Administración central
    2. La cuenta de usuario que realice estas acciones debe ser miembro de los siguientes roles:

      • Rol securityadmin de la BBDD
      • Rol db_owner en todas las BBDD que se van a actualizar
      • Administrador del servidor local donde se van a realizar las operaciones
      • Administrador de la granja de servidores
    3. Iniciar la consola de Administración de SharePoint como Administrador
    4. Comprobar los valores de Caché distribuida que están actualmente en uso, para ello, lanzar el siguiente comando:

      Get-SPDistributedCacheClientSetting
    5. Se debe detener el servicio de Caché distribuida para aumentar el tamaño, para ello lanzaremos la siguiente instrucción:
      Stop-SPDistributedCacheServiceInstance –Graceful
    6. A continuación, aumentaremos el tamaño de Caché fija del servidor, mediante la siguiente instrucción:
      Update-SPDistributedCacheSize -CacheSizeInMB CacheSize

      Donde:

      • CacheSize es el tamaño en MB que se le asigna a la memoria caché, tener en cuenta que el valor por defecto es el 5% del total del servidor y este valor nunca debería exceder del 40% del total del servidor
    7. Iniciar el servicio de Caché distribuida en todos los hosts de caché, para ello se debe navegar en la Administración centralàConfiguración del sistemaàServicios en el servidor. En esa página se debe buscar el servicio de caché distribuida y hacer click en el botón iniciar.

Gracias por leernos! Si tienes alguna duda o pregunta déjanos un comentario.