我有一个 SQL Server 2016 数据库,并配置了内存表。我想删除此配置,然后删除该表。当我想删除该文件和文件组时,出现以下错误。
USE [InMem_Test]
GO
ALTER DATABASE [InMem_Test] REMOVE FILE [InMemFile]
GO
ALTER DATABASE [InMem_Test] REMOVE FILEGROUP [InMemFileGroup]
GO
消息 41802,级别 16,状态 1,第 3 行无法删除最后一个内存优化容器“InMemFile”。消息 5042,级别 16,状态 11,第 5 行文件组“InMemFileGroup”不能被删除,因为它不是空的。
目前,删除 Hekaton 的唯一方法是删除整个数据库。
可能不是您的第一选择,但微软似乎不愿意改变方向。
!!!如果包含内存优化表的数据库损坏,请使用此方法(您不能对包含内存优化表的数据库使用 DBCC 检查)!!!
警告:这是不受支持的操作。有报告称使用此功能时日志损坏不可恢复。
这是一种黑客方法,而且有风险。Microsoft 未验证此解决方案
在做任何事情之前先备份
然后
删除内存优化表
分离数据库
使用相同的文件创建没有内存优化文件组的新数据库
修改数据库文件并将其更改为分离的数据库(mdf、ldf、ndf)文件
现在尝试修复数据库:
成功修复数据库后,从数据库中删除内存优化文件组
不要忘记:
在使用数据库之前,请执行以下步骤来检查问题:
如果数据库上线,我认为您正确执行了所有步骤,否则从备份中恢复数据库并忘记删除内存优化文件组