我已经创建了文件流组C:\Test\FilestreamGroup1
和一个带有 varBinary Filstream 列的表
现在,当文件上传时,它物理存储在 FilestreamGroup1 ...
现在在这里我想知道两件事
- FilestreamGroup1 以哪种格式文件存储(对于每个上传的文件,我发现 2 个编码文件)?
- 其次如何物理删除上传的文件(即从表中删除记录就像执行删除命令,但是这样做我不会导致从 NTFS 物理删除文件......所以我怎样才能物理删除文件)
我已经创建了文件流组C:\Test\FilestreamGroup1
和一个带有 varBinary Filstream 列的表
现在,当文件上传时,它物理存储在 FilestreamGroup1 ...
现在在这里我想知道两件事
如果要立即从文件系统中删除文件,则需要使用检查点
链接手动强制垃圾收集
这不是 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 数据。
解释当删除一行时文件被留下。我发现使用极其微不足道的 goodle 搜索“sql filestream delete file”,它是结果列表中的第 1 项 - 你甚至尝试过 google 吗?
其次如何物理删除上传的文件(即从表中删除记录就像执行删除命令,但是这样做我不会导致从 NTFS 物理删除文件......所以我怎样才能物理删除文件)
检查点不会删除文件,文件会在后台进程中删除,这可能需要很长时间。强制删除使用
sp_filestream_force_garbage_collection
编辑:仅适用于 SQL Server 2012
删除一行后写“检查点”。它将删除文件的物理存在。
运行以下查询并检查,文件自动从文件系统中删除
从表名检查点删除
谢谢。