我刚开始在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吗?关于如何解决这个问题的任何建议?
答案 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命名空间中的方法移动或复制文件。
但是,没有声明创建文件可能会导致问题。不幸的是,它确实在我的情况下。希望这个答案可以帮助将来遇到类似问题的人。