在Windows资源管理器中创建文件,锁定FileTable

时间:2014-09-16 08:57:18

标签: sql sql-server filestream ssms filetable

我刚开始在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吗?关于如何解决这个问题的任何建议?

1 个答案:

答案 0 :(得分: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命名空间中的方法移动或复制文件。

  •   

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