Dal*_*ale 20 sql blob filestream sql-server-2008
我已经在SQL 2008服务器上成功设置了FILESTREAM; 但是我注意到即使我删除了包含FILESTREAM数据的行,物理数据文件似乎也没有被删除.
通过物理文件,我指的是SQLServer托管目录中的文件,其唯一的文件名不是添加到dbase的原始文件.
有谁知道SQLServer最终是否会删除该文件?如果从dbase中删除了大量大文件,我希望能够快速回收这些空间.
Qua*_*noi 24
FILESTREAM 数据受交易控制,因此不会立即删除.
相反,SQL Server运行一个垃圾收集器,当它确定最终被删除时,它会清除旧数据.
从文档:
FILESTREAM垃圾收集是由数据库检查点进程触发的后台任务.生成足够的事务日志时,将自动运行检查点.有关详细信息,请参阅SQL Server 2008联机丛书主题"CHECKPOINT和日志的活动部分"(http://msdn.microsoft.com/en-us/library/ms189573.aspx).鉴于FILESTREAM文件操作在数据库的事务日志中记录最少,在生成的事务日志记录数量触发检查点进程并发生垃圾收集之前可能需要一段时间.如果这成为问题,您可以使用该CHECKPOINT语句强制进行垃圾回收.
Mic*_*der 14
使用
sp_filestream_force_garbage_collection
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仅适用于> = SQL Server 2012
首先,您必须为垃圾收集器工作创建一个检查点。删除行后,您可以运行此代码来删除不属于任何行的所有文件。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13341 次 |
| 最近记录: |