web-dev-qa-db-ja.com

SQL Serverエージェントが実行されているかどうかを確認する方法

SQL Server 2008 r2を使用しています。 SQL Serverエージェントが実行されているかどうかを確認する方法を見つけたいのですが。エージェントが実行されていないのではないかと疑っていますが、確認方法がわかりません。

15
qinking126

Management Studioでは、オブジェクトエクスプローラーでSQL Serverエージェントノードを確認することにより、SQL Serverエージェントが実行されているかどうかを確認できます。次のスクリーンショットでは、SQL Server 2012インスタンスのSQL Serverエージェントは実行されていますが(SQL Serverエージェントアイコンに緑の矢印が重なっています)、SQL Server 2000のエージェントは停止しています(赤のx)。

enter image description here

[コントロールパネル]> [管理ツール]> [サービス]でも確認できます。

enter image description here

または、Program Files> SQL Server> Configuration Tools> Configuration Manager:

enter image description here

最後に、T-SQLを使用して状態を確認できます。

DECLARE @agent NVARCHAR(512);

SELECT @agent = COALESCE(N'SQLAgent$' + CONVERT(SYSNAME, SERVERPROPERTY('InstanceName')), 
  N'SQLServerAgent');

EXEC master.dbo.xp_servicecontrol 'QueryState', @agent;
28
Aaron Bertrand

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

8
John Sansom

SQLエージェントが実行されているかどうかを判断するための最も速く、最も簡単で、最も直接的な方法は、SSMSで簡単に実行できるクエリです(したがって、自動化できます)、およびは非推奨のシステムテーブル(つまりsysprocesses)にクエリを実行していない、またはEXECING xp_servicecontrolはSQL Server 2008 R2のSP1で導入されたDMVです。

sys.dm_server_services

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エージェントサービスの状態を確認できるように、ユーザーに最低限必要なアクセス許可を提供する必要がありますか?

4
Solomon Rutzky
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

リファレンス: http://benchmarkitconsulting.com/colin-stasiuk/2009/07/20/check-sql-server-agent-status-on-all-sql-servers/

3
NG.

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"
  )
)
2
Jens Frandsen

これは私がpowershellで使用するものです

Get-Service | Where-Object -like -value '*sql*agent*' -Property 'name'

0
chrisevett