SQL Server 2008:文件流如何从文件流组中物理删除上载的文件



我在C:TestFilestreamGroup1创建了文件流组

以及带有 varBinary Filstream 列的表

现在,当文件上传时,它会物理存储在文件流组1...

现在我想知道两件事

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

从文件系统中永久删除文件,则需要使用检查点手动强制垃圾回收

链接

这不是一个 StackOverflow 问题,这属于 ServerFault (admin)。不过它的发展——

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

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

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

文件

流组 1 中存储以哪种格式的文件(对于每个上传的文件,我找到了 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 数据。

删除行后留下的文件流文件

解释删除行时文件何时被留下。我发现使用极其微不足道的好搜索"sql filestream 删除文件",它是结果列表中的第 1 项 - 你甚至尝试过谷歌吗?

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

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

sp_filestream_force_garbage_collection

编辑:仅适用于SQL Server 2012

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

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

从表名检查点删除

谢谢。

最新更新