Можно ли каким-либо образом создать Microsoft SQL Server для регулярной работы с хранимой процедурой?
Запланированный запуск хранимой процедуры на сервере SQL
Ответ 1
Да, в MS SQL Server вы можете создавать запланированные задания. В SQL Management Studio перейдите к серверу, затем разверните элемент агента SQL Server и, наконец, папку "Jobs", чтобы просмотреть, отредактировать, добавить запланированные задания.
Ответ 2
Если MS SQL Server Express Edition используется, агент SQL Server недоступен. Я нашел, что для всех выпусков работало:
USE Master
GO
IF EXISTS( SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]')
AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[MyBackgroundTask]
GO
CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- The interval between cleanup attempts
declare @timeToRun nvarchar(50)
set @timeToRun = '03:33:33'
while 1 = 1
begin
waitfor time @timeToRun
begin
execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
end
end
END
GO
-- Run the procedure when the master database starts.
sp_procoption @ProcName = 'MyBackgroundTask',
@OptionName = 'startup',
@OptionValue = 'on'
GO
Некоторые примечания:
- Стоит записать запись аудита где-нибудь, чтобы вы могли видеть, что запрос действительно выполнялся.
- Сервер необходимо перезагрузить один раз, чтобы гарантировать, что script запускается в первый раз.
- Связанный с этим вопрос: Как запускать хранимую процедуру каждый день в SQL Server Express Edition?
Ответ 3
Да, если вы используете Агент SQL Server.
Откройте свой Enterprise Manager и перейдите в папку "Управление" в интересующем вас экземпляре SQL Server. Там вы увидите Агент SQL Server, и под ним вы увидите раздел "Вакансии".
Здесь вы можете создать новое задание, и вы увидите список шагов, которые вам нужно создать. Когда вы создаете новый шаг, вы можете указать шаг для фактического запуска хранимой процедуры (введите TSQL Script). Выберите базу данных, а затем в командной строке введите что-то вроде:
exec MyStoredProcedure
Это обзор, напишите здесь, если вам нужны дальнейшие советы.
[Я действительно думал, что смогу попасть первым на этом, мальчик ошибся:)]
Ответ 4
Вероятно, это не тот ответ, который вы ищете, но я считаю более полезным просто использовать Планировщик задач Windows Server
Вы можете напрямую использовать команду sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"
Или даже создайте файл .bat
. Таким образом, вы можете даже дважды щелкнуть по заданию по требованию.
К этому также обратились HERE
Ответ 5
Я добавлю одно: где я нахожусь, у нас была куча пакетных заданий, которые запускались каждую ночь. Тем не менее, мы отодвигаемся от этого к использованию клиентского приложения, запланированного в запланированных задачах Windows, которые запускают каждую работу. Для этого есть (по крайней мере) три причины:
- У нас есть несколько консольных программ, которые нужно запускать каждую ночь. Таким образом, все запланированные задачи могут быть в одном месте. Конечно, это создает единую точку сбоя, но если задания консоли не выполняются, мы все равно потеряем работу на следующий день на следующий день.
- Программа, которая запускает задания, захватывает сообщения печати и ошибки с сервера и записывает их в общий журнал приложений для всех наших пакетных процессов. Это значительно облегчает работу с sql-заданиями.
- Если нам когда-либо понадобится обновить сервер (и мы надеемся сделать это в ближайшее время), нам не нужно беспокоиться о переносе заданий. Просто перетащите приложение один раз.
Это настоящее короткое приложение VB.Net: я могу отправить код, если кто-то заинтересован.
Ответ 6
Использование Management Studio - вы можете создать Job (unter SQL Server Agent) Одно задание может включать несколько шагов от T-SQL-скриптов до пакетов SSIS
Jeb был быстрее;)
Ответ 7
Вы должны посмотреть запланированное задание с использованием агента SQL Server.
Ответ 8
Для создания настраиваемого механизма вы можете использовать SQL Server Service Broker.
Идея (упрощенная):
-
Напишите хранимую процедуру/триггер, начинающий разговор (BEGIN DIALOG) как loopback (FROM my_service TO my_service) - получите обработчик беседы
DECLARE @dialog UNIQUEIDENTIFIER; BEGIN DIALOG CONVERSATION @dialog FROM SERVICE [name] TO SERVICE 'name' ...;
-
Запустите таймер беседы
DECLARE @time INT; BEGIN CONVERSATION TIMER (@dialog) TIMEOUT = @time;
-
После указанного количества секунд сообщение будет отправлено службе. Он будет помечен соответствующей очереди.
CREATE QUEUE queue_name WITH STATUS = ON, RETENTION = OFF , ACTIVATION (STATUS = ON, PROCEDURE_NAME = <procedure_name> , MAX_QUEUE_READERS = 20, EXECUTE AS N'dbo') , POISON_MESSAGE_HANDLING (STATUS = ON)
-
Процедура повторит запуск специального кода и повторного использования таймера.
Вы можете найти полное решение (T-SQL), написанное Michał Gołoś, называемое Планировщик заданий
Ключевые моменты из блога:
Плюсы:
- Поддерживается в каждой версии (от Express до Enterprise). Задание агента SQL Server недоступно для SQL Server Express
- Сведен к уровню базы данных. Вы можете легко перемещать базу данных с помощью связанных задач (особенно, когда вам нужно перемещать около 100 заданий из одного окружения в другое).
- Более низкие привилегии, необходимые для просмотра/управления задачами (уровень базы данных)
Предлагаемое различие:
Агент SQL Server (обслуживание):
- подпорки
- индексы/статистические перестройки
- Репликация
Планировщик заданий (бизнес-процессы):
- удаление старых данных
- преагрегации/циклические пересчеты
- денормализация
Как настроить:
- получить исходный код из раздела: "Do pobrania" - скачать (включение брокера/настройка схемы tsks/таблица конфигурации + триггеры + хранимая процедура)/настройка брокерских вещей)
- настроить таблицу конфигурации
[tsks].[tsksx_task_scheduler]
для добавления новых задач (имена столбцов являются самоописательными, включая примерную задачу)
Предупреждение: блог написан на польском языке, но связанный исходный код находится на английском языке, и его легко отслеживать.
Предупреждение 2: Прежде чем использовать его, убедитесь, что вы его протестировали в непроизводственной среде.