tl; dr:「サーバーアクティビティ」データ収集ジョブを正常に実行するには、どのWindows権限/構成が必要ですか?
Windows Server 2012 R2 DatacenterでSQL Server 2016 SP1 CU6(13.0.4457.0)を実行しています。
「サーバーアクティビティ」データコレクターを実行しようとすると、SQL Serverエージェントジョブが失敗し、ボックスのアプリケーションイベントログに次の3つのエラーが表示されます。
サーバーサービスパフォーマンスオブジェクトを開けません。データセクションの最初の4バイト(DWORD)には、ステータスコードが含まれています。
ソース:PerfNet、イベントID:2004
DLL "C:\ Windows\system32\wbem\wmiaprpl.dll"のサービス "WmiApRpl"のオープンプロシージャが失敗しました。このサービスのパフォーマンスデータは利用できません。最初の4バイト(データセクションのDWORD)には、エラーコードが含まれています。
ソース:Perflib、イベントID:1008
DLL "C:\ Windows\System32\bitsperf.dll"のサービス "BITS"のオープンプロシージャが失敗しました。このサービスのパフォーマンスデータは利用できません。最初の4バイト(DWORD)データセクションのエラーコードが含まれています。
ソース:Perflib、イベントID:1008
これは、これらのコレクターを実行している4つのSQL Serverボックスすべてで発生しています。他の2つのコレクター(クエリ統計とディスク使用量)は、4つのサーバーすべてで正常に動作しています。
私が試したことは効果がありませんでした:
最後に、SQL Serverエージェントが実行するWindowsアカウントを、いずれかのボックスのローカル管理者グループに一時的に追加して再起動してみました。 これにより、ジョブが正常に実行されました(BITSエラーがアプリケーションイベントログにまだ表示されています)。これを元に戻す再起動すると、ジョブが再び失敗し始めました。
このサービスアカウントをこのボックスのローカル管理者にしたくないので、必要な場合はショックを受けます。では、このアカウントがこのデータ収集セットに必要なパフォーマンスカウンターデータにアクセスするために必要な最低限の権限は何ですか?
役立つ場合に備えて、私はジョブの詳細をスクリプト化しました。
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
監視するサーバーのPerformance Monitor Users
ローカルグループにアカウントを追加します。そのグループは、パフォーマンスモニターデータを表示するために必要なすべての必要なセキュリティ権限をカプセル化します。
おそらく Data Collectorエラーログ はいくつかの詳細なエラーメッセージを表示しますか?