¿Es posible que SQL Server 2008 R2 Standard ejecute automáticamente un procedimiento almacenado en cualquier base de datos que se restaure o se adjunte a la instancia?
Me acerqué a una solución creando un disparador a nivel de servidor que ejecuta un procedimiento almacenado en una base de datos dada después del evento DDL CREATE_DATABASE
o ALTER_DATABASE
se dispara. Desafortunadamente, esto no funciona para las restauraciones de respaldo de datos.
Para elaborar, tenemos un procedimiento almacenado de 'limpieza' que existe en cada base de datos que restauramos y estoy buscando una manera de que esto se ejecute automáticamente cada vez que se restaura una copia de seguridad en la instancia.
Google me ha indicado que configure Auditorías o Políticas en SQL Server para obtener esta funcionalidad, pero estas características son bastante abrumadoras a primera vista, por lo que no puedo decir si las Auditorías o las Políticas son la vía para comenzar a investigar.
fuente
EndTime
nunca parece estar poblada. Puede suceder que intente conectarse a la base de datos y, si no puede, omítala y no documente este evento de restauración, sino intente nuevamente la próxima vez que se ejecute el trabajo. Intentaría validar, pero en mis máquinas virtuales locales solo tengo SSD, pero no tienen el espacio en disco para hacer que una copia de seguridad tarde lo suficiente como para observar el comportamiento con precisión. :-)El
database_started
evento extendido se activa después de restaurar una base de datos.Cree una sesión de evento que capture el
database_id
campo con un predicado que busque%RESTORE%
en elsql_text
campo (nota: creo que esto es suficiente, querrá probarlo usted mismo).No estoy lo suficientemente familiarizado con los eventos extendidos para decirle la mejor manera de responder al evento. Sería bueno si pudiera disparar un procedimiento almacenado directamente; Sin embargo, no sé si eso sea posible. Sin embargo, ciertamente puede sondear el búfer de eventos, y eso es preferible a escanear el rastreo predeterminado, no solo por razones de rendimiento, sino que si el servidor está muy ocupado y el intervalo de sondeo es demasiado largo, podría terminar perdiendo eventos por completo. Con el método de eventos extendidos, perder un evento sería muy poco probable.
fuente
Como puede ver en la lista de eventos DDL , un desencadenador DDL no puede ser lo suficientemente explícito para sus requisitos.
Recomiendo escribir un script de PowerShell para hacer la restauración o adjuntar y luego ejecutar el procedimiento almacenado inmediatamente siguiente. Eso sí, tu tienda tendrá que recibir instrucciones para usar esto en lugar de una restauración o un archivo adjunto típico.
Desafortunadamente, no creo que haya una forma integrada de lograr esto.
fuente
¿Cómo estás ejecutando tus copias de seguridad? Si solo está buscando ejecutar el SP después de su copia de seguridad, puede configurarlo como otra tarea en el trabajo, si los está utilizando, o plan de mantenimiento.
Por lo tanto, puede configurar Auditoría para escribir en el registro de eventos y luego crear una alerta que ejecutará un trabajo. Parece complicado pero hará lo que está pidiendo.
Echa un vistazo al siguiente código:
fuente
¿Cómo estás ejecutando tus copias de seguridad? Con Commvault puede configurar un trabajo de restauración automatizado y hacer que ejecute scripts de restauración previos y posteriores que pueden ser SQL o powershell. Hago esto todo el tiempo para ejecutar DDL por diferencias de versión y para hacer copias de seguridad y restaurar permisos al restaurar entre entornos.
Creo que Netbackup puede otros productos tener una funcionalidad similar
Si usa SQL, simplemente agréguelo como un paso al trabajo que restaura la base de datos
fuente