Справочная информация: у меня была рабочая база данных SQL Server, созданная в SQL 2010, с двумя разными FileStream / FileGroups, работающая нормально.Я отключил базу данных, переместил ее на другой рабочий стол с SQL 2016 (на Win 10 Pro) и вручную скопировал 2 папки Filestream (называемые ImageFS и DocFS ).Я просто заново подключил базу данных mdf и не обращал внимания на функции Filestream, потому что они не использовались.Несколько месяцев спустя я заметил, что одна FileGroup / Fileshare (ImageFG / ImageFS) работает нормально, а другая ( DocFG / DocFS ) - нет.Более подробно, это то, что я получаю
SELECT DocFileID, ModifiedDate FROM DocFile
-- WORKS FINE
SELECT DocFileID, ModifiedDate, Doc FROM DocFile
--Returns this error:
-- A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)
Итак, Doc - это поле файлового потока в этой таблице.Я попытался удалить поле и добавить его снова, но SSMS не позволил мне:
ALTER TABLE DocFile DROP COLUMN Doc
--Returns this error:
-- The FILESTREAM filegroup '**DocFG**' has no files assigned to it. FILESTREAM data cannot be populated on this filegroup until a file is added.
-- Huh? there are already files in this Windows folder
Я также попытался сжать файловую группу DocFG, чтобы попытаться удалить его, но я получаю эту ошибку.
DBCC SHRINKFILE ('DocFG', EMPTYFILE)
--Returns this error:
--Could not locate file 'DocFG' for database 'MyDB' in sys.database_files. The file either does not exist, or was dropped.
Я пытался отсоединить и снова присоединить базу данных, используя этот код, но это не имеет значения:
CREATE DATABASE [MyDB]
ON PRIMARY
( NAME = N'MyDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\MyDB.mdf' , SIZE = 71040KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%),
FILEGROUP [ImageFG] CONTAINS FILESTREAM
( NAME = N'ImageFS', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\ImageFS' , MAXSIZE = UNLIMITED),
FILEGROUP [DocFG] CONTAINS FILESTREAM DEFAULT
( NAME = N'DocFS', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\DocFS' , MAXSIZE = UNLIMITED)
LOG ON ( NAME = N'MyDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\MyDB_log.ldf' , SIZE = 43264KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)
FOR ATTACH
Это хорошо, но DocFS / DocFG все еще не делаетРабота.Я также пытался использовать SSMS для ручного «удаления» DocFG, но также получаю сообщение об ошибке:
SSMS1
SSMS2
Есть мысли о том, что делать с этим?