Czy mogę wyeksportować plan konserwacji bez korzystania z usług integracji?

12

Próbuję wyeksportować prosty plan konserwacji z wystąpienia programu SQL Server.

Chcę sprawdzić eksport do kontroli źródła i zastosować wyeksportowany plan konserwacji do funkcjonalnie identycznych instancji.

StackOverflow i SQL Server Newbie zalecają użycie Integration Services do wyeksportowania planu konserwacji.

Kiedy próbuję połączyć się z usługami integracji w celu eksportu, pojawia się następujący błąd:

Nawiązywanie połączenia z usługą Integration Services na komputerze „WEBSERVER” nie powiodło się z powodu następującego błędu: Określona usługa nie istnieje jako usługa zainstalowana.

Zdecydowaliśmy się wyłączyć usługi integracji w WEBSERVER, ponieważ używamy tego pola tylko do udostępniania danych aplikacjom konsumenckim. Wszystkie dane w WEBSERVER są replikowane z instancji zaplecza. Usługi integracji są intensywnie wykorzystywane do przetwarzania danych w instancji zaplecza.

Czy istnieje udokumentowany sposób eksportowania planu konserwacji bez korzystania z usług integracji? Czy Microsoft to obsługuje?

Iain Samuel McLean Elder
źródło

Odpowiedzi:

10

Plany konserwacji są przechowywane w msdb.dbo.sysssispackages, podobnie jak inne pakiety SSIS, które są przechowywane na serwerze SQL Server. Mam przydatny post na wyciągu z pakietu SSIS z MSDB, który powinien wyleczyć to, co cię trapi .

billinkc
źródło
Działa to tylko wtedy, gdy masz w pełni zainstalowany SSIS, ponieważ dtutil- który jest zbudowany wokół - jest w zasadzie wyłączony w przeciwnym razie, nawet jeśli jest obecny. Niektóre wersje SQL Server (takie jak Web Edition) nie pozwalają na pełną instalację SSIS, mimo że Plany konserwacji zasadniczo wykorzystują prawie wszystkie funkcje SSIS. (Jednak trzeba obejść ten problem, zakładając, że masz dwie wersje programu SQL Server, z których jedna nie jest spękana - patrz moja odpowiedź poniżej.)
MikeBeaton
3

Jest na to sposób.

Załóżmy, że podobnie jak OP, masz dwie instancje SQL Server, z których jedna ma zainstalowany SSIS, a jedna nie (prawdopodobnie nie może, np. Jeśli jest to SQL Server Web Edition).

Napisz procedurę składowaną, która kopiuje wiersze planu konserwacji użytkownika z serwera pokutowanego na serwer nie zapętlony. Odpowiednie wiersze to:

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

Musisz napisać ten SP, aby idnajpierw usunąć wszystkie wiersze z pasującymi sami , a następnie wstawić najnowsze wersje (lub podobne podejście, np. UPDATEPasujące ids, a następnie INSERTbrakujące ids). Będziesz musiał skonfigurować połączony serwer z jednej lub drugiej strony, abyś mógł pisać SQL, który adresuje oba serwery.

To jest naprawdę, możesz wtedy dzwonić regularnie ... na przykład z planu konserwacji ... i tworzyć kopie zapasowe wszystkich planów konserwacji po stronie spowolnionej.

To oczywiście ogromny hack, ale w rzeczywistości działa. (Wyobrażam sobie, że bardzo ważne jest, aby numer wersji programu SQL Server był taki sam po obu stronach, aby dane msdb.dbo.sysssispackagesbyły tak kompatybilne między różnymi instancjami serwera, jak się wydaje.)

Oczywiście zawsze możesz bezpośrednio wykonać kopię zapasową odpowiednich wierszy z tabeli bazy danych SSIS. To i tak działałoby - jako pełna odpowiedź na pierwotne pytanie. Jak już wspomniano, nie ma to nic wspólnego z założeniem SSIS - to po prostu zakłada plany konserwacji!

Jest to więc obsługiwana, lekka metoda, która działa bez SSIS w dowolnym miejscu w systemie. Zaletą bardziej złożonej, bardziej hackerskiej metody powyżej jest to, że daje wyeksportowane plany w standardowym formacie, a nie tylko puste wiersze danych; więc myślę, że później jest o wiele bardziej prawdopodobne, że będzie można je zaimportować do innej wersji SQL Server.

MikeBeaton
źródło
1

Walczyłem z DOKŁADNY ten sam problem. Oto główne wynos:

Usługi WEBSERVER nie wymagają żadnych usług integracyjnych. Jednym z udokumentowanych sposobów jest użycie DTUTIL. Wystarczy użyć DOWOLNEGO programu SQL Server (nawet darmowej wersji dla programistów ze wszystkimi funkcjami Enterprise) z zainstalowanymi usługami integracji w celu skopiowania pakietów konserwacyjnych programu SQL Server ze źródła do celu - nawet jeśli nie jest to źródło ani cel pakietu, jak pokazano w Przykład A.

Przykład A: Uruchom DTUTIL na SQL Server MySSISServerA, aby skopiować pakiet serwisowy SQL z MySourceServerB do MyDestServerC .

DTUTIL /SQL "Maintenance Plans\Nightly Maintenance" /copy  sql;"Maintenance Plans\Nightly Maintenance" /sourceserver MySourceServerB /destserver MyDestServerC /Q
Żądło
źródło
Z zastrzeżeniem, że ANY= ta sama wersja, w przeciwnym razie DTUTIL zaktualizuje plan do vCurrent
billinkc
Świetny punkt! Ale aktualizacje mogą być pomocne - do tego, co robimy. Lubię tworzyć plany w SQL 2008 i kopiować / uaktualniać te plany do SQL 2008, 2008 R2, 2012,2014, 2016.
Sting
0

Spójrz na:

Jak przenieść (skopiować) plany konserwacji z jednego serwera na inny? autor: Sreekanth Bandarla

Parafrazując i podsumowując:

  1. W SSMS zamiast łączyć się z „Aparat baz danych ...”, połącz się z „Integration Services ...”, dla tej samej nazwy serwera.

  2. Przejdź do „Zapisane pakiety / MSDB / Plany konserwacji”.

  3. Istnieją wszystkie Twoje plany konserwacji. Kliknij je prawym przyciskiem myszy, aby je wyeksportować.

RicardoBalda
źródło