[SQL Server] Supprimer les fichiers FileStream orphelins

/****************** Supprimer les fichiers FileStream orphelins ******************/

/***** Première Méthode *****/

/* Important : Le backup LOG de la MaBaseFileStream après l'exécution de la commande DELETE est nécéssaire

pour la suppression des fichiers système FileStream

*/

USE [MaBaseFileStream]

GO

--Lancer la commande DELETE sur la table qui possède la colonne FileStream

DELETE dbo.TableFileStream WHERE num_lig=1

--Lancer le backup LOG de la base

/***** Deuxième Méthode *****/

--Attention !!!! Ne pas lancer cette commande en PRODUCTION parecequ'elle supprime aussi les enregistrements dans la table TableFileStream qui ne sont pas liés à des fichiers FileStream

USE [master]

GO

ALTER DATABASE [MaBaseFileStream] SET SINGLE_USER WITH NO_WAIT

GO

USE [MaBaseFileStream]

GO

DBCC CHECKTABLE('dbo.TableFileStream',REPAIR_ALLOW_DATA_LOSS)

GO

USE [master]

GO

ALTER DATABASE [MaBaseFileStream] SET MULTI_USER WITH NO_WAIT

GO

/***** Dexième Méthode *****/

/*

Important : Afin que les fichiers FileStream soient supprimés ce process doit être lancé deux fois.

La première exécution du process marque les fichiers FileStream à supprimer

La deuxième exécution du process supprime les fichiers FileStream qui ont été marqués

*/

USE [MaBaseFileStream]

GO

-- Create a checkpoint on current database

CHECKPOINT

GO

-- Execute Garbage Collector after a checkpoint created

EXEC sp_filestream_force_garbage_collection'MaBaseFileStream'

GO