tL; DR: Quelle autorisation/configuration de Windows est nécessaire pour le travail de collecte de données "Activité Server" pour fonctionner avec succès?
Je passe SQL Server 2016 SP1 CU6 (13.0.4457.0) sur Windows Server 2012 R2 Datacenter.
Chaque fois que j'essaie d'exécuter le collecteur de données "Activité du serveur", le travail d'agent SQL Server échoue et je vois les trois erreurs suivantes dans le journal des événements d'application sur la case.
Impossible d'ouvrir l'objet de performance du service serveur. Les quatre premiers octets (DWORD) de la section de données contiennent le code d'état.
Source: Perfnet, ID d'événement: 2004
La procédure ouverte pour le service "WMIAPLL" in DLL "C:\WMIAPL.DLL" a échoué. Les données de performance de ce service ne seront pas disponibles. Les quatre premiers octets ( DWORD) de la section de données contient le code d'erreur.
Source: Perflib, ID d'événement: 1008
La procédure ouverte pour le service "bits" in DLL "c:\windows\system32\bitsperf.dll" a échoué. Les données de performance de ce service ne seront pas disponibles. Les quatre premiers octets (DWORD) de la section de données contient le code d'erreur.
Source: Perflib, ID d'événement: 1008
Cela se passe sur les 4 des boîtes SQL Server où je gère ces collectionneurs. Les deux autres collecteurs (statistiques de requête et utilisation du disque) fonctionnent bien sur les 4 serveurs.
Choses que j'ai essayées qui n'avaient aucun effet:
Enfin, j'ai essayé d'ajouter temporairement le compte Windows que SQL Server Agent fonctionne sur le groupe Administrateurs local sur l'une des cases et le redémarrant. Cela a permis au travail de fonctionner avec succès (bien que le BITS est toujours apparu dans le journal des événements de l'application). Inverser cette et le redémarrage a causé le travail de commencer à échouer à nouveau.
Je ne veux pas que ce compte de service soit un administrateur local sur cette case et je serais choqué s'il doit être. Quelles sont donc les autorisations minimales nécessaires à ce compte pour pouvoir accéder aux données de compteur de performance nécessaires à ce jeu de collecte de données?
J'ai scripté les détails du travail, au cas où vous serez utile:
USE [msdb]
GO
/****** Object: Job [collection_set_2_collection] Script Date: 3/1/2018 2:17:35 PM ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [Data Collector] Script Date: 3/1/2018 2:17:35 PM ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Data Collector' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Data Collector'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'collection_set_2_collection',
@enabled=0,
@notify_level_eventlog=2,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'No description available.',
@category_name=N'Data Collector',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [collection_set_2_collection_collect] Script Date: 3/1/2018 2:17:35 PM ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'collection_set_2_collection_collect',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=3,
@on_fail_step_id=0,
@retry_attempts=3,
@retry_interval=5,
@os_run_priority=0, @subsystem=N'CmdExec',
@command=N'dcexec -c -s 2 -i "$(ESCAPE_DQUOTE(MACH))\$(ESCAPE_DQUOTE(INST))" -m 0 -e $(ESCAPE_NONE(STOPEVENT))',
@flags=80
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [collection_set_2_collection_autostop] Script Date: 3/1/2018 2:17:35 PM ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'collection_set_2_collection_autostop',
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=2,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec dbo.sp_syscollector_stop_collection_set @collection_set_id=2, @stop_collection_job = 0',
@database_name=N'msdb',
@flags=16
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'RunAsSQLAgentServiceStartSchedule',
@enabled=1,
@freq_type=64,
@freq_interval=0,
@freq_subday_type=0,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20160430,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959,
@schedule_uid=N'ec88e0b9-88cf-454b-a4c1-0397ef849519'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
Ajoutez le compte au Performance Monitor Users
Groupe local sur le serveur que vous souhaitez surveiller; Ce groupe encapsule tous les droits de sécurité requis requis pour examiner les données de surveillance des performances.
Peut-être que journaux d'erreur de collecteur de données montrera quelques messages d'erreur détaillés?