您好,登錄后才能下訂單哦!
SQLServer 將數據庫映射為一組操作系統文件。
數據和日志信息絕不會混合存放在同一個文件中,而且一個文件只能由一個數據庫使用。文件組是命名的文件集合,用于幫主數據布局和管理任務,譬如備份和還原操作。
數據庫文件
SQLServer數據庫具有三種類型的文件:.mdf,.ldf,ndf(主數據文件、日志文件、次要數據文件),注:文件的后綴名是可自主命名的。
主數據文件:每個數據庫都會有一個主數據庫文件,它是數據庫的起點,指向數據庫的其他文件。
次要數據文件:數據庫可以沒有次數據文件,也可以有多個數據文件
日志文件:日志文件是用來存儲數據庫的日志信息,包含著所有用于恢復數據庫的所有日志信息;
在SQLServer中,數據庫中所有文件的位置都記錄在數據庫的主文件和master數據庫中。大多數情況下,SQLserver數據庫引擎使用master數據庫中的文件位置信息。
在下列情況下,數據庫引擎使用主文件的文件位置信息初始化 master 數據庫中的文件位置項:
· 使用帶有 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 選項的 CREATE DATABASE 語句來附加數據庫時。
· 從 SQL Server 2000 版或 7.0 版升級時。
· 還原 master 數據庫時。
邏輯和物理文件名稱(SQLServer文件有兩個名稱:logical_file_name、os_file_name)
Logical_file_name是所有T-SQL語句中引用物理文件時所使用的名稱。邏輯文件名必須符合SQLSERVER標識符規則而且必須是唯一的。
Os_file_name是包括目錄路徑的物理文件名。它必須符合操作系統文件命名規則。
數據文件頁
SQL Server 數據文件中的頁按順序編號,文件的首頁以 0 開始。數據庫中的每個文件都有一個唯一的文件 ID 號。若要唯一標識數據庫中的頁,需要同時使用文件 ID 和頁碼。下例顯示了包含 4-MB 主數據文件和 1-MB 次要數據文件的數據庫中的頁碼。
每個文件的第一頁是一個包含有關文件屬性信息的文件的頁首頁。在文件開始處的其他幾頁也包含系統信息(例如分配映射)。有一個存儲在主數據文件和第一個日志文件中的系統頁是包含數據庫屬性信息的數據庫引導頁。
SQLServer文件可以從它們最初指定的大小開始自動增長。在定義文件時,您可以指定一個特定的增量。每次填充文件時,其大小均按此增量來增長。如果文件組中有多個文件,則它們在所有文件被填滿之前不會自動增長。填滿后,這些文件會循環增長。
每個文件還可以指定一個最大大小。如果沒有指定最大大小,文件可以一直增長到用完磁盤上的所有可用空間。如果 SQL Server 作為數據庫嵌入某應用程序,而該應用程序的用戶無法迅速與系統管理員聯系,則此功能就特別有用。用戶可以使文件根據需要自動增長,以減輕監視數據庫中的可用空間和手動分配額外空間的管理負擔。
數據庫快照存儲其“寫入時復制”數據時所用的文件格式取決于快照是由用戶創建,還是在內部使用:
· 用戶創建的數據庫快照將其數據存儲在一個或多個稀疏文件中。稀疏文件技術是 NTFS 文件系統的一項功能。首先,稀疏文件不包含任何用戶數據,并且沒有為稀疏文件分配用于用戶數據的磁盤空間。有關在數據庫快照中使用稀疏文件以及數據庫快照增長方式的一般信息,請參閱數據庫快照的工作方式和了解數據庫快照中的稀疏文件大小。
· 數據庫快照通過特定的 DBCC 命令在內部使用。這些命令包括 DBCC CHECKDB、DBCC CHECKTABLE、DBCC CHECKALLOC 和 DBCC CHECKFILEGROUP。內部數據庫快照使用原始數據庫文件的稀疏備用數據流。和稀疏文件一樣,備用數據庫流也是 NTFS 文件系統的一項功能。使用稀疏備用數據流,可以進行多項數據分配,使其與單個文件或文件夾進行關聯,但不影響文件大小或卷統計信息。
數據庫文件組
· 為便于分配和管理,可以將數據庫對象和文件一起分成文件組。有兩種類型的文件組:
· 主文件組
· 主文件組包含主數據文件和任何沒有明確分配給其他文件組的其他文件。系統表的所有頁均分配在主文件組中。
· 用戶定義文件組
· 用戶定義文件組是通過在 CREATE DATABASE 或 ALTER DATABASE 語句中使用 FILEGROUP 關鍵字指定的任何文件組。
· 日志文件不包括在文件組內。日志空間與數據空間分開管理。
· 一個文件不可以是多個文件組的成員。表、索引和大型對象數據可以與指定的文件組相關聯。在這種情況下,它們的所有頁將被分配到該文件組,或者對表和索引進行分區。已分區表和索引的數據被分割為單元,每個單元可以放置在數據庫中的單獨文件組中。有關已分區表和索引的詳細信息,請參閱已分區表和已分區索引。
· 每個數據庫中均有一個文件組被指定為默認文件組。如果創建表或索引時未指定文件組,則將假定所有頁都從默認文件組分配。一次只能有一個文件組作為默認文件組。db_owner 固定數據庫角色成員可以將默認文件組從一個文件組切換到另一個。如果沒有指定默認文件組,則將主文件組作為默認文件組。
文件和文件組示例
以下示例在 SQL Server 實例上創建了一個數據庫。該數據庫包括一個主數據文件、一個用戶定義文件組和一個日志文件。主數據文件在主文件組中,而用戶定義文件組包含兩個次要數據文件。ALTER DATABASE 語句將用戶定義文件組指定為默認文件組。然后通過指定用戶定義文件組來創建表。
示例:
USE master;
GO
CREATE DATABASE MyDB
ON PRIMARY
( NAME='MyDB_Primary',FILENAME='c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\data\MyDB_Prm.mdf',
SIZE=4MB,MAXSIZE=10MB,FILEGROWTH=1MB),
FILEGROUP MyDB_FG1
( NAME = 'MyDB_FG1_Dat1'FILENAME ='c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\data\MyDB_FG1_1.ndf',
SIZE = 1MB, MAXSIZE=10MB,FILEGROWTH=1MB),
( NAME = 'MyDB_FG1_Dat2',FILENAME ='c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\data\MyDB_FG1_2.ndf',
SIZE = 1MB,MAXSIZE=10MB,FILEGROWTH=1MB)
LOG ON
( NAME='MyDB_log',FILENAME ='c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\data\MyDB.ldf',
SIZE=1MB,MAXSIZE=10MB, FILEGROWTH=1MB);
GO
ALTER DATABASE MyDB
MODIFY FILEGROUP MyDB_FG1 DEFAULT;
GO
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。