无法删除由FullText目录创建的“系统”分区方案

时间:2013-05-21 19:07:15

标签: sql-server partitioning

所以我们在SQL服务器上运行了很多应用程序,今天我们意识到其中一些应用程序有一堆我们没有创建的分区方案/功能。

分区方案和功能分别称为ifts_comp_fragment_data_space_{hash}ifts_comp_fragment_partition_function_{hash}

深入挖掘,我们意识到它们被标记为系统条目(is_systemsys.partition_schemes设置为1),这意味着我们甚至无法删除它们。

经过一些研究,我们发现SQL服务器会创建它们来分割全文目录,如果它们变得太大,或类似see here之类的东西。问题是 - 我们刚刚删除了所有目录,而这些目录被遗弃了,没有办法清除它们。

我不会太担心,除了我需要删除它们,因为我试图将我们的数据库导出为.bacpac文件,并且崩溃抱怨数据库包含分区方案/功能而它们不是支撑。

是否有任何方法可以强制SQL服务器删除这些对象,或者我可以做的任何其他替代方法?

1 个答案:

答案 0 :(得分:5)

您可以将该is_system标志从1更改为0,然后像其他任何一样删除分区方案。要做到这一点:

首先允许在您的服务器上进行更新:

exec sp_configure 'allow updates', 1
go
reconfigure with override
go
  1. 关闭SQL服务器
  2. 通过从具有提升权限的控制台运行“C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ Binn \ sqlservr.exe -m”,以单用户模式重新启动它。
  3. 使用SQL Server DAC http://technet.microsoft.com/en-us/library/ms178068(v=sql.105).aspx
  4. 登录服务器
  5. 如果我们在sys.partition_schemes视图上执行SP_HELPTEXT,您将看到is_system列基于sys.sysclsobjs表中的状态标志。 “sysconv(bit,o.status& 0x4)AS is_system,”
  6. 因此,要更改标志,我们必须查看状态的当前值是什么,并取消标记4位。我的值是4,所以我将其更新为0。

    update sys.sysclsobjs set status = 0 where name = 
      'ifts_comp_fragment_data_space_033D368C'
    
  7. 现在,只需关闭控制台窗口并启动sql server windows服务即可关闭单用户模式SQL Server进程。然后像往常一样登录并删除分区方案。

    最后,将“允许更新”设置设置回0。

    这可能需要为生产服务器计划停机时间。

    免责声明这可能不是Microsoft支持的方式,您可能希望在潜入之前在某些非prod服务器上进行测试。