J'ai eu la malchance d'hériter d'un système, ce qui me cause de gros problèmes. Il s'exécute sur SQL Server 2005 et le problème que j'ai est dans le plan de maintenance de la base de données. Une routine de nettoyage utilise la commande XP_DELETE_FILE non documentée et reste bloquée plus ou moins tous les soirs.Microsoft SQL Server 2005 XP_DELETE_FILE
Il semblerait que notre programme de sauvegarde nocturne (dont je n'ai aucun contrôle) sauvegarde un fichier que la commande XP_DELETE_FILE essaie de supprimer. Par opposition à l'un ou l'autre échec, ou simplement en contournant le fichier, il semble se bloquer. Cela signifie qu'aucune autre étape du plan de maintenance n'est exécutée.
J'ai cherché une solution à ce long des lignes de:
- Ne pas utiliser la commande xp_delete_file ou
- Vérification des autorisations d'accès aux fichiers avant que mon xp_delete_file.
Mais je n'ai pas eu une telle chance. N'importe qui a des idées ou des solutions, je les apprécierais volontiers.
Cordialement
Exemple de code:
-- Delete old backup files
IF (@CurrentCommandOutput02 = 0 AND @Verify = 'N' AND @CurrentCleanupDate IS NOT NULL)
OR (@CurrentCommandOutput02 = 0 AND @Verify = 'Y' AND @CurrentCommandOutput03 = 0 AND @CurrentCleanupDate IS NOT NULL)
BEGIN
IF @BackupSoftware IS NULL
BEGIN
SET @CurrentCommand04 = 'DECLARE @ReturnCode int EXECUTE @ReturnCode = master.dbo.xp_delete_file 0, N''' + REPLACE(@CurrentDirectory,'''','''''') + ''', ''' + @CurrentFileExtension + ''', ''' + CONVERT(nvarchar(19),@CurrentCleanupDate,126) + ''' IF @ReturnCode <> 0 RAISERROR(''Error deleting files.'', 16, 1)'
END
IF @BackupSoftware = 'LITESPEED'
BEGIN
SET @CurrentCommand04 = 'DECLARE @ReturnCode int EXECUTE @ReturnCode = master.dbo.xp_slssqlmaint N''-MAINTDEL -DELFOLDER "' + REPLACE(@CurrentDirectory,'''','''''') + '" -DELEXTENSION "' + @CurrentFileExtension + '" -DELUNIT "' + CAST(DATEDIFF(mi,@CurrentCleanupDate,GETDATE()) + 1 AS nvarchar) + '" -DELUNITTYPE "minutes" -DELUSEAGE'' IF @ReturnCode <> 0 RAISERROR(''Error deleting LiteSpeed backup files.'', 16, 1)'
END
EXECUTE @CurrentCommandOutput04 = [dbo].[CommandExecute] @CurrentCommand04, '', 1, @Execute
SET @Error = @@ERROR
IF @Error <> 0 SET @CurrentCommandOutput04 = @Error
END
Il tente de supprimer un fichier .BAK généré par SQL –
ok, pouvez-vous poster le résultat de la ligne qui appelle la procédure xp_delete_file Il semble qu'il vous manque un paramètre à la fin – Diego
C'est l'un des problèmes, soit il complète la commande et donc il Ce n'est pas une erreur, ou il reste sur cette commande aussi longtemps que je le permets.Je l'ai tué pendant le week-end après avoir passé 38 heures sur ce commandement, ça marche, environ tous les 4 jours environ. pour travailler tous les soirs, ou du moins plus souvent que pas! –