首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将FileStream FileGroup移除或重新附加到Server数据库

无法将FileStream FileGroup移除或重新附加到Server数据库
EN

Stack Overflow用户
提问于 2019-06-21 06:15:18
回答 1查看 3.5K关注 0票数 0

背景:我在SQL 2010中创建了一个运行良好的Server数据库,其中包含两个不同的FileStream/FileGroups,运行良好。我分离了数据库,将它移动到另一个带有SQL 2016的桌面上(在Win 10 Pro上),并手动复制了2个Filestream文件夹(称为ImageFS和DocFS)。我只是重新附加mdf数据库,没有注意到Filestream函数,因为它没有被使用。几个月后,我注意到一个FileGroup/Fileshare (ImageFG/ImageFS)工作正常,另一个(DocFG/DocFS)没有工作。

代码语言:javascript
复制
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不允许我:

代码语言:javascript
复制
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文件组以尝试删除它,但是我得到了这个错误。

代码语言:javascript
复制
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.

我尝试使用以下代码分离和重新附加数据库,但这并没有什么区别:

代码语言:javascript
复制
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

对这件事从哪里着手有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-22 02:55:21

结果发现这是一种奇怪的情况。不知何故,DocFS (数据库属性的文件选项卡)和DocFG (数据库属性的文件组选项卡)不同步(因为缺少更好的术语)。如果您试图基于DocFS重新创建DocFG,那么SSMS不会允许您这样做。原因是原来相应的Windows目录已经存在,而SSMS试图在那里重新创建一个目录。

解决方案(至少对我来说):

  1. 将windows目录(在本例中为“...\DocFS”)重命名为临时目录,如"..\DocFS_Temp\")
  2. 返回并在Database的files选项卡中重新创建DocFS "file“,确保选择相应的FileGroup (例如DocFG)。这将创建一个新的"...\DocFS“Windows目录。
  3. 删除这个新创建的"...\DocFS“窗口目录
  4. 将临时目录重命名为"...\DocFS“

我所做的其他家务管理工作(这可能对...I有帮助,也可能没有帮助)使DB离线切换,然后恢复联机。我还不得不切换自动增长从无限增长到10%,并返回摆脱一个“目录是完整的”错误。

我希望这能帮到别人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56697825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档