SQL Server2008r2を使用しています。SQLServerエージェントが実行されているかどうかを確認する方法を見つけたいです。エージェントが実行されていないのではないかと疑っていますが、確認方法がわかりません。
7 に答える
Management Studioでは、オブジェクトエクスプローラーでSQL Serverエージェントノードを確認することにより、SQLServerエージェントが実行されているかどうかを確認できます。次のスクリーンショットでは、SQL Server2012インスタンスのSQLServerエージェントは実行されていますが(SQL Serverエージェントアイコンに緑色の矢印が重なっています)、SQL Server 2000のエージェントは停止しています(赤いx)。
[コントロールパネル]>[管理ツール]>[サービス]で確認することもできます。
または、[プログラムファイル]> [Microsoft SQLServer]>[構成ツール]>[構成マネージャー]で:
最後に、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 ServerManagementStudio内のSQLServerエージェントアイコンの右下隅に緑色の再生ボタンが表示されます。
T-SQLを使用して特定のインスタンスのSQLServerエージェントのステータスを検証するには、次のコードスニペットを実行します。
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 Agentが実行されているかどうかを判断するための最も速く、最も簡単で、最も直接的な方法であり、SSMSで簡単に実行できます。これはクエリであり(したがって自動化できます)、非推奨のシステムテーブル(つまりsysprocesses
)をクエリしたり、EXECを実行したりすることはありません。xp_servicecontrol
は、SQL Server2008R2の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
したくない場合は、少なくとも実際のユーザーには、技術的には何も付与する必要はありません。詳細(実例を含む)については、次の2つのリソースを参照してください。
- SQL Serverエージェントサービスのステータスを確認できるように、ユーザーに提供する必要のある最小限のアクセス許可は何ですか?(DBA.StackExchangeに関する同様の質問)
- 誰にも付与せずに高レベルのアクセス許可を安全かつ簡単に使用する:サーバーレベル(ブログ投稿)
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
SQLServerエージェントがこのバッチファイルで実行されているかどうかのチェックを自動化します。
まだ実行されていない場合は、サービスの開始を開始します。
一部のバージョンの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'
2020年にSQLServerDeveloperAddition2019用に更新されました
表示->登録済みサーバー->ローカルサーバーグループ
これにより、すべてのローカルサーバーが一覧表示されます。サーバーのそばに赤いXがある場合、それは停止しています。または、それを右クリックしてサービスコントロールに移動することもできます。そこから、再起動の開始/停止などを行うことができます。