2013-05-21 54 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'會不會好很多? –