A. 一個文件組可以被多個資料庫使用
1、一個文件或文件組不能由多個資料庫使用。例如,任何其他資料庫都不能使用包含 sales 資料庫中的數據和對象的文件 sales.mdf 和 sales.ndf。
2、一個文件只能是一個文件組的成員。
3、一個文件組可以包含多個文件,一個數據表在創建時可以指定要將數據放在那一個文件組上,而沒有辦法指定是要放在哪一個文件上,文件組對組內的所有文件都使用按比例填充策略。
4、事務日誌文件不能屬於任何文件組。
使用文件和文件組時的一些一般建議:
大多數資料庫在只有單個數據文件和單個事務日誌文件的情況下性能良好。
如果使用多個文件,請為附加文件創建第二個文件組,並將其設置為默認文件組。這樣,主文件將只包含系統表和對象。
若要使性能最大化,請在盡可能多的不同的可用本地物理磁碟上創建文件或文件組。將爭奪空間最激烈的對象置於不同的文件組中。
使用文件組將對象放置在特定的物理磁碟上。
將在同一聯接查詢中使用的不同表置於不同的文件組中。由於採用並行磁碟 I/O 對聯接數據進行搜索,所以性能將得以改善。
將最常訪問的表和屬於這些表的非聚集索引置於不同的文件組中。如果文件位於不同的物理磁碟上,由於採用並行 I/O,所以性能將得以改善。
請勿將事務日誌文件置於其中已有其他文件和文件組的物理磁碟上。
文件組對組內的所有文件都使用按比例填充策略的解析:
當數據寫入文件組時,SQL Server 資料庫引擎按文件中的可用空間比例將數據寫入文件組中的每個文件,而不是將所有數據都寫入第一個文件直至其變滿為止。然後再寫入下一個文件。例如,如果文件 f1 有 100 MB 可用空間,文件 f2 有 200 MB 可用空間,則從文件 f1 中分配一個區,從文件 f2 中分配兩個區,依此類推。這樣,兩個文件幾乎同時填滿,並且可獲得簡單的條帶化。
假定將資料庫設置為自動增長,則當文件組中的所有文件填滿後,資料庫引擎便會採用循環方式一次自動擴展一個文件以容納更多數據。例如,某個文件組由三個文件組成,它們都設置為自動增長。當文件組中所有文件的空間都已用完時,只擴展第一個文件。當第一個文件已滿,無法再向文件組中寫入更多數據時,將擴展第二個文件。當第二個文件已滿,無法再向文件組中寫入更多數據時,將擴展第三個文件。當第三個文件已滿,無法再向文件組中寫入更多數據時,將再次擴展第一個文件,依此類推
自己實踐過程摸索的內容:
文件與文件組的刪除,如果因為以前的分區方案不合理,需要取消分區,或者按另外一種方式分區,就需要涉及到文件與文件組的刪除操作,如果沒有掌握正確步驟,有時候可能無法刪除,會提示你「文件不為空,無法刪除」或者「文件組不為空,不能刪除」等等,如果不知道技巧,會很郁悶!本人就曾經經歷過這樣的郁悶!在網路也沒找到正確答案,下面說說我自己經過摸索後得到的答案。
1、 文件的刪除:首先要先清空文件里的數據,刪除之前數據一定要記得先備份,可將數據復制到其他表,然後執行:
DBCC SHRINKFILE (FileName, EMPTYFILE);
文件中的內容刪除後,再執行刪除文件命令,DataBaseName表示數據名,FileName 表示文件名:
ALTER DATABASE [DataBaseName] REMOVE FILE FileName;
2、文件組的刪除:
當文件組的文件被刪除後,按正常理解,應該就可以直接刪除文件組,實際是不行的,你無法刪除文件組。
因為還有幾個東西依賴文件組,一是分區方案,二是使用該分區方案的分區表。
所以要刪除分區方案才能刪除文件組。但要刪除分區方案之前要先更改依賴它的分區表,使其不依賴它。
這個主要是更改分區表的分區列,使其不使用分區方案,如果實在不會更改,在表裡數據已經備份的前提下,可以直接刪除表來解決。
然後再刪除分區表方案,最後就可以直接刪除文件組了。
總結前面的刪除過程:
1、修改分區表,使其不依賴分區方案。
2、刪除分區方案(依賴要刪除的文件組)。
DROP PARTITION SCHEME [Part_func_scheme_Name]
3、直接刪除文件組。
ALTER DATABASE [DataBaseName] REMOVE FILEGROUP [FGName]
DataBaseName表示數據名,FGName 表示文件組名。
B. 使用數據文件和文件組應該注意哪些問題
使用資料庫文件組應注意以下問題:
我們可以出於分配和管理的目的將資料庫文件分為多個組。在某些情況下,我們可以通過控制將數據和索引放置到專用磁碟上的專門文件組來改善性能。包含主數據文件的文件組被稱為主文件組。只有一個主文件組,如果在創建資料庫時不明確地指示將文件放到某個其他的文件組,所有的數據文件都會被放在主文件組中。
除了主文件組,資料庫還可以有一個或多個用戶定義的文件組。我們可以在CREATE DATABASE或ALTER DATABASE語句中使用FILEGROUP關鍵字來創建用戶定義的文件組。
注意不要混淆主文件組和主文件。
主文件總是在創建資料庫時第一個列出的文件,並且它的文件擴展名一般為.mdf。主文件的一個特點就是它指向master資料庫中的一張稱為sysfiles1的表,該表包含屬於這個資料庫的所有文件的信息。
主文件組是包含主文件的文件組。該文件組包含主數據文件和所有沒有放在其他專門文件組里的文件。系統表裡的所有頁面總是從主文件組里的文件中分配。
默認文件組
一個文件組總是會有一個DEFAULT屬性。注意DEFAULT是文件組的一個屬性而不是名字。在每個資料庫中只有一個文件組是默認文件組。默認情況下,主文件組同時也是默認文件組。資料庫所有者能夠使用ALTER DATABASE語句改變默認文件組。默認文件組包含沒有放在一個專門文件組里的全部的表和索引。
大多數SQL Server資料庫只有一個單獨的數據文件,該文件就在一個(默認的)文件組中。實際上,大多數用戶都對SQL Server是如何工作的了解不夠多,從而不知道文件組是什麼。用戶獲得了對資料庫更為精密的了解後,她也許會決定使用多個裝置來將一個資料庫的I/O分散開來。實現它最簡單的方法就是在一個RAID裝置上創建一個資料庫文件。不過那樣一來還是不需要使用文件組。隨著用戶對資料庫的精密性和復雜度的了解達到更高的水平,她也許會發現非常需要使用多個文件——也許是為了創建一個單個裝置不能提供足夠空間的資料庫。在這種情況下,她還是不需要使用文件組——她能夠使用一個CREATE DATABASE語句來完成這個目標,該語句帶的參數是一組位於不同驅動器上文件的列表。
更為資深的資料庫管理員也許會決定將不同的表分配到不同的驅動器上,或者使用SQL Server 2005的表和索引分區特性,只有這時才會用到文件組。他們可以使用SQL Server Management Studio中的對象瀏覽器來創建位於多個文件組上的資料庫。然後他們能夠右擊對象瀏覽器中的資料庫名稱並創建一個CREATE DATABASE命令腳本,該腳本包含所有文件組中的所有文件。它們能夠保存該腳本並在需要重建這個資料庫或創建一個類似的資料庫時重用該腳本。
.
你也許想知道為什麼會需要創建位於一個物理驅動器的多個文件之上的資料庫。
通常這樣做並不會對性能有所改善,但是它為我們在兩個重要的方面增加了靈活性。
首先,如果我們需要在磁碟損壞時從備份還原一個資料庫,那麼新的資料庫必須包
含與原來資料庫同樣數目的文件。例如,如果原來的資料庫由一個12GB的大型文件
組成,我們就需要將它還原到有著同樣大小文件的資料庫中。如果這時沒有另外一個
12GB的驅動器馬上可供使用,那麼我們就不能還原資料庫!然而,如果最初創建的
資料庫是在幾個較小的文件上的,那麼實際上我們就增加了還原期間的靈活性。我們
更可能找到幾個4GB的可用驅動器而不是一個大型的12GB驅動器。
其次,將資料庫分布到多個文件上,即使這些文件是在同一個驅動器上,也能夠為
我們帶來可以很方便地將資料庫遷移到不同驅動器上的靈活性。如果我們在將來改
變硬體配置,就可能會有這種需要。
分配有空間的對象(也就是表和索引)被創建在一個特殊的文件組之上。如果沒有指定文件組,它們會被創建在默認的文件組之上。當我們向存儲在某個特定的文件組上的對象增加空間時,數據會以按比例填充(proportional fill)的方式被存儲,這意味著如果在一個文件組中有一個文件的自由空間是另一個文件的兩倍,那麼每當從第二個文件分配一個區(extent)時,將會從第一個文件分配兩個區。在本章後面部分會有對區的更多討論。
我們也可以使用文件組來備份數據庫的一些部分。因為一張表是被創建在單個的文件組之上的,所以可以通過備份放置了一些表的文件組來選擇備份某一批關鍵表。我們也可以通過兩種方式來還原單個的文件或文件組。首先,我們可以對資料庫進行部分還原並且只是還原文件組的一個子集,該子集必須包括主文件組。一旦主文件組還原完畢,資料庫就馬上可用,但是只有在已還原的文件組上的對象才會可用。部分還原文件組的一個子集是對一個問題的解決方案。該問題就是如何允許非常大型的資料庫(VLDB,very large database)在限定的時間窗口內可用。
C. 次文件組存放什麼文件
.ndf文件
數據文件三種類型:
主數據文件:(後綴名.mdf),存放在主文件組中。主數據文件裡面存放數據和資料庫啟動信息。
日誌文件:(後綴名.ldf),資料庫中至少包含一個日誌,也可以有多個。(注意:文件組中包含個日誌)。
日誌包含恢復資料庫的所有日誌信息。
次要數據文件:(後綴名.ndf),存放於文件組中。