Pour la sauvegarde, vous voulez probablement utiliser xp_sqlmaint. Il a la capacité pratique de supprimer les anciennes sauvegardes, et il crée un joli fichier journal. Vous pouvez l'appeler via quelque chose comme: EXECUTER master.dbo.xp_sqlmaint N '' - S "[NomServeur]" [ServerLogonDetails] -D [DatabaseName] -Rpt "[BackupArchive] \ BackupLog.txt" [RptExpirationSchedule] -CkDB - BkUpDB "[BackupArchive]" -BKUpMedia DISK [BakExpirationSchedule] ''
(remplacez les [crochets] par des valeurs appropriées). Pour la sauvegarde, vous devrez peut-être sauvegarder le journal des transactions. Quelque chose comme: IF DATABASEPROPERTYEX ((SELECT nom_base (dbid) FROM master..sysprocesses WHERE spid = @@ SPID), '' Récupération '') > '' SIMPLE '' EXÉCUTER master.dbo.xp_sqlmaint N '' -S "[ServerName]" [ServerLogonDetails] -D [DatabaseName] -RPT "[BackupArchive] \ BackupLog_TRN.txt" [RptExpirationSchedule] -BkUpLog "[BackupArchive]" -BkExt TRN -BkUpMedia DISK [BakExpirationSchedule] ''
I Je recommande de stocker les commandes que vous utilisez dans une table de base de données (1 ligne par commande) et d'utiliser un certain type de schéma de remplacement de modèle pour gérer les valeurs configurables. Cela permettrait de modifier facilement les commandes, sans avoir besoin de déployer du nouveau code.
Pour la restauration, vous devrez supprimer toutes les connexions sauf celles du serveur SQL interne. Fondamentalement, prenez les résultats de "exec sp_who" et pour les lignes qui correspondent à dbname, et avoir un statut qui n'est pas "background", et un cmd qui n'est pas un de "SIGNAL HANDLER", "LOCK MONITOR", "LAZY WRITER" , "LOG WRITER", "CHECKPOINT SLEEP" faire un "kill" sur le spid (par exemple: ExecuteNonQuery ("kill 1283")).
Vous voudrez piéger et ignorer les exceptions de la commande KILL. Il n'y a rien que tu puisses faire à leur sujet. Si la restauration ne peut pas se poursuivre en raison des connexions existantes, une erreur se produit.
Un danger avec des connexions mortelles est le pool de connexions ADO (plus pour les applications asp.net que pour les applications Windows).ADO suppose que la connexion récupérée à partir du pool de connexions est valide ... et qu'elle ne réagit pas correctement aux connexions qui ont été supprimées. L'opération suivante qui se produit sur cette connexion échouera. Je ne peux pas me rappeler l'erreur ... vous pourriez piéger juste cette erreur spécifique et la manipuler ... aussi avec 3.5 je pense que vous pouvez vider le pool de connexion (ainsi ... attrapez l'erreur, videz le pool de connexion , ouvrez la connexion, essayez à nouveau la commande ... moche mais pourrait être faisable).
Je ne sais pas ce que vous entendez par SSME, mais je vois deux possibilités (peut-être tort): - Soit vous parlez d'un script SQL - Ou un autre script qui sera exécuté par un moteur de script Je pense que nous avons besoin de plus de détails. – TimothyP
SSME = SQL Server Management Studio Express Désolé pour l'abréviation erronée. :-) –