SQL Server 2008:Filestream如何从filestreamgroup中物理删除上传的文件?

时间:2012-06-04 05:23:57

标签: sql sql-server-2008 filestream

我在C:\Test\FilestreamGroup1

创建了文件流组

和一个包含varBinary Filstream列的表<​​/ p>

现在上传文件时,它实际存储在FilestreamGroup1 ...

现在我想知道两件事

  • 在FilestreamGroup1中存储哪种格式的文件(对于每个上传的文件,我找到了2个编码文件)?
  • 其次如何物理删除上传的文件(即删除表中的记录就像执行删除命令,但这样做我不会导致从NTFS中删除文件...所以如何在物理上删除文件)

4 个答案:

答案 0 :(得分:2)

如果要立即从FileSystem中删除文件,则需要使用checkpoint手动强制进行垃圾回收

Link

答案 1 :(得分:2)

这不是StackOverflow问题,属于ServerFault(admin)。尽管如此 -

  

即。从表中删除记录就像执行删除命令,但这样做我不会导致物理   从NTFS删除文件...所以如何物理删除文件

你知道拥有数据库的主要原因是什么吗?保证数据完整性。

删除必须保留数据,直到进行备份。你的备份政策是什么?您可能会注意到,当您进行更新时,会创建另一个文件副本....原因很简单。旧版本仍然可用于备份,这就是它们如何集成它。

  

在FilestreamGroup1中存储哪种格式文件(对于每个上传的文件,我找到了2个编码文件)?

不,文件是原始存储的。编码它们有什么意义...如果有SQL函数来获取路径,并且客户端不使用SQL来加载文件是受支持的场景(但是:请求SQL获取文件名和路径,然后通过NTFS文件共享访问它)。这也支持互操作(因为从网络加载的任何程序都可以被提供给SQL驱动的位置。

我强烈假设您只有1个副本,并以某种方式进行更新,从而导致写入第二个文件。

http://msdn.microsoft.com/en-us/library/cc645962.aspx

解释了如何使用SQL访问FileSTream数据。

http://technet.microsoft.com/en-us/library/cc645940(v=sql.105).aspx

解释了如何使用Win32访问FIleStream数据。

FILESTREAM files being left behind after row deleted

解释了删除行时文件遗留的问题。我发现使用非常琐碎的goodle搜索“sql filestream delete file”并且它是结果列表中的第1项 - 你是否尝试过谷歌?

答案 2 :(得分:0)

  

其次如何物理删除上传的文件(即从表中删除记录就像执行删除命令,但这样做我不会导致从NTFS物理删除文件...所以如何在物理上删除文件)

Checkpoint不会删除文件,文件会在后台进程中删除,可能需要很长时间。要强制删除,请使用

sp_filestream_force_garbage_collection

编辑:仅适用于SQL Server 2012

答案 3 :(得分:-1)

删除行后写“检查点”。它将删除文件的物理存在。

运行以下查询并检查,文件是否自动从文件系统中删除

从TableName CHECKPOINT删除

感谢。