Могу ли я экспортировать план обслуживания без использования служб Integration Services?


12

Я пытаюсь экспортировать простой план обслуживания из экземпляра SQL Server.

Я хочу проверить экспорт в систему контроля версий и применить экспортированный план обслуживания к функционально идентичным экземплярам.

StackOverflow и SQL Server Newbie рекомендуют использовать службы Integration Services для экспорта плана обслуживания.

Когда я пытаюсь подключиться к Integration Services на цели экспорта, я получаю следующую ошибку:

Соединение со службой Integration Services на компьютере «WEBSERVER» завершилось со следующей ошибкой: Указанная служба не существует в качестве установленной службы.

Мы решили отключить службы Integration Services на WEBSERVER, потому что мы используем это поле только для предоставления данных пользовательским приложениям. Все данные на WEBSERVER реплицируются из серверного экземпляра. Службы Integration Services активно используются для обработки данных на внутреннем экземпляре.

Есть ли документированный способ экспорта плана обслуживания без использования служб Integration Services? Microsoft поддерживает это?

Ответы:


10

Планы обслуживания хранятся в msdb.dbo.sysssispackages, как и любые другие пакеты служб SSIS, которые хранятся на SQL Server. У меня есть удобная статья о пакете SSIS Extract from MSDB, которая должна вылечить то, что вас беспокоит.


Это работает только в том случае, если у вас полностью установлен SSIS, потому что dtutil- который построен на нем - в основном отключен, даже если он присутствует. Некоторые версии SQL Server (например, Web Edition) не позволяют полностью установить SSIS, хотя в планах обслуживания по существу используются почти все функции SSIS. (Однако есть способ обойти это, если у вас есть две версии SQL Server, одна из которых не заблокирована - см. Мой ответ ниже.)
MikeBeaton

3

Есть способ сделать это.

Предположим, что, как и у OP, у вас есть два экземпляра SQL Server, на одном из которых установлен SSIS, а на другом - нет (вероятно, нет, например, если это SQL Server Web Edition).

Напишите хранимую процедуру, которая копирует строки плана обслуживания пользователя с хобблированного сервера на не хобблированный. Соответствующие строки:

SELECT name 
FROM msdb.dbo.sysssispackages 
WHERE packagetype = 6

Вам нужно было бы написать этот SP, чтобы он idсначала удалял все строки с соответствующими , а затем вставлял последние версии (или аналогичный подход, например, UPDATEсоответствующие ids, а затем INSERTотсутствующие ids). И вам нужно будет настроить связанный сервер на одной или другой стороне, чтобы вы могли писать SQL, который адресован обоим серверам.

Вот и все, на самом деле, вы можете регулярно звонить по этому номеру ... например, из плана технического обслуживания ... и создавать резервные копии всех планов технического обслуживания на стороне без помех.

Конечно, это огромный взлом, но на самом деле это работает. (Я полагаю, что очень важно, чтобы номер версии SQL Server был одинаковым с обеих сторон, чтобы данные msdb.dbo.sysssispackagesбыли настолько совместимы между различными экземплярами сервера, насколько это действительно кажется).

Конечно, вы всегда можете просто сделать резервную копию соответствующих строк из таблицы базы данных служб SSIS. Это сработало бы в любом случае - как полный ответ на оригинальный вопрос. Как уже говорилось, это не имеет ничего общего с предположением о SSIS - это просто предполагает планы обслуживания!

Так что это поддерживаемый, легкий метод, который работает без SSIS в любой части системы. Преимущество более сложного, более хакерского метода, приведенного выше, состоит в том, что он дает экспортированные планы в стандартном формате, а не только в виде пустых строк данных; поэтому я думаю, что в будущем гораздо вероятнее будет импортировать их в другую версию SQL Server.


1

Я боролся с точно такой же проблемой. Вот основной вынос:

На вашем веб-сервере не требуется никаких услуг по интеграции. Одним из документированных способов является использование DTUTIL. Просто используйте ЛЮБОЙ SQL Server (даже бесплатную версию для разработчиков со всеми функциями Enterprise), на котором установлены службы Integration Services, чтобы скопировать пакеты обслуживания SQL Server из источника в цель, даже если это не источник или цель пакета, как показано в Пример А.

Пример A: Запустите DTUTIL на SQL Server MySSISServerA, чтобы скопировать пакет обслуживания SQL из MySourceServerB в MyDestServerC .

DTUTIL /SQL "Maintenance Plans\Nightly Maintenance" /copy  sql;"Maintenance Plans\Nightly Maintenance" /sourceserver MySourceServerB /destserver MyDestServerC /Q

С оговоркой, что ANY= та же версия, в противном случае DTUTIL обновит план до vCurrent
billinkc

Отличный момент! Но обновления могут быть полезны - для того, что мы делаем в любом случае. Что мне нравится делать, так это создавать планы в SQL 2008 и копировать / обновлять эти планы до SQL 2008, 2008 R2, 2012,2014, 2016.
Sting

0

Посмотри на:

Как перенести (скопировать) планы обслуживания с одного сервера на другой? Срикант Бандарла

Перефразируя и резюмируя:

  1. В SSMS вместо подключения к «компоненту Database Engine ...» подключитесь к «Integration Services ...» с тем же именем сервера.

  2. Перейдите к «Сохраненные пакеты / MSDB / Планы обслуживания».

  3. Есть все ваши планы обслуживания. Щелкните правой кнопкой мыши на них, чтобы экспортировать их.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.