所以我们在SQL服务器上运行了很多应用程序,今天我们意识到其中一些应用程序有一堆我们没有创建的分区方案/功能。
分区方案和功能分别称为ifts_comp_fragment_data_space_{hash}
和ifts_comp_fragment_partition_function_{hash}
。
深入挖掘,我们意识到它们被标记为系统条目(is_system
中sys.partition_schemes
设置为1),这意味着我们甚至无法删除它们。
经过一些研究,我们发现SQL服务器会创建它们来分割全文目录,如果它们变得太大,或类似see here之类的东西。问题是 - 我们刚刚删除了所有目录,而这些目录被遗弃了,没有办法清除它们。
我不会太担心,除了我需要删除它们,因为我试图将我们的数据库导出为.bacpac文件,并且崩溃抱怨数据库包含分区方案/功能而它们不是支撑。
是否有任何方法可以强制SQL服务器删除这些对象,或者我可以做的任何其他替代方法?
答案 0 :(得分:5)
您可以将该is_system标志从1更改为0,然后像其他任何一样删除分区方案。要做到这一点:
首先允许在您的服务器上进行更新:
exec sp_configure 'allow updates', 1
go
reconfigure with override
go
因此,要更改标志,我们必须查看状态的当前值是什么,并取消标记4位。我的值是4,所以我将其更新为0。
update sys.sysclsobjs set status = 0 where name =
'ifts_comp_fragment_data_space_033D368C'
现在,只需关闭控制台窗口并启动sql server windows服务即可关闭单用户模式SQL Server进程。然后像往常一样登录并删除分区方案。
最后,将“允许更新”设置设置回0。
这可能需要为生产服务器计划停机时间。
免责声明这可能不是Microsoft支持的方式,您可能希望在潜入之前在某些非prod服务器上进行测试。