關於SQL Server中分區表的文件與文件組的刪除(轉)

在SQL Server中對錶進行分區管理時,一定涉及到文件與文件組,關於文件與文件組如何建立在網上資料不少,我博客裏也有兩篇相關轉載文件,能夠看看,我這就再也不細述,這裏主要講幾個通常網上不多講到的東西,但有時候卻很重要。數據庫

前面內容主要摘自SQL的聯機幫助:性能

  一、一個文件或文件組不能由多個數據庫使用。例如,任何其餘數據庫都不能使用包含 sales 數據庫中的數據和對象的文件 sales.mdf 和 sales.ndf日誌

  二、一個文件只能是一個文件組的成員。code

  三、一個文件組能夠包含多個文件,一個數據表在建立時能夠指定要將數據放在那一個文件組上,而沒有辦法指定是要放在哪個文件上,文件組對組內的全部文件都使用按比例填充策略。對象

  四、事務日誌文件不能屬於任何文件組。blog

使用文件和文件組時的一些通常建議:索引

  • 大多數數據庫在只有單個數據文件和單個事務日誌文件的狀況下性能良好。事務

  • 若是使用多個文件,請爲附加文件建立第二個文件組,並將其設置爲默認文件組。這樣,主文件將只包含系統表和對象。博客

  • 若要使性能最大化,請在儘量多的不一樣的可用本地物理磁盤上建立文件或文件組。將爭奪空間最激烈的對象置於不一樣的文件組中。class

  • 使用文件組將對象放置在特定的物理磁盤上。

  • 將在同一聯接查詢中使用的不一樣表置於不一樣的文件組中。因爲採用並行磁盤 I/O 對聯接數據進行搜索,因此性能將得以改善。

  • 將最常訪問的表和屬於這些表的非彙集索引置於不一樣的文件組中。若是文件位於不一樣的物理磁盤上,因爲採用並行 I/O,因此性能將得以改善。

  • 請勿將事務日誌文件置於其中已有其餘文件和文件組的物理磁盤上。

文件組對組內的全部文件都使用按比例填充策略的解析:

當數據寫入文件組時,SQL Server 數據庫引擎按文件中的可用空間比例將數據寫入文件組中的每一個文件,而不是將全部數據都寫入第一個文件直至其變滿爲止。而後再寫入下一個文件。例如,若是文件 f1 有 100 MB 可用空間,文件 f2 有 200 MB 可用空間,則從文件 f1 中分配一個區,從文件 f2 中分配兩個區,依此類推。這樣,兩個文件幾乎同時填滿,而且可得到簡單的條帶化。

假定將數據庫設置爲自動增加,則當文件組中的全部文件填滿後,數據庫引擎便會採用循環方式一次自動擴展一個文件以容納更多數據。例如,某個文件組由三個文件組成,它們都設置爲自動增加。當文件組中全部文件的空間都已用完時,只擴展第一個文件。當第一個文件已滿,沒法再向文件組中寫入更多數據時,將擴展第二個文件。當第二個文件已滿,沒法再向文件組中寫入更多數據時,將擴展第三個文件。當第三個文件已滿,沒法再向文件組中寫入更多數據時,將再次擴展第一個文件,依此類推

本身實踐過程摸索的內容:

  文件與文件組的刪除,若是由於之前的分區方案不合理,須要取消分區,或者按另一種方式分區,就須要涉及到文件與文件組的刪除操做,若是沒有掌握正確步驟,有時候可能沒法刪除,會提示你「文件不爲空,沒法刪除」或者「文件組不爲空,不能刪除」等等,若是不知道技巧,會很鬱悶!本人就曾經經歷過這樣的鬱悶!在百度也沒找到正確答案,下面說說我本身通過摸索後獲得的答案。

    一、 文件的刪除:首先要先清空文件裏的數據,刪除以前數據必定要記得先備份,可將數據複製到其餘表,而後執行: 

DBCC SHRINKFILE (FileName, EMPTYFILE);

  文件中的內容刪除後,再執行刪除文件命令,DataBaseName表示數據名,FileName 表示文件名:

ALTER DATABASE [DataBaseName] REMOVE FILE FileName;

   二、文件組的刪除:

      當文件組的文件被刪除後,按正常理解,應該就能夠直接刪除文件組,實際是不行的,你沒法刪除文件組。

      由於還有幾個東西依賴文件組,一是分區方案,二是使用該分區方案的分區表。

      因此要刪除分區方案才能刪除文件組。但要刪除分區方案以前要先更改依賴它的分區表,使其不依賴它。

      這個主要是更改分區表的分區列,使其不使用分區方案,若是實在不會更改,在表裏數據已經備份的前提下,能夠直接刪除表來解決。

  而後再刪除分區表方案,最後就能夠直接刪除文件組了。

    總結前面的刪除過程:

   一、修改分區表,使其不依賴分區方案。

 二、刪除分區方案(依賴要刪除的文件組)。

DROP PARTITION SCHEME [Part_func_scheme_Name]

 三、直接刪除文件組。

ALTER DATABASE [DataBaseName] REMOVE FILEGROUP [FGName]

DataBaseName表示數據名,FGName 表示文件組名。

相關文章
相關標籤/搜索