8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

删除行后残留 FILESTREAM 文件

prabhakar 2月前

65 0

我已在 SQL 2008 服务器上成功设置了 FILESTREAM;但是我注意到,即使我删除了包含 FILESTREAM 数据的行,物理数据文件似乎也没有被删除....

我已在 SQL 2008 服务器上成功设置了 FILESTREAM;但是我注意到,即使我删除了包含 FILESTREAM 数据的行,物理数据文件似乎也没有被删除。

我所说的物理文件是指 SQLServer 托管目录中以唯一标识符作为文件名的文件,而不是添加到数据库中的原始文件。

有人知道 SQLServer 最终是否会删除该文件吗?如果从数据库中删除了大量大文件,我希望能够快速回收空间,仅此而已。

帖子版权声明 1、本帖标题:删除行后残留 FILESTREAM 文件
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由prabhakar在本站《sql-server》版块原创发布, 转载请注明出处!
最新回复 (0)
  • FILESTREAM 数据受到交易控制,因此不会被立即删除。

    相反, SQL Server 运行垃圾收集器,当确定旧数据最终被删除时,它会清除旧数据。

    来自 文档 :

    FILESTREAM 垃圾收集是由数据库检查点进程触发的后台任务。生成足够的事务日志后,将自动运行检查点。有关详细信息,请参阅 SQL Server 2008 联机丛书 主题“ CHECKPOINT 和日志的活动部分”( http://msdn.microsoft.com/en-us/library/ms189573.aspx )。由于 FILESTREAM 文件操作在数据库的事务日志中记录的最少,因此生成的事务日志记录数量可能需要一段时间才能触发检查点进程并进行垃圾收集。如果这成为一个问题,您可以使用语句强制进行垃圾收集 CHECKPOINT

  • 使用

    sp_filestream_force_garbage_collection
    

    不幸的是这只适用于> = SQL Server 2012

  • 我在本地 SQL Server 2012 Express 上尝试过此操作,但似乎不起作用。

  • 如果您希望它立即开始工作,请调用两次,然后它将开始在后台删除文件。可能需要很长时间,具体取决于文件的数量

  • @corix010 如果不起作用,请检查数据库的恢复模式。如果已满,请将其更改为简单,然后再次运行该命令。它会起作用

  • AKR 2月前 0 只看Ta
    引用 7

    首先,您必须垃圾收集器 检查点 。删除行后,您可以运行此代码来消除所有不属于任何行的文件。

    USE [DataBaseName]
    GO
    
    -- Create a checkpoint on current database
    CHECKPOINT
    GO 
    
    -- Execute Garbage Collector after a checkpoint created
    EXEC sp_filestream_force_garbage_collection  'DataBaseName'
    GO
    
  • DELETE FROM tbl_XXX DECLARE @test CHECKPOINT @test = 0
    

    在您的 SQL Server 中运行此程序,您还可以观察到文件从文件系统中删除。

    您可以设置执行删除操作后等待垃圾收集器从文件系统清理文件的分钟数或秒数。

  • @DanDan 我知道这已经是几年前的事情了,但我只是想警告其他用户,使用 DELETE FROM table CHECKPOINT 命令可能会意外删除表中的所有行。我试过了,结果删除了我表中的所有行。幸运的是,我的表只包含示例数据。

返回
作者最近主题: