SQL Server xp_delete_file ne supprime pas les fichiers
Je suis en train d'écrire du SQL qui va supprimer les fichiers de type".7z " qui sont âgés de plus de 7 jours.
Voici ce que j'ai qui ne fonctionne pas:
DECLARE @DateString CHAR(8)
SET @DateString = CONVERT(CHAR(8), DATEADD(d, -7, GETDATE()), 1)
EXECUTE master.dbo.xp_delete_file 0,
N'e:\Database Backups',N'7z', @DateString, 1
J'ai aussi essayé de changer le " 1 " à la fin d'un '0'.
Cela renvoie "succès", mais les fichiers ne sont pas supprimés.
Je suis à l'aide de SQL Server 2005 Standard, w/SP2
source d'informationauteur GernBlandston
Vous devez vous connecter pour publier un commentaire.
A eu un problème similaire, trouvé des réponses très diverses. Voici ce que j'ai trouvé.
Vous ne pouvez pas supprimer les fichiers 7z avec xp_delete_file. C'est un sans-papiers procédure stockée étendue qui est un vestige de SQL 2000. Il vérifie la première ligne du fichier soit supprimé pour vérifier que c'est soit un fichier de sauvegarde SQL ou SQL fichier de rapport. Elle ne vérifie pas basé sur l'extension de fichier. De ce que je comprends de son utilisation est en des plans de maintenance pour le nettoyage d'anciennes sauvegardes et des rapports.
Voici un exemple basé sur Tomalak lien à supprimer les copies de sauvegarde des fichiers de plus de 7 jours. Ce que les voyages de personnes est le 'sys' schéma, le slash dans le chemin d'accès au dossier, et pas de point de l'extension de fichier à rechercher. L'utilisateur qui exécute SQL Server comme doit également supprimer des autorisations sur le dossier.
Noter que xp_delete_file est cassé dans le SP2 et ne fonctionne pas sur les fichiers de rapport; il existe un correctif pour il à [http://support.microsoft.com/kb/938085%5D. Je ne l'ai pas testé avec le SP3.
Car il est sans-papiers, xp_delete_file peuvent disparaître ou changer dans les futures versions de SQL Server. De nombreux sites vous recommandons d'un script shell pour faire les suppressions à la place.
Autant que je sache
xp_delete_file
seulement supprimer les fichiers reconnus par SQL Server 2005 (les fichiers de sauvegarde des journaux de transactions, ...). Peut-être vous pouvez essayer quelque chose comme ceci:Cette sp ne les supprime uniquement natif sql server sauvegarde des fichiers natifs ou la maintenance des fichiers de rapport (pour des raisons de sécurité)
Comme Smink suggéré que vous pouvez utiliser
Avec les autorisations appropriées sur le dossier.
J'ai trouvé cette question, mais la solution ne s'applique pas à moi (comme il l'a été .bak fichiers, SQL Server lui-même avait fait, dans le cadre d'un Plan de Maintenance).
Le problème dans mon cas est la sécurité. Le script a été exécuté en tant qu'utilisateur qui démarre SQL Server (MSSQL) (dans mon cas, et probablement la plupart des cas "service réseau") n'a pas eu accès au dossier, il était d'essayer de supprimer les fichiers en.
Ainsi, l'ajout de "service réseau" et l'octroi de "modifier" aidé.
J'avais lu beaucoup de différentes approches et de solutions de plusieurs individus poursuivis lors de la tentative de résoudre le problème avec la procédure stockée étendue xp_delete.
Les solutions sont:
Dans mon scénario, tous les ci-dessus sont correctes. Il y a peu de commentaires sur le web où certains de dit la routine xp_delete est buggé.
Lorsque les fichiers de sauvegarde n'étaient pas supprimés, j'ai extrait le code SQL de la maintenance et exécuté à partir de SSMS. Le message était le fichier n'a pas été un sql server fichier de sauvegarde. Ce message a été erronée que la sauvegarde peut être restaurée, résultant dans une base de données opérationnelle.
Les commandes de base de données utilisé pour vérifier la base de données ont été:
Les deux commandes ci-dessus indiqué, le fichier de sauvegarde a été valide.
Ensuite, j'ai ouvert l'observateur d'événements et les messages indiquant il y avait des erreurs de connexion pour le gestionnaire de connexion. C'était étrange parce que j'avais validé la connexion avec le bouton tester la connexion. Les erreurs n'étaient pas associés à tout compte que j'avais créé.
De L'Observateur D'Événements Du Message:
Les informations suivantes sont incluses avec l'événement:
Ensuite, j'ai ouvert une session sur une machine où xp_delete a été fonctionne correctement. Après l'examen de l'active directory et de ne pas trouver le système de compte, j'ai procédé à l'observateur d'événements pour trouver des messages similaires. Ici, il est devenu évident que le compte de domain\serveur$ est mappé à la sécurité du système.
Prochaine étape était de comparer la base de données de la sécurité, où xp_delete travaillé sur la base de données où il n'a pas de travail. Il y avait 2 manquant connexions en vertu de sécurité dans la base de données où xp_delete n'a pas de travail.
Les 2 manquantes des connexions:
NT AUTHORITY\SYSTEM
NT Service\MSSQLSERVER
Après l'ajout NT service\MSSQLSERVER, xp_delete travaillé avec succès.
Une approche de test est d'utiliser la tâche de maintenance pour supprimer un seul fichier.
Essayez de modifier le premier paramètre de 0 à 1.
Voici un petit résumé sur
xp_delete_file
je viens de trouver. Sonne un peu comme vous le feriez pour être hors de la chance avec cette procédure.Je sais que c'est un peu vieux mais je voulais partager mes frustrations avec vous tous. J'ai eu le même problème que beaucoup de ces postes, mais rien ne semblait fonctionner. Je me suis alors souvenu que nous avons une couche de cryptage sur la base de données appelée NetLib. Cela signifie que les sauvegardes sont cryptées et en tant que tel, xp_delete_file ne peut pas lire les en-têtes. Je vais maintenant utiliser un fichier de commandes dans le système d'exploitation et l'appeler à partir d'un travail de l'agent. Espérons que cela aide quelqu'un.
Nous avons l'habitude de retrouver dans de telles situations, lorsque vous avez la base de données déplacé vers un autre serveur ou lorsqu'une instance SQL est réinstallé sur le même un, mais la sauvegarde est à gauche dans l'ancien répertoire.
Par exemple:
Vous déplacez la base de données de serveur1 serveur2, mais vous avez un serveur avec un plan de maintenance qui effectue une sauvegarde périodique ou de la réinstallation de l'instance SQL sur server1 et
vous restaurez la base de données.
Dans la sauvegarde de cas, les ensembles, qui sont conservés les informations dans la base de données msdb ne sont plus là, donc toutes les anciennes sauvegardes qui ont été créé ne sera pas supprimé car aucune information n'
est vérifiée à partir de l'échec de dérivée à partir des tables avec des jeux de sauvegarde.
Le premier argument montre que les tables de la base de données msdb sont utilisés.
Espère que cela aide quelqu'un.