SQL Server 2008 r2を使用しています。 SQL Serverエージェントが実行されているかどうかを確認する方法を見つけたいのですが。エージェントが実行されていないのではないかと疑っていますが、確認方法がわかりません。
Management Studioでは、オブジェクトエクスプローラーでSQL Serverエージェントノードを確認することにより、SQL Serverエージェントが実行されているかどうかを確認できます。次のスクリーンショットでは、SQL Server 2012インスタンスのSQL Serverエージェントは実行されていますが(SQL Serverエージェントアイコンに緑の矢印が重なっています)、SQL Server 2000のエージェントは停止しています(赤のx)。
[コントロールパネル]> [管理ツール]> [サービス]でも確認できます。
または、Program Files> SQL Server> Configuration Tools> Configuration Manager:
最後に、T-SQLを使用して状態を確認できます。
DECLARE @agent NVARCHAR(512);
SELECT @agent = COALESCE(N'SQLAgent$' + CONVERT(SYSNAME, SERVERPROPERTY('InstanceName')),
N'SQLServerAgent');
EXEC master.dbo.xp_servicecontrol 'QueryState', @agent;
SQL Serverエージェントが実行されている場合、SQL Server Management Studio内のSQL Serverエージェントアイコンの右下隅に緑色の再生ボタンが表示されます。
T-SQLを使用して特定のインスタンスのSQL Serverエージェントのステータスを検証するには、次のコードスニペットを実行します。
IF EXISTS ( SELECT 1
FROM master.dbo.sysprocesses
WHERE program_name = N'SQLAgent - Generic Refresher')
BEGIN
SELECT @@SERVERNAME AS 'InstanceName', 1 AS 'SQLServerAgentRunning'
END
ELSE
BEGIN
SELECT @@SERVERNAME AS 'InstanceName', 0 AS 'SQLServerAgentRunning'
END
ソース= Colin Stasiuk
SQLエージェントが実行されているかどうかを判断するための最も速く、最も簡単で、最も直接的な方法は、SSMSで簡単に実行できるクエリです(したがって、自動化できます)、およびは非推奨のシステムテーブル(つまりsysprocesses
)にクエリを実行していない、またはEXECING xp_servicecontrol
はSQL Server 2008 R2のSP1で導入されたDMVです。
SELECT dss.[status], dss.[status_desc]
FROM sys.dm_server_services dss
WHERE dss.[servicename] LIKE N'SQL Server Agent (%';
戻り値:
status status_desc
4 Running
VIEW SERVER STATE
サーバー権限が必要なだけですが、オブジェクトエクスプローラー(SSMS)でそのステータスを表示するために、すでにその権限が必要です。
また、VIEW SERVER STATE
を特定のログインに付与したくない場合は、他の情報を取得しすぎる可能性があるため、少なくとも実際のユーザーに対しては、技術的に何も付与する必要はありません。詳細については、同様の質問についてDBA.StackExchangeで私の回答を参照してください(実際の例を含む)。
SQL Serverエージェントサービスの状態を確認できるように、ユーザーに最低限必要なアクセス許可を提供する必要がありますか?
IF EXISTS (SELECT 1 FROM sysprocesses WHERE LEFT(program_name, 8) = 'SQLAgent')
PRINT 'Agent is running!'
ELSE
PRINT 'Agent is not connected!';
これが機能するかどうかを知らせてください
IF EXISTS ( SELECT 1
FROM master.dbo.sysprocesses
WHERE program_name = N'SQLAgent - Generic Refresher')
BEGIN
SELECT @@SERVERNAME AS 'InstanceName', 1 AS 'SQLServerAgentRunning'
END
ELSE
BEGIN
SELECT @@SERVERNAME AS 'InstanceName', 0 AS 'SQLServerAgentRunning'
END
SQL Serverエージェントがこのバッチファイルで実行されているかどうかを自動チェックします。
まだ実行されていない場合は、サービスの開始を開始します。
MSSQLの一部のバージョンでは、サービス名(SQLServerAgent)を微調整する必要があります。
echo off
echo Test SQL Server Agent Service
for /F "tokens=3 delims=: " %%H in ('sc query "SQLServerAgent" ^| findstr "STATE"') do (
if /I "%%H" NEQ "RUNNING" (
echo service was stopped, starting service
rem put your optional errorlog or warning message here
net start "SQLServerAgent"
)
)
これは私がpowershellで使用するものです
Get-Service | Where-Object -like -value '*sql*agent*' -Property 'name'