Est-il possible que SQL Server 2008 R2 Standard exécute automatiquement une procédure stockée dans une base de données donnée qui est restaurée ou attachée à l'instance?
J'ai trouvé une solution proche en créant un déclencheur de niveau serveur qui exécute une procédure stockée dans une base de données donnée après l'événement DDL CREATE_DATABASE
ou ALTER_DATABASE
est déclenché. Malheureusement, cela ne fonctionne pas pour les restaurations de sauvegarde de databack.
Pour élaborer, nous avons une procédure stockée de «nettoyage» qui existe dans chaque base de données que nous restaurons et je cherche un moyen de l'exécuter automatiquement chaque fois qu'une sauvegarde est restaurée sur l'instance.
La recherche sur Google m'a indiqué de configurer des audits ou des stratégies dans SQL Server pour obtenir cette fonctionnalité, mais ces fonctionnalités sont assez écrasantes à première vue, donc je ne peux pas dire si les audits ou les politiques sont la voie pour commencer à enquêter.
la source
EndTime
ne semble jamais être peuplée. Il se peut que vous deviez essayer de vous connecter à la base de données et, si vous ne le pouvez pas, l'ignorer et ne pas documenter cet événement de restauration, mais réessayer la prochaine fois que le travail s'exécute. J'essaierais et validerais mais sur mes VM locales je n'ai que des SSD mais ils n'ont pas l'espace disque pour faire une sauvegarde assez longtemps pour observer le comportement avec précision. :-)L'
database_started
événement étendu est déclenché après la restauration d'une base de données.Créez une session d'événement qui capture le
database_id
champ avec un prédicat qui recherche%RESTORE%
sur lesql_text
terrain (note: je crois que cela suffit - vous voudrez tester par vous-même).Je ne connais pas suffisamment les événements étendus pour vous indiquer la meilleure façon de répondre à l'événement. Ce serait bien si vous pouviez lancer une procédure stockée directement; Je ne sais pas si c'est possible, cependant. Cependant, vous pouvez certainement interroger le tampon d'événements, ce qui est préférable à l'analyse de la trace par défaut - non seulement pour des raisons de performances, mais si le serveur est très occupé et que l'intervalle d'interrogation est trop long, vous pourriez finir par manquer des événements. Avec la méthode Extended Events, il serait très improbable de manquer un événement.
la source
Comme vous pouvez le voir dans la liste des événements DDL , un déclencheur DDL ne peut pas être suffisamment explicite pour vos besoins.
Je recommanderais d'écrire un script PowerShell pour effectuer la restauration ou l'attachement, puis exécuter la procédure stockée immédiatement suivante. Attention, votre boutique devra être chargée de l'utiliser au lieu d'une restauration ou d'une attache classique.
Malheureusement, je ne pense pas qu'il existe un moyen intégré pour y parvenir.
la source
Comment exécutez-vous vos sauvegardes? Si vous cherchez simplement à exécuter le SP après votre sauvegarde, vous pouvez le configurer comme une autre tâche du travail, si vous les utilisez, ou un plan de maintenance.
Vous pouvez donc configurer l'audit pour écrire dans le journal des événements, puis créer une alerte qui exécutera une tâche. Il semble compliqué, mais il fera ce que vous demandez.
Jetez un œil au code suivant:
la source
Comment exécutez-vous vos sauvegardes? Avec Commvault, vous pouvez configurer un travail de restauration automatisé et le faire exécuter des scripts avant et après restauration qui peuvent être SQL ou PowerShell. Je le fais tout le temps pour exécuter DDL pour les différences de version et pour sauvegarder et restaurer les autorisations lors de la restauration entre les environnements.
Je crois que Netbackup peut-il avoir d'autres fonctionnalités similaires
Si vous utilisez SQL, ajoutez-le simplement en tant qu'étape au travail de restauration de la base de données
la source