Я оказался в незначительной роли разработчика, которому поручено управлять сервером SQL. Я настроил выполнение некоторых заданий по расписанию, но хотел бы получать уведомление по электронной почте о завершении.
Я настроил Почта базы данных и успешно отправил тестовое сообщение, но я получаю сообщение об ошибке, в котором говорится, что была предпринята попытка отправить почту, когда сеанс не был установлен. В исследовании этого возникает много шума, потому что перезапуск агента SQL Server решит проблему.
Но прежде чем зайти слишком далеко в кроличью нору, я подумал, что спрошу, есть ли какие-либо непредвиденные последствия перезапуска агента SQL Server? Например, повлияет ли это на какие-либо текущие задания или существует высокий риск того, что он отключится, но не перезапустится?
Это SQL 2005 x64 SP4.
Агент имеет тенденцию иметь дело только с текущими задачами обслуживания (резервное копирование, повторное индексирование и т. Д.). Перед перезапуском убедитесь, что ничего не работает, и все должно быть в порядке. Я никогда раньше не перезапускал его, но, как и все остальное, я бы сделал это в нерабочее время, если вы беспокоитесь.
Исходя из моего опыта работы с SQL, вы сможете перезапустить эту службу без каких-либо непредвиденных последствий. Пока SQL Server запущен, не должно возникнуть проблем с возобновлением работы службы агента после ее остановки.
Что вы увидели в журналах событий, что заставляет вас думать, что требуется перезагрузка?
Запустите сценарий, чтобы узнать, запущено ли какое-либо задание. В противном случае можно безопасно перезапустить его.
List Running Jobs
/*
DESCRIPTION:
List the RUNNING jobs on an instance
CONFIGURATION
None
Compatibility list:
MSSQL2005
MSSQL2008
Does not work
MSSQL2000
Legend
@execution_status=1 Running
@execution_status=4 Idle
*/
IF EXISTS (SELECT * FROM tempdb.dbo.sysobjects WHERE ID = OBJECT_ID(N'tempdb..#JobInfo'))
BEGIN
DROP TABLE #JobInfo
END
SELECT * INTO #JobInfo
FROM OPENROWSET('sqloledb', 'server=(local);trusted_connection=yes'
, 'set fmtonly off exec msdb.dbo.sp_help_job @execution_status=1')
SELECT
-- [job_id]
[originating_server],[name],[enabled]
--,[description]
,[start_step_id]
--,[category]
,[owner]
--,[notify_level_eventlog],[notify_level_email],[notify_level_netsend],[notify_level_page],[notify_email_operator],[notify_netsend_operator],[notify_page_operator],[delete_level],[date_created],[date_modified]
--,[version_number]
,[last_run_date]
,[last_run_time]
,[last_run_outcome]
,[next_run_date]
,[next_run_time]
--,[next_run_schedule_id]
,[current_execution_status]
,[current_execution_step]
,[current_retry_attempt]
--,[has_step],[has_schedule],[has_target]
,[type]
FROM #JobInfo
Когда вы получаете сообщение об ошибке, ниже представлено решение
Решение: По сути, «Специальные распределенные запросы» отключены по умолчанию в SQL Server из-за конфигурации безопасности, и вы не можете использовать OPENROWSET или OPENDATASOURCE, а если вы не можете выполнить эти две функции набора строк, вы не сможете получить доступ к каким-либо удаленным источникам данных. Итак, как исправить эту проблему? Ниже приведен сценарий для включения «Специальных распределенных запросов».
USE master
GO
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
--ВЫВОД
Параметр конфигурации «показать дополнительные параметры» изменен с 0 на 1. Запустите оператор RECONFIGURE для установки. Параметр конфигурации «Специальные распределенные запросы» изменен с 0 на 1. Запустите оператор RECONFIGURE для установки.
Как вы можете видеть выше, параметр «Специальные распределенные запросы» изменен с 0 на 1. Теперь вы можете легко выполнить любой «Специальный запрос».
Примечание. По умолчанию для этого параметра установлено значение 0, и вам необходимо изменить его на 1, чтобы активировать эту функцию.