背景:我在SQL 2010中创建了一个运行良好的Server数据库,其中包含两个不同的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是这个表中的filestream字段。我尝试删除该字段并再次添加它,但是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,但我也得到了一个错误:
对这件事从哪里着手有什么想法吗?
发布于 2019-06-22 02:55:21
结果发现这是一种奇怪的情况。不知何故,DocFS (数据库属性的文件选项卡)和DocFG (数据库属性的文件组选项卡)不同步(因为缺少更好的术语)。如果您试图基于DocFS重新创建DocFG,那么SSMS不会允许您这样做。原因是原来相应的Windows目录已经存在,而SSMS试图在那里重新创建一个目录。
解决方案(至少对我来说):
我所做的其他家务管理工作(这可能对...I有帮助,也可能没有帮助)使DB离线切换,然后恢复联机。我还不得不切换自动增长从无限增长到10%,并返回摆脱一个“目录是完整的”错误。
我希望这能帮到别人。
https://stackoverflow.com/questions/56697825
复制相似问题