いくつかのエージェントジョブを含むSQL Server 2012データベースがあります。ジョブは問題なく実行されますが、ジョブ履歴は常に空です。どうして?
また、手動でジョブを実行すると(右クリックして[ステップでジョブを開始...])ジョブは実行されますが、ジョブの進行状況を示すウィンドウが閉じないことに注意してください。ジョブステップは完了しているように見えますが、ジョブ自体は決して完了しません。
すべてのタスクはsysadminとして実行されているため、権限は問題になりません。
sp_start_job
を介してジョブを実行すると、ジョブは完了しますが、ジョブ履歴は残りません。
jobhistory_max_rows_per_job
などの通常のチェック/変更をすべて行いました。
この問題は、ループバックインターフェイスを介してSQL Serverへの接続が行われたことが原因でした。ループバックチェックが実行されているため、ループバックアダプターを介したトラステッド接続が失敗します。
解決策は、以下の記事に従ってレジストリにエントリを追加して、ループバックチェックを無効にすることです。 https://stackoverflow.com/questions/1538027/sspi-handshake-failed-with-error-code-0x8009030c-while-establishing-a-connection/18053759 (ループバックの回答28/07 /を参照) 2011)
これはあなたの質問のほんの一部にしか対処しませんが(そしてあなたはすでに気付いているかもしれません):
ジョブを右クリックして「ステップでジョブを開始...」を選択しても、開いたウィンドウはジョブが完了しても自動的に閉じません。ウィンドウは手動で閉じる必要があります(ジョブの完了前または完了後に実行できます)。
ウィンドウの[ジョブの実行]行にステータス(成功またはエラー)が表示されると、ウィンドウが閉じていなくても(通常はシステムで確認済み)でも、sysjobhistoryに(通常は)エントリがあるはずです。
次のクエリを使用して、SQL Serverエージェントを含むSQL Serverの構成方法に関するすべての詳細を取得できます。これにより、何かが正しく構成されていない場所が示される場合があります。
DECLARE @MasterPath nvarchar(512);
DECLARE @LogPath nvarchar(512);
DECLARE @ErrorLog nvarchar(512);
DECLARE @ErrorLogPath nvarchar(512);
SELECT @MasterPath=substring(physical_name, 1, len(physical_name) - charindex('\', reverse(physical_name)))
FROM master.sys.database_files
WHERE name=N'master';
SELECT @LogPath=substring(physical_name, 1, len(physical_name) - charindex('\', reverse(physical_name)))
FROM master.sys.database_files
WHERE name=N'mastlog';
SELECT @ErrorLog=cast(SERVERPROPERTY(N'errorlogfilename') as nvarchar(512));
SELECT @ErrorLogPath=substring(@ErrorLog, 1, len(@ErrorLog) - charindex('\', reverse(@ErrorLog)));
DECLARE @SmoRoot nvarchar(512);
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
, N'SOFTWARE\Microsoft\MSSQLServer\Setup'
, N'SQLPath'
, @SmoRoot OUTPUT;
IF OBJECT_ID('tempdb..#tmp_sp_get_sqlagent_properties') IS NOT NULL
DROP TABLE #tmp_sp_get_sqlagent_properties;
CREATE TABLE #tmp_sp_get_sqlagent_properties
(
auto_start int null
, msx_server_name sysname null
, sqlagent_type int null
, startup_account nvarchar(255) null
, sqlserver_restart int null
, jobhistory_max_rows int null
, jobhistory_max_rows_per_job int null
, errorlog_file nvarchar(255) null
, errorlogging_level int null
, error_recipient nvarchar(30) null
, monitor_autostart int null
, local_Host_server sysname null
, job_shutdown_timeout int null
, cmdexec_account varbinary(64) null
, regular_connections int null
, Host_login_name sysname null
, Host_login_password varbinary(512) null
, login_timeout int null
, idle_cpu_percent int null
, idle_cpu_duration int null
, oem_errorlog int null
, sysadmin_only int null
, email_profile nvarchar(64) null
, email_save_in_sent_folder int null
, cpu_poller_enabled int null
, replace_alert_tokens_enabled int null
);
INSERT INTO #tmp_sp_get_sqlagent_properties
(
auto_start
, msx_server_name
, sqlagent_type
, startup_account
, sqlserver_restart
, jobhistory_max_rows
, jobhistory_max_rows_per_job
, errorlog_file
, errorlogging_level
, error_recipient
, monitor_autostart
, local_Host_server
, job_shutdown_timeout
, cmdexec_account
, regular_connections
, Host_login_name
, Host_login_password
, login_timeout
, idle_cpu_percent
, idle_cpu_duration
, oem_errorlog
, sysadmin_only
, email_profile
, email_save_in_sent_folder
, cpu_poller_enabled
, replace_alert_tokens_enabled
)
EXEC msdb.dbo.sp_get_sqlagent_properties;
DECLARE @DatabaseMailProfile nvarchar(255);
DECLARE @AgentMailType int;
DECLARE @ServiceStartMode int;
DECLARE @ServiceAccount nvarchar(512);
DECLARE @AgtGroup nvarchar(512);
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
, N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent'
, N'DatabaseMailProfile'
, @param = @DatabaseMailProfile OUT
, @no_output = N'no_output';
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
, N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent'
, N'UseDatabaseMail'
, @param = @AgentMailType OUT
, @no_output = N'no_output';
EXEC master.sys.xp_instance_regread 'HKEY_LOCAL_MACHINE'
, 'SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT'
, N'Start'
, @ServiceStartMode OUTPUT;
EXEC master.sys.xp_instance_regread 'HKEY_LOCAL_MACHINE'
, 'SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT'
, N'ObjectName'
, @ServiceAccount OUTPUT;
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
, N'SOFTWARE\Microsoft\MSSQLServer\Setup'
, N'AGTGroup'
, @AgtGroup OUTPUT;
SELECT Items.*
FROM #tmp_sp_get_sqlagent_properties AS tsgsp
CROSS APPLY (VALUES
('Name', CAST(serverproperty(N'ServerName') AS sql_variant))
, ('MsxServerName', ISNULL(tsgsp.msx_server_name,N''))
, ('JobServerType', CONVERT(sql_variant, tsgsp.sqlagent_type))
, ('SqlServerRestart', CONVERT(sql_variant, tsgsp.sqlserver_restart))
, ('SqlAgentRestart', CONVERT(sql_variant, tsgsp.monitor_autostart))
, ('MaximumHistoryRows', CONVERT(sql_variant, tsgsp.jobhistory_max_rows))
, ('MaximumJobHistoryRows', CONVERT(sql_variant, tsgsp.jobhistory_max_rows_per_job))
, ('ErrorLogFile', CONVERT(sql_variant, tsgsp.errorlog_file))
, ('AgentLogLevel', CONVERT(sql_variant, tsgsp.errorlogging_level))
, ('NetSendRecipient', CONVERT(sql_variant, ISNULL(tsgsp.error_recipient,N'')))
, ('AgentShutdownWaitTime', CONVERT(sql_variant, tsgsp.job_shutdown_timeout))
, ('SqlAgentMailProfile', CONVERT(sql_variant, ISNULL(tsgsp.email_profile,N'')))
, ('SaveInSentFolder', CONVERT(sql_variant, CAST(tsgsp.email_save_in_sent_folder AS bit)))
, ('WriteOemErrorLog', CONVERT(sql_variant, CAST(tsgsp.oem_errorlog AS bit)))
, ('IsCpuPollingEnabled', CONVERT(sql_variant, CAST(tsgsp.cpu_poller_enabled AS bit)))
, ('IdleCpuPercentage', CONVERT(sql_variant, tsgsp.idle_cpu_percent))
, ('IdleCpuDuration', CONVERT(sql_variant, tsgsp.idle_cpu_duration))
, ('LoginTimeout', CONVERT(sql_variant, tsgsp.login_timeout))
, ('HostLoginName', CONVERT(sql_variant, ISNULL(tsgsp.Host_login_name,N'')))
, ('LocalHostAlias', CONVERT(sql_variant, ISNULL(tsgsp.local_Host_server,N'')))
, ('SqlAgentAutoStart', CONVERT(sql_variant, tsgsp.auto_start))
, ('ReplaceAlertTokensEnabled', CONVERT(sql_variant, tsgsp.replace_alert_tokens_enabled))
, ('DatabaseMailProfile', CONVERT(sql_variant, ISNULL(@DatabaseMailProfile,N'')))
, ('AgentMailType', CONVERT(sql_variant, ISNULL(@AgentMailType, 0)))
, ('SysAdminOnly', CONVERT(sql_variant, 1))
, ('ServiceStartMode', CONVERT(sql_variant, @ServiceStartMode))
, ('ServiceAccount', CONVERT(sql_variant, ISNULL(@ServiceAccount,N'')))
, ('AgentDomainGroup', CONVERT(sql_variant, ISNULL(suser_sname(sid_binary(ISNULL(@AgtGroup,N''))),N'')))
)Items(ItemName, ItemValue)
UNION ALL
SELECT Items.*
FROM (VALUES
('IsCaseSensitive', CAST(case when 'a' <> 'A' then 1 else 0 end AS bit))
, ('MaxPrecision', @@MAX_PRECISION)
, ('ErrorLogPath', @ErrorLogPath)
, ('RootDirectory', @SmoRoot)
, ('IsFullTextInstalled', CAST(FULLTEXTSERVICEPROPERTY('IsFullTextInstalled') AS bit))
, ('MasterDBLogPath', @LogPath)
, ('MasterDBPath', @MasterPath)
, ('VersionString', SERVERPROPERTY(N'ProductVersion'))
, ('Edition', CAST(SERVERPROPERTY(N'Edition') AS sysname))
, ('ProductLevel', CAST(SERVERPROPERTY(N'ProductLevel') AS sysname))
, ('IsSingleUser', CAST(SERVERPROPERTY('IsSingleUser') AS bit))
, ('EngineEdition', CAST(SERVERPROPERTY('EngineEdition') AS int))
, ('Collation', convert(sysname, serverproperty(N'collation')))
, ('NetName', CAST(SERVERPROPERTY(N'MachineName') AS sysname))
, ('IsClustered', CAST(SERVERPROPERTY('IsClustered') AS bit))
, ('ResourceVersionString', SERVERPROPERTY(N'ResourceVersion'))
, ('ResourceLastUpdateDateTime', SERVERPROPERTY(N'ResourceLastUpdateDateTime'))
, ('CollationID', SERVERPROPERTY(N'CollationID'))
, ('ComparisonStyle', SERVERPROPERTY(N'ComparisonStyle'))
, ('SqlCharSet', SERVERPROPERTY(N'SqlCharSet'))
, ('SqlCharSetName', SERVERPROPERTY(N'SqlCharSetName'))
, ('SqlSortOrder', SERVERPROPERTY(N'SqlSortOrder'))
, ('SqlSortOrderName', SERVERPROPERTY(N'SqlSortOrderName'))
, ('BuildClrVersionString', SERVERPROPERTY(N'BuildClrVersion'))
, ('ComputerNamePhysicalNetBIOS', SERVERPROPERTY(N'ComputerNamePhysicalNetBIOS'))
)Items(ItemName, ItemValue)
ORDER BY Items.ItemName;
出力で特に興味深いのは次のとおりです。
MaximumHistoryRows
MaximumJobHistoryRows
上記の項目は、すべてのジョブのジョブ履歴が確実に表示されるように十分な数に設定する必要があります。たとえば、MaximumHistoryRowsが10に設定されているが、50のジョブがある場合、50の最近実行されたジョブの履歴のみが表示されます。質問の中で、これらの数値をすでに確認していることにお気づきでしょう-msdb.dbo.sysjobhistory
。
ジョブの最後のステップについては、「成功時」を確認してください。それは「成功を示す仕事をやめる」と言うべきです
ジョブの実行開始に使用したウィンドウは閉じませんが、すべてのジョブステップが完了すると、ジョブ履歴がコミットされます。
成功時が既に正しい場合、ステップの1つが完了しない可能性がありますが、新しいバージョンのSSMSでは、ジョブ全体が完了したかどうかに関係なく、完了したすべてのステップが表示されます。