關於資料庫檔案從總體來看,資料庫檔案包括如下一些檔案:·
一個主要資料檔案(.mdf
)·
0
個或多個輔助資料檔案(.ndf
)·
1
個或多個記錄檔(.ldf
)他們各自的作用又是什麼呢?答案實際上很明顯,我再次強調一下:·
主要資料檔案:除了儲存資料以外,還可以跟蹤其餘的資料庫檔案,估計是儲存了index頁面和allocation頁面的結果。簡單地說就是用來存放系統資料表和資料的。在用最簡單的create database命令建立資料庫時,主要資料檔案的預設大小為master資料庫主要資料檔案的大小。·
輔助資料檔案:在主要資料檔案達到最大值之後來儲存資料用的,至於當使用者插入一條記錄,究竟是插入主要資料檔案中還是插入到輔助資料檔案中,還是兩個資料庫檔案都插入相同的一條記錄,這個問題後面具體討論。·
記錄檔:儲存恢複事務的所有必要的資訊,因為事務的回複主要是靠日誌來完成,所以記錄檔在資料庫檔案中是必備的,至少有一個。在用最簡單的create database命令建立資料庫時,記錄檔的預設大小為1MB。 建立資料庫檔案時,我們有5個屬性必須指定(可以指定TB,GB,MB,預設為MB):·
邏輯名(Name):也就是實體名稱的別稱,儲存於資料庫中。·
實體名稱(Filename):這個可是實實在在的資料庫檔案,儲存於作業系統的某一個磁碟中。·
初始容量(Size):定義資料庫檔案的最小的容量。如果用最簡單的create dabatase建立資料庫時,則主要資料檔案的初始容量預設為至少等於master資料庫中主要資料檔案的大小,記錄檔的初始容量預設為1MB;如果在建立資料庫時只指定了資料檔案的初始容量,而沒有指定日誌資料檔案的初始容量,則日誌資料檔案的預設大小為所有資料檔案和的25%。·
最大容量(Maxsize)
:在資料庫建立後,資料檔案會逐步增大,但是能增長到的最大容量就是這個值所定義的。如果最大容量沒有指定,則檔案一直會填滿整個磁碟。·
增長增量(Filegrowth)
:指定用來儲存表、索引或者記錄檔的作業系統檔案的增量,即資料庫的容量每次增加多少。如果增量沒有指定,則資料檔案的預設增量為1MB(和yukon中不同),記錄檔的預設增量為10%(katmai和yukon是一樣的)。
所有的關於資料庫及資料庫檔案/檔案組的資訊,都可以通過以下視圖和預存程序查看到。·
Sys.databases·
Sys.database_files·
Sp_helpdb·
Sp_databases·
Sp_helpfile·
Sp_helpfilegroup
另外,在建立資料檔案時,我們還可以有其他的一些屬性可以指定:·
檔案組:檔案組對組內的所有檔案都使用按比例填充策略。當將資料寫入檔案組時,Microsoft SQL Server 根據檔案中的可用空間量將一定比例的資料寫入檔案組的每個檔案,而不是將所有的資料先寫滿第一個檔案,接著再寫入下一個檔案。例如,如果檔案 f1 有 100 MB (MB) 可用空間,檔案 f2 有 200 MB 可用空間,則從檔案 f1 中分配一個擴充盤區,從檔案 f2 中分配兩個擴充盤區,依此類推。這樣,兩個檔案幾乎同時填滿,並且可獲得簡單的條帶化。
一旦檔案組內的所有檔案已滿,SQL Server 就自動地採用迴圈方式一次擴充一個檔案,以容納更多的資料(假定資料庫設定為自動成長)。例如,某個檔案組由三個檔案組成,它們都設定為自動成長。當檔案組中的所有檔案的空間用完時,只擴充第一個檔案。當第一個檔案已滿,不能將更多的資料寫入該檔案組時,擴充第二個檔案。當第二個檔案已滿,不能將更多的資料寫入該檔案組時,擴充第三個檔案。如果第三個檔案已滿,不能將更多的資料寫入該檔案組,那麼再次擴充第一個檔案,依此類推。
使用檔案和檔案組時,通過允許跨多個磁碟、多個磁碟控制卡或 RAID(獨立磁碟容錯陣列)系統建立資料庫,可提高資料庫效能。例如,如果電腦中有四個磁碟,那麼可以建立一個由三個資料檔案和一個記錄檔組成的資料庫,每個磁碟上放置一個檔案。在對資料進行訪問時,四個讀/寫磁頭可以同時並行地訪問資料,從而加速資料庫操作。
另外,檔案和檔案組允許資料布局,因為可以在特定的檔案組中建立表。因為特定表的所有輸入/輸出都可以定向到特定的磁碟,所以效能得以改善。例如,可以將最常用的表放在一個檔案組中的一個檔案中,該檔案組位於一個磁碟上;而將資料庫中其它的不常訪問的表放在另一個檔案組中的其它檔案中,該檔案組位於第二個磁碟上。 Create database CrossSQLon PRIMARY --主要資料檔案組,可以直接用Primary,也可以省略,primary為預設的檔案組( NAME = CrossSQL1, --資料庫的邏輯名,儲存於資料庫檔案中 FILENAME = 'c:/CrossGQL/CrossGQL_dat1.mdf',--資料庫的實體名稱,即在檔案系統中的名稱,一個資料庫有且只有個mdf SIZE = 10,--初始容量,預設單位為MB MAXSIZE = 50,--最大容量 FILEGROWTH = 15% --增長值,預設為MB,也可以用百分比來作為增長率), --在一個組中有多個檔案時,用","分隔開( NAME = CrossSQL2, FILENAME = 'c:/CrossGQL/CrossGQL_dat2.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15%), FILEGROUP Group1 --此為使用者自訂的檔案組,利用檔案組可以實現資料的分布式,從而提高資料的訪問速率( NAME = CrossSQL3, FILENAME = 'c:/CrossGQL/CrossGQL_dat3.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ),( NAME = CrossSQL4, FILENAME = 'd:/CrossGQL/CrossGQL_dat4.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), FILEGROUP Group2( NAME = CrossSQL5, FILENAME = 'e:/CrossGQL/CrossGQL_dat5.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ),( NAME = CrossSQL6, FILENAME = 'c:/CrossGQL/CrossGQL_dat6.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON --日誌的存放,一個資料庫至少有一個日誌資料檔案,一般情況下,日誌資料檔案的大小為所有資料檔案大小的/4( NAME = 'CrossSQL_log1', FILENAME = 'c:/CrossGQL/CrossGQL_log1.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )go