Posso esportare un piano di manutenzione senza utilizzare Integration Services?


12

Sto cercando di esportare un semplice piano di manutenzione da un'istanza di SQL Server.

Voglio verificare l'esportazione nel controllo del codice sorgente e applicare il piano di manutenzione esportato a istanze funzionalmente identiche.

StackOverflow e SQL Server Newbie consigliano di utilizzare Integration Services per esportare il piano di manutenzione.

Quando provo a connettermi a Integration Services sulla destinazione di esportazione, ricevo il seguente errore:

La connessione al servizio Integration Services sul computer "WEBSERVER" non è riuscita con il seguente errore: Il servizio specificato non esiste come servizio installato.

Abbiamo scelto di disabilitare i servizi di integrazione su WEBSERVER perché utilizziamo questa casella solo per fornire dati ad applicazioni consumer. Tutti i dati su WEBSERVER vengono replicati da un'istanza di backend. Integration Services è ampiamente utilizzato per l'elaborazione di dati sull'istanza di back-end.

Esiste un modo documentato per esportare un piano di manutenzione senza utilizzare Integration Services? Microsoft lo supporta?

Risposte:


10

I piani di manutenzione sono archiviati in msdb.dbo.sysssispackages come qualsiasi altro pacchetto SSIS archiviato in SQL Server. Ho un utile post sull'estratto del pacchetto SSIS di MSDB che dovrebbe curare ciò che ti affligge.


Funziona solo se SSIS è completamente installato, perché dtutil- che è costruito intorno - è sostanzialmente disabilitato altrimenti, anche se è presente. Alcune versioni di SQL Server (come Web Edition) non consentono l'installazione completa di SSIS, anche se i piani di manutenzione utilizzano essenzialmente quasi tutte le funzionalità di SSIS. (Tuttavia, c'è un trucco per aggirare questo, supponendo che tu abbia due versioni di SQL Server, una delle quali non è zoppicante - vedi la mia risposta di seguito.)
MikeBeaton

3

C'è un modo per farlo.

Supponiamo che, come l'OP, tu abbia due istanze di SQL Server, una delle quali ha SSIS installato e una delle quali no (probabilmente non è possibile, ad esempio se si tratta di SQL Server Web Edition).

Scrivere una procedura memorizzata che copia le righe del piano di manutenzione dell'utente dal server in hobbled a quello non in hobbled. Le righe pertinenti sono:

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

Dovresti scrivere questo SP in modo che elimini prima tutte le righe con le corrispondenze id, quindi inserisce le ultime versioni (o un approccio simile, ad es. UPDATECorrispondenza ids, quindi INSERTmancante ids). E dovrai impostare un server collegato su uno o l'altro lato, in modo da poter scrivere SQL che indirizzi entrambi i server.

È così, davvero, puoi quindi chiamarlo regolarmente ... da un piano di manutenzione, ad esempio ... e fare il backup di tutti i piani di manutenzione sul lato non hobbled.

Questo è un trucco enorme, ovviamente, ma in realtà funziona. (Immagino che sia abbastanza importante che il numero di versione di SQL Server sia lo stesso su entrambi i lati, affinché i dati msdb.dbo.sysssispackagessiano compatibili tra le diverse istanze del server come sembra in realtà.)

Ovviamente, puoi sempre eseguire direttamente il backup delle righe pertinenti dalla tabella del database SSIS. Funzionerebbe comunque - come risposta completa alla domanda originale. Come detto, questo non ha nulla a che fare con il presupposto del SSIS - presuppone solo i piani di manutenzione!

Questo è un metodo supportato e leggero, che funziona senza SSIS in qualsiasi parte del sistema. Il vantaggio del metodo più complesso e più caotico di cui sopra è che fornisce piani esportati in un formato standard, non solo come righe di dati nudi; quindi penso che sia molto più probabile che sia importabile in una versione diversa di SQL Server, in seguito.


1

Ho avuto problemi con lo stesso problema EXACT. Ecco il take-away principale:

Nessun servizio di integrazione necessario sul tuo WEBSERVER. Un modo documentato è utilizzare DTUTIL. Basta usare QUALSIASI SQL Server (anche l'edizione per sviluppatori gratuita con tutte le funzionalità Enterprise) su cui è installato Integration Services per copiare i pacchetti di manutenzione di SQL Server da un'origine a una destinazione, anche se non è l'origine o la destinazione del pacchetto, come mostrato in Esempio A.

Esempio A: Eseguire dtutil su SQL Server MySSISServerA per copiare un pacchetto di manutenzione SQL da MySourceServerB a MyDestServerC .

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

Con l'avvertenza che ANY= stessa versione, altrimenti, DTUTIL aggiornerà il piano a vCurrent
billinkc

Ottimo punto! Ma gli aggiornamenti possono essere utili, per quello che facciamo comunque. Quello che mi piace fare è creare piani in SQL 2008 e copiare / aggiornare tali piani in SQL 2008, 2008 R2, 2012,2014, 2016.
Sting

0

Dai un'occhiata a:

Come trasferire (copiare) i piani di manutenzione da un server all'altro? di Sreekanth Bandarla

Per parafrasare e riassumere:

  1. In SSMS, invece di connettersi a "Motore di database ...", connettersi a "Integration Services ...", per lo stesso nome del server.

  2. Passare a "Pacchetti memorizzati / MSDB / Piani di manutenzione".

  3. Ci sono tutti i tuoi piani di manutenzione. Fare clic con il tasto destro su di essi per esportarli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.