Je voulais construire un script qui définit le MODE DE RÉCUPÉRATION pour chaque base de données utilisateur à SIMPLE et le mettre dans un travail d'agent pour mes serveurs de développement. Cela semblait simple (désolé pour le jeu de mots) :
EXEC sp_msforeachdb 'USE ?; IF DB_ID() >= 5 ALTER DATABASE ? SET RECOVERY SIMPLE;'
Cela fonctionne aussi. Il s'exécute uniquement sur les bonnes bases de données, et tout ça. Cependant, j'obtiens le message d'erreur suivant :
Msg 5058, Niveau 16, État 1, Ligne 1
L'option 'RECOVERY' ne peut pas être définie dans la base de données 'tempdb'.
Je pourrais écrire du SQL dynamique dans la vue sys.databases pour les bases de données utilisateur, mais je me demande pourquoi sp_msforeachdb génère cette erreur.
Quelqu'un a-t-il une expérience qui pourrait l'éclairer ?
EDIT : Avec le code défini pour exclure tout DB avec un ID < 5, je suis perplexe quant à la raison pour laquelle j'obtiens cette erreur.