更新了 3 倍
我正在使用 FILESTREAM,但在垃圾收集方面遇到了问题。当我将该列设置为空时,未清理 FILESTREAM 文件。
在事件日志中,有大量这样的错误:
Internal FILESTREAM error: failed to access the garbage collection table.
这是此页面上的错误号 5571:http: //msdn.microsoft.com/en-us/library/cc645602.aspx
使用这篇博文,我已经确认存在一个“墓碑”表,但我无法查询它(
Invalid object name 'sys.filestream_tombstone_xxxxxxx'.
)我没有删除行,而是将 FILESTREAM 列设置为 null,根据这篇msdn 文章:“当 FILESTREAM 字段设置为 NULL 时,与该字段关联的 BLOB 数据将被删除。”
数据库位于本地驱动器上。
数据库正在使用简单恢复。
CHECKPOINT
当活动非常低时,我执行了许多s。这似乎什么也没做。该错误消息似乎表明 FILESTREAM 垃圾收集器正在尝试进行垃圾收集,但无法访问该表以找出该做什么。SQL Server 2008(10.0.2531.0,SP1,企业版
我可以在 SQL Server 日志或事件日志中看到 5571 错误之前没有其他错误。
DBCC CHECKDB
检测到错误。我该怎么办?
DBCC results for 'sys.filestream_tombstone_1819153526'.
Msg 8951, Level 16, State 1, Line 1
Table error: table 'sys.filestream_tombstone_1819153526' (ID 1819153526). Data row does not have a matching index row in the index 'FSTSNCIdx' (ID 2). Possible missing or invalid keys for the index row matching:
Msg 8955, Level 16, State 1, Line 1
Data row (4:4712151:3) identified by (oplsn_fseqno = 62856 and oplsn_bOffset = 82647 and oplsn_slotid = 2) with index values 'file_id = 65537 and rowset_guid = '3F972309-9B0B-4C4F-939A-5618897050B4' and column_guid = '4A143C0D-B877-494E-B1E6-B70B0A834BB6' and oplsn_fseqno = 62856 and oplsn_bOffset = 82647 and oplsn_slotid = 2'.
There are 209624 rows in 3382 pages for object "sys.filestream_tombstone_1819153526".
问题:
应该如何设置权限才能使 FILESTREAM 工作?其他人可以访问此服务器,并且此数据库可能已在某个时候从备份中恢复。
如何检查 FILESTREAM (Windows) 共享/容器帐户权限以及运行 SQL Server 的帐户?
感谢@vgv8 提示提供更多信息和想法。
似乎没有足够的信息来明确地说明一些事情。例如,您是通过 Transact-SQL 删除还是通过 Win32API 等进行删除?
FILESTREAM 数据不会立即从文件系统中删除,因为完全和批量恢复模式下的 SQL Server 事务日志记录允许崩溃恢复。
你用 CHECKPOINT 删除了吗
或尝试执行 CHECKPOINT 语句或使用简单恢复模式?
此外,国际海事组织:
检查Paul Randal 白皮书的安全性和可靠性部分
包含许多子引用的相关讨论:
更新:
您是否检查了 FILESTREAM (Windows) 共享/容器与运行 SQL Server 的帐户的权限。它应该具有本地管理员权限。建议不要授予其他帐户对数据容器的权限
Update2:
来自Paul Randal 的白皮书:
运行
DBCC CHECKDB
更新3:
我不能在线指导你。这是问答板。我已经被禁止多次违反 StackExchange 的规则进行讨论而不是发布问题或答案
跑
DBCC CheckDB(QPS8,repair_rebuild)并将输出放在这里。
检查/设置 NTFS 权限:右键单击 Windows 中的文件夹 --> 属性 --> 安全
检查/设置 MSSQLServer:在命令行类型中
导航到 SQL Server 服务并双击相应的 SQL Server 实例
更新 3b:
可能,您应该删除并重新创建索引,或者您有更深层次的问题,您应该从备份中恢复数据库或执行数据库修复以允许丢失数据。这是完全不同的主题/问题。
我不想承担任何责任来指导你。