Как обновить unc путь кеша? - PullRequest
1 голос
/ 07 мая 2019

У меня возникла следующая проблема.

У меня есть база данных, подключенная к удаленному серверу sql.Все необходимые действия для олицетворения выполнены - другими словами, у меня есть все необходимые права доступа как к файловой системе, так и к серверу sql.

Допустим, у меня есть 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

Любые идеи, как я могу очистить кэш Windows о путях unc, используя c #?

1 Ответ

2 голосов
/ 07 мая 2019

Проблема в том, что удаленная информация кэшируется в течение определенного времени, настраиваемого в реестре.

Весь код сначала будет считан из кэша, в результате чего будет получен результат File.Exists=true до тех пор, пока кэш не станет недействительным.

Я нашел несколько способов обойти этот кеш из кода.

Попробуйте получить доступ к серверу unc $NOCSC$, это обойдет client-side cache. (примечание: это не работает на Windows Server) .

Вот так: Directory.Exists(@"\\server$NOCSC$\C$\MSSQL\Data\FileStreamDB1").

Также, похоже, что FileSystemWatcher, смотрящий на указанную папку, также обойдет кэширование. (сам не пробовал, так что поправьте меня, если я не прав)

Примечание: просмотр пути unc из Проводника Windows также обходит кеш, но только для этого окна, но не для другихкод работает.

Источники:

...