【发布时间】:2019-09-25 03:35:29
【问题描述】:
我遇到了以下问题。
我有一个连接到远程 sql 服务器的数据库。 所有需要的模拟操作都已完成 - 换句话说,我拥有对文件系统和 sql server 的所有需要的访问权限。
假设我有FileStreanDB1 sql 数据库:
\\server\C$\MSSQL\Data\FileStreamDB1.mdf
\\server\C$\MSSQL\Data\FileStreamDB1_log.ldf
\\server\C$\MSSQL\Data\FileStreamDB1
有时我想删除这个数据库。 所以我只使用下面的sql语句(我用c#调用这段代码):
DROP DATABASE [FileStreamDB1]
之后数据库被删除,所有文件也被删除(如果我去那个服务器我找不到它们 - 文件和目录真的被删除了)。
但不幸的是,下面的代码告诉我\\server\C$\MSSQL\Data\FileStreamDB1 仍然存在。
new DirectoryInfo(@"\\server\C$\MSSQL\Data\FileStreamDB1").Exists // returns true
Directory.Exists(@"\\server\C$\MSSQL\Data\FileStreamDB1") // returns true
看起来有关目录的信息已缓存,我需要清理该现金 (SMB2 目录缓存,我不想禁用它)
我也尝试过这样做:
new DirectoryInfo(@"\\server\C$\MSSQL\Data\FileStreamDB1").Refresh().Exists // return true
有什么想法可以使用 c# 清理有关 unc 路径的 Windows 缓存吗?
【问题讨论】:
-
现在,我不知道 MSSQL 如何在其控制下处理与 DB 相关的文件的具体细节,但您究竟是如何查找服务器上正在删除的 FileStreamDB1 的?它可能只是被隐藏了,因此它对您的眼睛(和文件管理工具)是不可见的,而它在技术上仍然存在。您是否确保用于查找文件的任何工具确实显示了设置了隐藏和/或系统属性的文件?
-
@elgonzo 所有 db 文件和目录都被删除(我可以访问此服务器,我只是转到该文件夹但找不到 db 文件 - 在
drop database之前我看到它们并在 @ 之后987654328@他们被删除了)我猜这是使用unc路径访问文件的问题 -
您是否在数据库上启用了 FileStream 功能?
-
@NiklasM。肯定是的
-
试试这个
Directory.Exists(@"\\server$NOCSC$\C$\MSSQL\Data\FileStreamDB1")。$NOCSC$这将绕过客户端缓存。
标签: c# .net directory filesystems unc