Запланированное выполнение кода для ведения операций с базами данных в SQL Server

Если я хочу проводить некоторые операции с базой данных на плановой основе, я мог бы:

  • Используйте агент SQL Server (если SQL Server) для периодического вызова хранимой процедуры и / или выполнения T-SQL

  • Запустите некоторый внешний процесс (запланированный планировщиком задач операционной системы, например), который выполняет операцию базы данных

  • и т.п.

Два вопроса:

  1. Каковы некоторые другие способы достижения этого
  2. Какие критерии принятия решения следует использовать для определения наилучшего подхода?

Спасибо.

Я считаю, что наилучшим подходом к критериям принятия решений является работа. Если это полностью внутренняя задача SQL Server или набор задач, которые не относятся к внешнему миру, я бы сказал, что SQL Job лучше всего подходит. Если, с другой стороны, вы извлекаете данные, а затем делаете что-то с ним, что по своей сути вне SQL Server, очень сложно сделать в T-SQL или отнимать много времени, возможно, внешняя услуга – лучшая ставка.

Другая возможность – иметь где-то очередь задач, и когда приложения, которые в противном случае используют базу данных, выполняют некоторую операцию, они также выполняют некоторые задачи из очереди. Википедия делает что-то вроде этого со своей очередью заданий. Планирование не так точно, как с другими методами, но вы можете, например, отложить выполнение служебной работы, когда ваш сервер сильно загружен.

Изменить: это не обязательно лучше или хуже других методов. Он подходит для задач, которые не должны выполняться каким-либо конкретным сроком, но должны выполняться «время от времени» или «скоро, но не обязательно прямо сейчас».

преимущества

  • Вам не нужно писать отдельное приложение или настраивать агент SQL Server.
  • Вы можете использовать любые критерии, которые вы можете запрограммировать, чтобы решить, следует ли запускать задачу или нет: немедленно, когда прошло определенное время или только если сервер не находится под большой нагрузкой.
  • Если запланированные задачи являются такими, как оптимизация индексов, то вы можете делать их реже, когда они менее необходимы (например, когда обновления встречаются редко) и чаще, когда обновления являются общими.

Недостатки

  • Возможно, вам потребуется изменить несколько приложений для правильного взаимодействия.
  • Вы должны убедиться, что очередь не слишком сильно накапливается.
  • Вы не можете надежно обеспечить выполнение задачи до определенного времени.
  • У вас могут быть длительные периоды, когда вы не получаете никаких запросов (например, по ночам), где могут выполняться отложенные / запланированные задачи, но не надо. Вы могли бы объединить его с одной из других идей, имея специальную программу, которая просто выполняет задания в очереди, но вы можете просто не беспокоиться о очереди.

Вы не можете полагаться на внешние процессы. Все решения на базе ОС, которые я видел, не смогли обеспечить в реальном мире: база данных – это больше, чем просто данные, в первую очередь из-за стратегии резервного копирования / восстановления, стратегии высокой доступности, стратегии восстановления после катастрофы и всех других «Истины» вы платите за лицензию SQL Server. Основанный на планировщике ОС будет внешним компонентом, полностью не осознающим и неинтегрированным с любым из них. То есть. вы не можете вернуть / восстановить свое расписание с вашими данными, оно не сработает с вашей базой данных, вы не сможете отправить его на удаленный сайт аварийного восстановления через ваш канал доставки данных SQL.

Если у вас есть агент (т. Е. Не экспресс-выпуск), используйте агент. Имеет долгую историю использования, и знать, как вокруг это важно. Единственная проблема с Агентом заключается в его зависимости от msdb, что делает его отключением от базы данных приложения и, следовательно, не очень хорошо отражается на решениях доступности и восстановления.

Для Express-выпусков (т. Е. Без агента) лучшим вариантом является сворачивание собственного планировщика на основе таймеров беседы (по крайней мере, в SQL 2k5 и forward). Вы используете разговоры для рассылки сообщений в нужный момент и полагаетесь на активированные процедуры для выполнения задач. Они являются транзакционными и интегрированы с вашей базой данных, поэтому вы можете полагаться на то, что они находятся после восстановления и после сбоя зеркалирования или кластеризации. К сожалению, знать, как их использовать, довольно скудно, у меня есть несколько статей о предмете на моем сайте rusanu.com . Я видел, как системы реплицируют достаточное количество API-интерфейса агента Express, полностью полагаясь на таймеры беседы.

Обычно я использую метод планирования операционных систем (планировщик задач для Windows, cron для Unix).

Я имею дело с несколькими платформами баз данных (SQL Server, Oracle, Informix) и хочу, чтобы планирование задач было как можно более общим.

Кроме того, в нашей производственной среде мы должны привлечь DBA для устранения неполадок / перезапуска заданий, выполняемых в базе данных. У нас есть лучший доступ к серверам приложений с запланированными задачами на них.

Я бы пошел с агентом SQL Server. Он хорошо интегрирован с SQL Server; различные функции SQL Server используют агент (например, отправка журналов). Например, вы можете создать задание агента для запуска одного или нескольких пакетов SSIS.

Он также интегрирован с уведомлением оператора и может быть написан по сценарию или выполнен через SMO.

Interesting Posts

Как преобразовать строку в целое число в SQL Server 2008?

Добавить ведущие нули в поле varchar

Экспорт базы данных SQL Server со всем, что с ним связано, например, с входами

SQL Group. Включая только отдельные записи, которые ранее не были в таблице.

Современная альтернатива DELETE … ГДЕ … НЕ В (…)?

SQL-сервер выбирает различные последние значения путем внутреннего соединения трех или более таблиц

Репликация сервера sql – получить последнюю дату синхронизации из запроса

Как опубликовать базу данных SSDT из кода

Как EXISTS возвращает вещи, отличные от всех строк или строк?

Сохранение имени пользователя и пароля для доступа к SQL Server с помощью службы Windows без встроенной безопасности

Экспорт двоичных файлов (изображений) из SQL с помощью хранимой процедуры

SQL 2005 – запрос на поиск таблиц с большинством строк

Как преобразовать значение двух строк в одну строку?

Что происходит в инструкции UPDATE, в которой обновленная таблица не упоминается в предложениях FROM / JOIN?

Определить группы строк по логике

Давайте будем гением компьютера.