El syspolicy_purge_history trabajo del Agente SQL Server puede fallar en SQL Server 2008


Síntomas


En Microsoft SQL Server 2008, el trabajo de syspolicy_purge_history SQL Server Agent puede dar error cuando ejecuta el trabajo de syspolicy_purge_history en una instancia agrupada. Es posible que reciba un mensaje de error similar al siguiente en el archivo de registro del historial del trabajo de syspolicy_purge_history :
Fecha fecha deregistro deltrabajo de registro (Syspolicy_purge_history) ID de paso 3Server SQLVirtualName\InstanceNamenombre de trabajo Syspolicy_purge_historyStep nombre borrar registros de estado del sistema fantasma. duración 00:00:33Sql gravedad 0Sql 0Operator de mensaje por correo electrónico, operador red enviados, operador reintentos de 0MessageExecuted como usuario: usuario. El script de trabajo encontró los siguientes errores. Estos errores no han detenido el script: un paso de trabajo ha recibido un error en la línea 1 en un script de PowerShell. La línea correspondiente es ' (get-Item SQLSERVER: \ SQLPolicy \SQLVirtualName\InstanceName). EraseSystemHealthPhantomRecords()'. Corrija el script y reprograme el trabajo. La información de error devuelta por PowerShell es: ' error del proveedor de PowerShell de SQL Server: no se pudo conectar con 'SQLVirtualName\InstanceName'. [Error al conectar al servidor SQLVirtualName\InstanceName. --> se ha producido un error al establecer una conexión con el servidor. Al conectarse a SQL Server 2005, este error puede deberse a que el servidor SQL Server de configuración predeterminada no permite conexiones remotas. (proveedor: proveedor de canalizaciones con nombre, error: 40: no se pudo abrir una conexión con SQL Server)] Error al conectarse al servidor SQLVirtualName\InstanceName. Se ha producido un error al establecer una conexión con el servidor. Al conectarse a SQL Server 2005, este error puede deberse a que el servidor SQL Server de configuración predeterminada no permite conexiones remotas. (proveedor: proveedor de canalizaciones con nombre, error: 40: no se pudo abrir una conexión con SQL Server) ' Un paso de trabajo recibió un error en la línea 1 en un script de PowerShell. La línea correspondiente es ' (get-Item SQLSERVER: \ SQLPolicy \SQLVirtualName\InstanceName). EraseSystemHealthPhantomRecords()'. Corrija el script y reprograme el trabajo. La información de error devuelta por PowerShell es: ' no se puede encontrar la ruta de acceso ' SQLSERVER: \ SQLPolicy \SQLVirtualName\InstanceName' porque no existe. ' Un paso de trabajo recibió un error en la línea 1 en un script de PowerShell. La línea correspondiente es ' (get-Item SQLSERVER: \ SQLPolicy \SQLVirtualName\InstanceName). EraseSystemHealthPhantomRecords()'. Corrija el script y reprograme el trabajo. La información de error devuelta por PowerShell es: ' no se puede llamar a un método en una expresión de valor null. '. Procesar código de salida-1. Se produjo un error en el paso.

Causa


Este problema puede ocurrir si el syspolicy_purge_history trabajo usa el nombre del nodo equipo en lugar del nombre del servidor virtual para la instancia de clúster.

Solución


Para resolver este problema, utilice uno de los métodos siguientes.

Método 1: editar el trabajo de syspolicy_purge_history

Edite el paso 3 del trabajo de syspolicy_purge_history . Para ello, siga estos pasos:
  1. Inicie SQL Server Management Studio.
  2. Expanda Agente SQL Servery, a continuación, tareas.
  3. Haga clic con el botón secundario en syspolicy_purge_historyy después haga clic en propiedades.
  4. Haga clic en pasos.
  5. Haga clic en Borrar registros fantasma de mantenimiento del sistemay, a continuación, haga clic en Editar.
  6. En el cuadro comando , cambie el nombre del nodo de equipo usando el nombre del servidor virtual para la instancia de clúster.
  7. Haga clic en Aceptar y, después, en Cerrar.

Método 2: volver a crear el trabajo de syspolicy_purge_history

Para volver a crear el trabajo de syspolicy_purge_history , ejecute la siguiente instrucción de TRANSACT-SQL.
DECLARE @jobId uniqueidentifier-- Obtain the current job identifier that is associated with the PurgeHistorySELECT @jobId = CAST(current_value AS uniqueidentifier)FROM msdb.dbo.syspolicy_configuration_internalWHERE name = N'PurgeHistoryJobGuid'-- Delete the job identifier association in the syspolicy configurationDELETE FROM msdb.dbo.syspolicy_configuration_internalWHERE name = N'PurgeHistoryJobGuid'-- Delete the offending jobEXEC msdb.dbo.sp_delete_job @job_id = @jobId-- Re-create the job and its association in the syspolicy configuration tableEXEC msdb.dbo.sp_syspolicy_create_purge_job

Más información


En el programa de instalación de SQL Server 2008, la secuencia de comandos de configuración consulta el nombre del equipo en el motor de base de datos. Cuando el script de configuración consulta el nombre de equipo, el motor de base de datos no reconoce el clúster. Por lo tanto, el motor de base de datos devuelve el nombre del equipo en lugar del nombre del clúster.