2014-09-24 41 views
0

我試圖將SQLServer 2008上我漂亮的大數據庫從一個驅動器遷移到另一個驅動器,而且停機時間最短,並且存在一些問題。DBCC SHRINKFILE EMPTYFILE由於sysfiles1而被刪除表

因此,基本上,我的計劃是使用DBCC SHRINKFILE('文件名',EMPTYFILE)來擴展範圍。 經過一段時間後,我縮小了這個文件以避免日誌傳送數據庫在其他服務器中出現一些空間問題。 成功移動了大量的擴展數據塊,但後來發生此錯誤

DBCC SHRINKFILE:System table SYSFILES1 Page 1:21459450無法移動到其他文件,因爲它只能駐留在數據庫的主文件中。 消息2555,級別16,狀態1,行3 無法將文件「filename」的所有內容移動到其他位置以完成空文件操作。 DBCC執行完成。如果DBCC打印錯誤消息,請聯繫您的系統管理員。

所以,我已經嘗試過:

  • 手動讓我的分貝更大加入空的空間(只是讓大文件通過改變數據庫)二級文件組
  • 工作有點與文件
  • 完全\事務備份後使用分貝

而這沒有奏效。 有人可以幫我解決這個問題嗎?

非常感謝。

回答

0

由於錯誤消息指出,有些事情需要駐留在PRIMARY文件組中。使用sys.allocation_units中的信息來找出哪些用戶(而不是系統)對象仍處於PRIMARY狀態,並使用create index … with (drop_existing = on) on OTHER_FILEGROUP來移動它們。一旦移動了所有的對象,就應該能夠將文件縮小到儘可能小的程度。您的最後一步將會導致停機時間移動主文件(在這種情況下,最小停機時間並不意味着「無停機時間」)。幸運的是,實際上需要駐留在PRIMARY中的數據並不是很多,所以停機時間應該很小。但是一旦你把所有東西都拿出來,你就會有一個好主意。

當你在它的時候,將你的數據庫的默認文件組設置爲除主數據庫之外的東西,以避免將來將用戶對象放在那裏。

相關問題