我最近用较新的型号替换了我们旧的可信赖的服务器,并借此机会升级到 Windows Server 2016。
自从升级以来,我们遇到了一些问题,我开始怀疑它们是否有关联。
首先是 SQL Server 2014 的一个问题,我在这里发布了相关内容: SQL Server 2014 - 几乎每天都有恢复
本质上,数据库都设置为“自动关闭”,并且经常(大约每天一次)无法重新打开,并出现错误“该进程无法访问该文件,因为它正在被另一个进程使用”。
数据库文件位于通过网络共享的文件夹中,但它们仅由本地安装的 SQL Server 使用。
但是,我们的一位 Mac 用户也报告了打开普通文件时遇到的类似问题。如果他进入网络共享并打开文件,第一个文件可以正常打开,有时第二个文件也可以正常打开,但是当他尝试打开后续文件时,最终会收到错误消息,提示文件已锁定且正在使用中。这种情况发生在共享上的所有文件中,而不仅仅是他正在处理的文件夹中。他需要断开连接并重新连接,然后才能打开更多文件。
我们已经禁用了 mac 文件浏览器中的预览功能,但似乎没有什么变化。所有病毒检查程序和备份都已暂停,以防止它们锁定文件,但这种情况仍在继续。
有什么建议么?
答案1
我要做的第一件事就是锁定这些 SQL 数据库文件,以便只有 SQL 运行的服务帐户才能打开它们。这样,即使它们位于共享文件夹中,网络上的任何人都无法干扰它们。此外,主机上的其他任何应用程序(在 SQL 帐户下运行的应用程序除外)都无法干扰它们。
事后你能做的就是开始挖掘。Windows 有一些内置工具可以查看网络上是否有人通过共享文件夹 MMC卡宾。
另一组非常有用的工具是pstools
它具有用于查看远程锁的命令行工具。
最后进程探索器是一款出色的工具,可用于查看正在发生的事情。当您遇到锁定情况时,请启动 Process Explorer 并搜索该文件句柄,然后查看是什么锁定了它。从那里进行调查。
答案2
我在使用 Server 2016 时遇到了文件锁定问题,当我偶然发现您的帖子和其他一些抱怨 Server 2012+ 具有激进锁定功能的帖子时,我发现即使关闭客户端,它们仍然保持打开状态。
您是否尝试过将 HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\DormantDirectoryTimeout 更改为 1-5 秒,而不是 600 秒,如下所示technet 文章和这个technet 文章建议?如果此人是对的,则表明 SMB v3 的锁定更加积极。
答案3
我尝试在装有 Win 8.1 客户端的 Windows 2012 R2 服务器上设置 DormantDirectoryTimeout,但无效。用户会话(使用 cmd 查看net sessions
)在注销几分钟后仍保持打开状态。数百个文件保持打开状态。
但是,在 Win 8.1 客户端工作站上创建 reg.value 确实会产生预期的效果:大约指定的时间段后,服务器上的会话会关闭,文件锁也会消失(使用 检查net sessions
)。
在我的情况下,这适用于注销。但是,当电脑关闭或重新启动时,会话仍保持打开状态并带有文件锁定,并将在 2 到 6 分钟之间消失。