¿Puedo exportar un plan de mantenimiento sin usar Integration Services?


12

Estoy tratando de exportar un plan de mantenimiento simple desde una instancia de SQL Server.

Quiero verificar la exportación al control de origen y aplicar el plan de mantenimiento exportado a instancias funcionalmente idénticas.

StackOverflow y SQL Server Newbie recomiendan usar Integration Services para exportar el plan de mantenimiento.

Cuando intento conectarme a Integration Services en el destino Exportar, recibo el siguiente error:

La conexión al servicio de Integration Services en la computadora "WEBSERVER" falló con el siguiente error: El servicio especificado no existe como un servicio instalado.

Elegimos deshabilitar los Servicios de integración en WEBSERVER porque usamos este cuadro solo para servir datos a aplicaciones de consumo. Todos los datos en WEBSERVER se replican desde una instancia de back-end. Integration Services se utiliza mucho para procesar datos en la instancia de back-end.

¿Existe una forma documentada de exportar un plan de mantenimiento sin usar Integration Services? ¿Microsoft lo admite?

Respuestas:


10

Los planes de mantenimiento se almacenan en paquetes msdb.dbo.sysssis como cualquier otro paquete SSIS que se almacena en SQL Server. Tengo una publicación útil sobre SSIS Package Extract de MSDB que debería curar lo que te aqueja.


Esto solo funciona si tiene SSIS completamente instalado, porque dtutil, lo cual se construye de forma redonda, básicamente está desactivado de lo contrario, aunque esté presente. Algunas versiones de SQL Server (como Web Edition) no permiten que SSIS se instale completamente, a pesar de que los Planes de mantenimiento esencialmente utilizan casi toda la funcionalidad de SSIS. (Sin embargo, hay un truco para evitar esto, suponiendo que tenga dos versiones de SQL Server, una de las cuales no está obstaculizada; consulte mi respuesta a continuación)
MikeBeaton

3

hay una forma de hacer esto.

Suponga que, al igual que el OP, tiene dos instancias de SQL Server, una de las cuales tiene SSIS instalado y otra no (probablemente no puede, por ejemplo, si es SQL Server Web Edition).

Escriba un procedimiento almacenado que copie las filas del plan de mantenimiento del usuario del servidor bloqueado en el servidor no bloqueado. Las filas relevantes son:

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

Debería escribir este SP para que elimine las filas que coincidan idprimero, luego inserte las últimas versiones (o un enfoque similar, por ejemplo, UPDATEcoincide con ids, luego INSERTfaltan ids). Y necesitará configurar un servidor vinculado en uno u otro lado, para que pueda escribir SQL que se dirija a ambos servidores.

Eso es todo, en realidad, puede llamar a esto regularmente ... desde un plan de mantenimiento, por ejemplo ... y hacer una copia de seguridad de todos los planes de mantenimiento en el lado no obstaculizado.

Este es un hack masivo, por supuesto, pero en realidad funciona. (Me imagino que es bastante importante que el número de versión de SQL Server sea el mismo en ambos lados, para que los datos msdb.dbo.sysssispackagessean tan compatibles entre las diferentes instancias del servidor como realmente parece ser).

Por supuesto, siempre puede hacer una copia de seguridad de las filas relevantes de la tabla de la base de datos SSIS directamente. Eso funcionaría de todos modos, como una respuesta completa a la pregunta original. Como se dijo, esto no tiene nada que ver con presuponer SSIS, ¡solo presupone planes de mantenimiento!

Es un método ligero y compatible que funciona sin SSIS en ninguna parte del sistema. La ventaja del método más complejo y más hacky anterior es que proporciona planes exportados en un formato estándar, no solo como filas de datos desnudos; así que creo que es mucho más probable que se pueda importar en una versión diferente de SQL Server, más adelante.


1

He estado luchando con el mismo problema EXACTO. Aquí está la comida para llevar principal:

No se necesitan servicios de integración en su WEBSERVER. Una forma documentada es usar DTUTIL. Simplemente use CUALQUIER servidor SQL (incluso la edición gratuita para desarrolladores con todas las características de Enterprise) que tenga instalados los Servicios de integración para copiar los paquetes de mantenimiento de SQL Server de una fuente a un destino, incluso si no es la fuente o el destino del paquete como se muestra en Ejemplo A.

Ejemplo A: Ejecute DTUTIL en SQL Server MySSISServerA para copiar un paquete de mantenimiento SQL de MySourceServerB a MyDestServerC .

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

Con la advertencia de que ANY= misma versión, de lo contrario, DTUTIL actualizará el plan a vCurrent
billinkc

Gran punto! Pero las actualizaciones pueden ser útiles, de todos modos para lo que hacemos. Lo que me gusta hacer es crear planes en SQL 2008 y copiar / actualizar esos planes a SQL 2008, 2008 R2, 2012,2014, 2016.
Sting

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.