【发布时间】:2019-06-21 06:15:18
【问题描述】:
背景:我在 SQL 2010 中创建了一个正常工作的 SQL Server 数据库,有 2 个不同的 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,但也出现错误:
关于在哪里进行此操作有什么想法吗?
【问题讨论】:
标签: sql sql-server filestream