2012-01-06_171227.png

La tâche SSIS du plan de maintenance utilise la procédure xp_delete_file, non documentée et un peu particulière, en cela qu'elle inspecte le contenu du fichier pour vérifier s'il s'agit bien d'un rapport de maintenance. C'est peut-être de là que vient le problème...

EXECUTE master.dbo.xp_delete_file 1,N'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQL2008R2\MSSQL\Log',N'txt',N'2011-11-06T17:14:46' 
Mais nous avons PowerShell pour écrire cela en une seule ligne de commande et la planifier via l'agent SQL Server :
Get-ChildItem "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Log" 
-include *.txt -exclude sqldump*.txt -recurse |
Where {($_.CreationTime -lt $(Get-Date).AddDays(-60))} | Remove-Item

Curieusement, cette commande échoue lorsqu'elle est utilisée dans une tâche powershell de l'agent SQL Server : l'agent interprète à tort cette syntaxe comme contenant un jeton (token, voir http://msdn.microsoft.com/fr-fr/library/ms175575.aspx), d'où le message : Impossible de démarrer l'exécution de l'étape 1 (raison : L'étape du travail contient des jetons. Pour SQL Server 2005 Service Pack 1 ou ultérieur, vous devez utiliser la macro ESCAPE_xxx appropriée pour mettre à jour les étapes d'un travail contenant des jetons avant que le travail puisse s'exécuter.). L'étape a échoué.

La solution : 

remplacer la chaîne $(Get-Date) par une variable (mais ce sont maintenant 2 lignes...) !

$dt=Get-Date

Get-ChildItem "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Log"
-include *.txt -exclude sqldump*.txt -recurse |
Where {($_.CreationTime -lt $dt.AddDays(-60))} |
Remove-Item