3

我刚开始在 SQL Server 2012 中使用 FileTables。我已经在远程服务器上设置了所有内容,并且一切顺利,没有任何问题。非事务性文件插入等工作得非常好。

但是,当我尝试从 Windows 资源管理器(右键单击 -> 新建 -> 文本文档)在 FileTable 共享目录中创建一个新的文本文件时,它完全冻结了。现在,当我在 FileTable 上执行查询时,查询只是冻结而我没有得到任何响应。所以我认为我来自文件系统的非事务性插入已锁定 FileTable。

无论如何,这是我迄今为止尝试过的(没有成功):

  • 杀死正在进行的文件流句柄 ( http://msdn.microsoft.com/en-us/library/gg492061.aspx#BasicsKilling ) 没有结果。处决只是冻结。

    -- Kill all handles on database
    EXEC sp_kill_filestream_non_transacted_handles;
    GO
    
    -- Kill handles on filetable
    EXEC sp_kill_filestream_non_transacted_handles @table_name = 'dbo.MyFileTable';
    GO
    
    -- Kill single handle
    EXEC sp_kill_filestream_non_transacted_handles @handle_id = <handle id>;
    GO
    
  • 使数据库脱机。这会导致错误消息:

    Msg 5061, Level 16, State 1, Line 2
    ALTER DATABASE failed because a lock could not be placed on database 'FOO'. Try again later.
    
  • 删除数据库。这会导致错误消息:

    Msg 3702, Level 16, State 4, Line 2
    Cannot drop database "FOO" because it is currently in use.
    
  • 杀死我的数据库上正在进行的会话(?):

    EXEC sp_who2
    KILL <SPID>
    

如前所述,我无法与我的 FileTable 进行事务性和非事务性交互。如您所见,我什至无法删除自己的数据库。

关于可能导致此问题的任何建议?我应该小心使用 FileTables 吗?关于如何解决这个问题的任何建议?

4

1 回答 1

1

通过重新启动 SQL Server 实例解决了这个问题。这是最后的手段,因为它是我公司使用的远程实例。

我相信这个问题是因为我直接在我的 FileTable 目录中创建了一个文件。在文档(http://msdn.microsoft.com/en-us/library/gg492083.aspx#HowToLoadNew)中说明如下:

可用于将文件加载到 FileTable 的方法包括:

  • 将文件从源文件夹拖放到 Windows 资源管理器中的新 FileTable 文件夹。

  • 从命令提示符或批处理文件或脚本中使用命令行选项,例如MOVE、COPY、XCOPY 或 ROBOCOPY 。

  • 在 C# 或 Visual Basic.NET 中编写一个自定义应用程序,该应用程序使用 System.IO 命名空间中的方法来移动或复制文件。

但是,并没有说明创建文件可能会导致问题。不幸的是,在我的情况下确实如此。希望这个答案可以帮助将来遇到类似问题的人。

于 2014-09-16T12:56:11.137 回答