AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 11250
Accepted
cofiem
cofiem
Asked: 2010-12-08 17:27:41 +0800 CST2010-12-08 17:27:41 +0800 CST 2010-12-08 17:27:41 +0800 CST

Sql FILESTREAM 垃圾回收问题

  • 772

更新了 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 提示提供更多信息和想法。

sql-server sql-server-2008
  • 1 1 个回答
  • 7554 Views

1 个回答

  • Voted
  1. Best Answer
    Gennady Vanin Геннадий Ванин
    2010-12-08T23:28:52+08:002010-12-08T23:28:52+08:00

    似乎没有足够的信息来明确地说明一些事情。例如,您是通过 Transact-SQL 删除还是通过 Win32API 等进行删除?

    FILESTREAM 数据不会立即从文件系统中删除,因为完全和批量恢复模式下的 SQL Server 事务日志记录允许崩溃恢复。

    你用 CHECKPOINT 删除了吗

    delete from tablename CHECKPOINT
    

    或尝试执行 CHECKPOINT 语句或使用简单恢复模式?

    此外,国际海事组织:

    • 更改 FILESTREAM(重新)配置需要重新启动 SQL Server
    • FILESTREAM 数据仅限于本地驱动器
    • FILESTREAM 操作取决于硬件,请参阅Paul Randal 的白皮书
    • “直接通过文件系统删除或重命名任何 FILESTREAM 文件将导致数据库损坏”

    检查Paul Randal 白皮书的安全性和可靠性部分

    包含许多子引用的相关讨论:

    • SQL Server Filestream - 删除“速度”
    • 如何强制文件流垃圾收集器以最高优先级完成其工作?

    更新:
    您是否检查了 FILESTREAM (Windows) 共享/容器与运行 SQL Server 的帐户的权限。它应该具有本地管理员权限。建议不要授予其他帐户对数据容器的权限

    Update2:
    来自Paul Randal 的白皮书:

    • “文件系统访问打开操作不等待任何锁。相反,如果由于事务隔离而无法访问数据,则打开操作会立即失败。如果由于隔离违规而无法继续打开操作,则流式 API 调用将失败并显示 ERROR_SHARING_VIOLATION”
    • “防病毒软件......将阻止访问受影响文件中的 BLOB 数据,并且对于 SQL Server,该文件似乎已被删除。”
    • “请注意,对于具有一个或多个 FILESTREAM 列的表,它还必须具有具有 ROWGUIDCOL 属性的 uniqueidentifier 数据类型的列。此列不得允许空值,并且必须具有 UNIQUE 或 PRIMARY KEY 单列约束”
    • “任何可以防止事务日志截断的东西也可能会阻止 FILESTREAM 文件被物理删除。一些例子是:”
    • FILESTREAM 数据容器不能嵌套

    运行
    DBCC CHECKDB

    更新3:
    我不能在线指导你。这是问答板。我已经被禁止多次违反 StackExchange 的规则进行讨论而不是发布问题或答案

    跑

    DBCC CheckDB(QPS8,repair_rebuild)

    DBCC CheckDB (QPS8) WITH No_INFOMSGS, ALL_ERRORMSGS
    

    并将输出放在这里。

    检查/设置 NTFS 权限:右键单击 Windows 中的文件夹 --> 属性 --> 安全

    检查/设置 MSSQLServer:在命令行类型中

    SQLServerManager10.msc 
    

    导航到 SQL Server 服务并双击相应的 SQL Server 实例

    更新 3b:
    可能,您应该删除并重新创建索引,或者您有更深层次的问题,您应该从备份中恢复数据库或执行数据库修复以允许丢失数据。这是完全不同的主题/问题。
    我不想承担任何责任来指导你。

    • 3

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 如何确定是否需要或需要索引

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何在转储中使用使用数据库执行 mysqldump

    • 4 个回答
  • Marko Smith

    在 MySQL Workbench 中,在表的“顶部”插入一个新列?

    • 4 个回答
  • Marko Smith

    SQL Server - 临时表与物理表

    • 3 个回答
  • Marko Smith

    什么时候全表扫描比索引扫描更好?

    • 4 个回答
  • Marko Smith

    收缩数据库和文件有什么区别?

    • 3 个回答
  • Marko Smith

    Sql FILESTREAM 垃圾回收问题

    • 1 个回答
  • Marko Smith

    SQL Server 2008 DBCC 问题

    • 2 个回答
  • Marko Smith

    如何在恢复中停止、脱机和删除 SQL Server 数据库?

    • 2 个回答
  • Marko Smith

    如何将 SQL Server 2000 数据库恢复到 SQL Server 2008 实例?

    • 5 个回答
  • Marko Smith

    在 T-SQL 中使用 CAST 会影响性能

    • 3 个回答
  • Martin Hope
    user481826 如何在转储中使用使用数据库执行 mysqldump 2010-10-29 16:08:59 +0800 CST
  • Martin Hope
    Will A SQL Server - 临时表与物理表 2010-07-05 08:46:10 +0800 CST
  • Martin Hope
    NibblyPig SQL 2008 中的表分区 - 为什么? 2010-06-30 00:59:23 +0800 CST
  • Martin Hope
    Gnomo 解释执行计划 2010-09-10 10:31:11 +0800 CST
  • Martin Hope
    ahsan 什么时候全表扫描比索引扫描更好? 2010-12-10 10:16:54 +0800 CST
  • Martin Hope
    Tom DeMille 我应该定期缩小我的数据库或至少我的日志文件吗? 2010-04-24 08:19:19 +0800 CST
  • Martin Hope
    Jango 收缩数据库和文件有什么区别? 2010-08-24 10:25:42 +0800 CST
  • Martin Hope
    CrapHands 如何在恢复中停止、脱机和删除 SQL Server 数据库? 2010-12-18 07:12:36 +0800 CST
  • Martin Hope
    Ryan Delucchi 在 T-SQL 中使用 CAST 会影响性能 2010-07-02 15:11:16 +0800 CST
  • Martin Hope
    Manjot SQL 2005:我们能否确定重建索引维护作业可以使数据库日志文件增长多少? 2010-08-12 18:40:44 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve