我在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
删除行后写入"检查点"。 它将删除文件的物理存在。
运行以下查询并检查,文件会自动从文件系统中删除
从表名检查点删除
谢谢。