Los planes de mantenimiento en SQL Server proporcionan a los administradores de bases de datos un método rápido para configurar tareas de mantenimiento rutinarias. A partir de SQL Server 2005 los planes de mantenimineto son creados como paquetes de Integration Services (SSIS) y pueden ser ejecutados del mismo modo que cualquier otro paquete de SSIS:

  • Usando Business Intelligence Development Studio (BIDS)
  • Usando la utilidad "Import Export Wizard"
  • A través de tareas de SQL Server Agent
  • A través de la utilidad gráfica DTExecUI
  • Usando la utilidad en línea de comandos dtExec.exe

En el caso que quiero discutir me encontraba tratando de ejecutar un plan de mantenimiento con la utilidad dtExec.exe. Mi objetivo era realizar un backup de las bases de datos usando un plan de mantenimiento y podía comprobar que la ejecución del plan desde la línea de comandos no arrojaba ningún error, pero tampoco generaba ningún resultado. Esta es la sintaxis que estaba utilizando y los resultados obtenidos:

C:\>dtexec /SQL "Maintenance Plans\Backup MP" /Server SQL2005\YUKON
Microsoft (R) SQL Server Execute Package Utility
Version 9.00.3042.00 for 32-bit
Copyright (C) Microsoft Corp 1984-2005. All rights reserved.

Started: 15:21:20
DTExec: The package execution returned DTSER_SUCCESS (0).
Started: 15:21:20
Finished: 15:21:51
Elapsed: 31.046 seconds

Mi primer pensamiento fue, "¿necesito tener los servicios de SSIS en ejecución para poder ejecutar este paquete desde la línea de comandos?". El artículo de la Knowlege Base KB942176 explica cláramente que no es necesario tener estos servicios en ejecución:

"If you only want to design and to execute SSIS packages, you do not have to start the SSIS service. When the SSIS service is stopped, you can run SSIS packages by using the following utilities:

  - The SQL Server Import and Export Wizard
  - The SSIS designer
  - The Execute Package utility (DTExecUI.exe)
  - The DTExec.exe command prompt utility"

Cuando creamos un plan de mantenimiento usando SQL Server Management Studio podemos ver que se generan una o más tareas bajo el Agente de SQL Server que se corresponden con el plan de mantenimiento:

image

 

Existe una forma sencilla de comprobar qué parámetros en línea de comandos son utilizados por dtexec.exe a través de las propiedades del job del Agent de SQL Server, más concretamente en la opción "Command line" de la propiedades del subplan:

image

 

En mi caso pude comprobar que ejecutando dtexec.exe con los parámetros aquí descritos el plan de mantenimiento se ejecutaba correctamente y el archivo de backup era generado:

DTEXEC.EXE /SQL "Maintenance Plans\Backup MP" /Server SQL2005\YUKON /SET "\Package\Subplan_1.Disable";false

La parte más importante en este caso es la referida al modificador /SET. Tal y como se puede ver en la utilidad gráfica el plan de mantenimiento tiene uno o más subplanes asociados y este/estos se encuentran deshabilitados por defecto de modo que es necesario habilitarlos a través de valor "false" en la opción "Disable" del subplan. Recuerda que cada subplan definido en el plan de mantenimiento crea un job distinto en el Agent de SQL Server.

Podemos llevar a cabo esta misma acción dentro del propio paquete de SSIS asociado al plan de mantenimiento utilizando SQL Server Business Intelligence Development Studio (BIDS):

- Abrimos BIDS
- Creamos un nuevo proyecto de SSIS vacío
- Añadimos el plan de mantenimiento existente al proyecto utilizando "Solution Explorer"; el plan de mantenimiento será añadido como un nuevo paquete de SSIS
- Modificamos la propiedad "Disable" del subplan, configurándola como "false"
- Guardamos el paquete de SSIS como un plan de mantenimiento de SQL Server
- Ejecutamos el plan de mantenimiento. En este caso no es necesario utlizar el modificador /SET "\Package\Subplan_1.Disable";false