Чи можна експортувати план технічного обслуговування без використання інтеграційних служб?


12

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

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

StackOverflow та SQL Server Новачкові рекомендують використовувати для інтеграції послуги інтеграції служби інтеграції.

Коли я намагаюся підключитися до служб інтеграції на Експортній цілі, я отримую таку помилку:

Підключення до послуги "Інтеграційні послуги" на комп'ютері "WEBSERVER" не вдалось із наступною помилкою: зазначена послуга не існує як встановлена ​​служба.

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

Чи існує документально підтверджений спосіб експорту плану обслуговування без використання інтеграційних служб? Чи підтримує це Microsoft?

Відповіді:


10

Плани технічного обслуговування зберігаються в msdb.dbo.sysssispacpacges, як і будь-які інші пакети SSIS, які зберігаються на SQL Server. У мене є зручна довідка про витяжку пакету SSIS з MSDB, яка повинна вилікувати те, що вас неприємно.


Це працює лише в тому випадку, якщо ви повністю встановлені SSIS, тому що, dtutil- який цей вбудований круглий - в основному він відключений інакше, навіть якщо він присутній. Деякі версії SQL Server (наприклад, Web Edition) не дозволяють повністю встановити SSIS, навіть незважаючи на те, що Плани технічного обслуговування по суті використовують майже всю функціональність SSIS. (Тим не менш, є можливість зламати це, якщо припустити, що у вас є дві версії SQL Server, одна з яких не покручена - див. Мою відповідь нижче.)
MikeBeaton

3

Для цього є спосіб.

Припустимо, що, як і в ОП, у вас є два екземпляри SQL Server, в одному з яких встановлений SSIS, а в одному з них немає (можливо, не може, наприклад, якщо це веб-версія SQL Server).

Напишіть збережену процедуру, яка копіює рядки плану технічного обслуговування користувача з обробленого сервера на неконденсований. Відповідні рядки:

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

Я боровся з ТОЧНИМ тим самим питанням. Ось головний винос:

На вашому веб-сайті WEBSERVER інтеграційні послуги не потрібні. Одним із документально підтверджених способів є використання DTUTIL. Просто використовуйте будь-який сервер SQL (навіть безкоштовне видання для розробників із усіма функціями Enterprise), на якому встановлені послуги інтеграції, щоб копіювати пакети обслуговування 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.