2013-05-21 56 views
5

因此,我们有一堆我们的SQL服务器上运行的应用程序,而今天我们认识到,其中一些有一堆分区方案的/我们没作用”创造。无法删除“系统”分区方案

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

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

经过一番研究,我们发现,SQL Server将创建它们进行分区全文目录,如果他们变得过于庞大,或类似的东西see here。问题是 - 我们只是删除了所有的目录,而这些目录都被放弃了,没有办法清除它们。

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

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

+0

我编辑了自己的冠军。请参见“[应的问题包括‘标签’,在他们的头衔?(http://meta.stackexchange.com/questions/19190/)”,这里的共识是“不,他们不应该”。 –

+0

好的一点,谢谢) –

回答

5

可以从1中is_system标志改变为0,然后滴像任何其他分区方案。要做到这一点:

首先让你的服务器上的更新:

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

    update sys.sysclsobjs set status = 0 where name = 
        'ifts_comp_fragment_data_space_033D368C' 
    

现在,您可以通过关闭直接关闭控制台窗口,并开始你的SQL Server的Windows服务的单用户模式SQL Server进程。然后就像平常一样登录并删除分区方案。

最后,设置你的“允许更新”设置回0

这可能需要计划内停机的生产服务器。

免责声明这可能不是一个微软支持这样的方式,您可能希望在跳水之前测试一些非督促服务器上。

+1

谢谢..这明确指出了我的正确方向,而且我不必从头开始重新创建整个数据库了。^ _^ –

+0

你知道甚么是sys.sysclsobjs.status吗?它是否记录在其中? –

+0

为了不把位域中的其他位搞乱,设置'status&〜0x4'会不会好很多? –