1

我已经创建了文件流组C:\Test\FilestreamGroup1

和一个带有 varBinary Filstream 列的表

现在,当文件上传时,它物理存储在 FilestreamGroup1 ...

现在在这里我想知道两件事

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

4 回答 4

2

如果要立即从文件系统中删除文件,则需要使用检查点

链接手动强制垃圾收集

于 2012-06-04T06:13:32.133 回答
2

这不是 StackOverflow 问题,这属于 ServerFault(管理员)。虽然它触动了开发者-

即从表中删除一条记录就像执行删除命令,但是这样做我不会导致从 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 文件

解释当删除一行时文件被留下。我发现使用极其微不足道的 goodle 搜索“sql filestream delete file”,它是结果列表中的第 1 项 - 你甚至尝试过 google 吗?

于 2012-06-04T06:13:49.900 回答
0

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

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

sp_filestream_force_garbage_collection

编辑:仅适用于 SQL Server 2012

于 2013-02-19T12:09:32.770 回答
-1

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

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

从表名检查点删除

谢谢。

于 2012-07-16T11:20:29.187 回答