溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQLSERVER-底層基礎(chǔ)-體系結(jié)構(gòu)-文件和文件組結(jié)構(gòu)

發(fā)布時(shí)間:2020-08-11 04:05:52 來源:網(wǎng)絡(luò) 閱讀:1148 作者:y120290489 欄目:數(shù)據(jù)庫

SQLServer 將數(shù)據(jù)庫映射為一組操作系統(tǒng)文件。

數(shù)據(jù)和日志信息絕不會(huì)混合存放在同一個(gè)文件中,而且一個(gè)文件只能由一個(gè)數(shù)據(jù)庫使用。文件組是命名的文件集合,用于幫主數(shù)據(jù)布局和管理任務(wù),譬如備份和還原操作。

數(shù)據(jù)庫文件

SQLServer數(shù)據(jù)庫具有三種類型的文件:.mdf,.ldf,ndf(主數(shù)據(jù)文件、日志文件、次要數(shù)據(jù)文件),注:文件的后綴名是可自主命名的。

主數(shù)據(jù)文件:每個(gè)數(shù)據(jù)庫都會(huì)有一個(gè)主數(shù)據(jù)庫文件,它是數(shù)據(jù)庫的起點(diǎn),指向數(shù)據(jù)庫的其他文件。

次要數(shù)據(jù)文件:數(shù)據(jù)庫可以沒有次數(shù)據(jù)文件,也可以有多個(gè)數(shù)據(jù)文件

日志文件:日志文件是用來存儲(chǔ)數(shù)據(jù)庫的日志信息,包含著所有用于恢復(fù)數(shù)據(jù)庫的所有日志信息;

在SQLServer中,數(shù)據(jù)庫中所有文件的位置都記錄在數(shù)據(jù)庫的主文件和master數(shù)據(jù)庫中。大多數(shù)情況下,SQLserver數(shù)據(jù)庫引擎使用master數(shù)據(jù)庫中的文件位置信息。

在下列情況下,數(shù)據(jù)庫引擎使用主文件的文件位置信息初始化 master 數(shù)據(jù)庫中的文件位置項(xiàng):

·        使用帶有 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 選項(xiàng)的 CREATE DATABASE 語句來附加數(shù)據(jù)庫時(shí)。

·        從 SQL Server 2000 版或 7.0 版升級(jí)時(shí)。

·        還原 master 數(shù)據(jù)庫時(shí)。

邏輯和物理文件名稱(SQLServer文件有兩個(gè)名稱:logical_file_name、os_file_name)

Logical_file_name是所有T-SQL語句中引用物理文件時(shí)所使用的名稱。邏輯文件名必須符合SQLSERVER標(biāo)識(shí)符規(guī)則而且必須是唯一的。

Os_file_name是包括目錄路徑的物理文件名。它必須符合操作系統(tǒng)文件命名規(guī)則。

 

數(shù)據(jù)文件頁

SQL Server 數(shù)據(jù)文件中的頁按順序編號(hào),文件的首頁以 0 開始。數(shù)據(jù)庫中的每個(gè)文件都有一個(gè)唯一的文件 ID 號(hào)。若要唯一標(biāo)識(shí)數(shù)據(jù)庫中的頁,需要同時(shí)使用文件 ID 和頁碼。下例顯示了包含 4-MB 主數(shù)據(jù)文件和 1-MB 次要數(shù)據(jù)文件的數(shù)據(jù)庫中的頁碼。

SQLSERVER-底層基礎(chǔ)-體系結(jié)構(gòu)-文件和文件組結(jié)構(gòu)

每個(gè)文件的第一頁是一個(gè)包含有關(guān)文件屬性信息的文件的頁首頁。在文件開始處的其他幾頁也包含系統(tǒng)信息(例如分配映射)。有一個(gè)存儲(chǔ)在主數(shù)據(jù)文件和第一個(gè)日志文件中的系統(tǒng)頁是包含數(shù)據(jù)庫屬性信息的數(shù)據(jù)庫引導(dǎo)頁。

文件大小

SQLServer文件可以從它們最初指定的大小開始自動(dòng)增長。在定義文件時(shí),您可以指定一個(gè)特定的增量。每次填充文件時(shí),其大小均按此增量來增長。如果文件組中有多個(gè)文件,則它們?cè)谒形募惶顫M之前不會(huì)自動(dòng)增長。填滿后,這些文件會(huì)循環(huán)增長。

每個(gè)文件還可以指定一個(gè)最大大小。如果沒有指定最大大小,文件可以一直增長到用完磁盤上的所有可用空間。如果 SQL Server 作為數(shù)據(jù)庫嵌入某應(yīng)用程序,而該應(yīng)用程序的用戶無法迅速與系統(tǒng)管理員聯(lián)系,則此功能就特別有用。用戶可以使文件根據(jù)需要自動(dòng)增長,以減輕監(jiān)視數(shù)據(jù)庫中的可用空間和手動(dòng)分配額外空間的管理負(fù)擔(dān)。

 

數(shù)據(jù)庫快照文件

數(shù)據(jù)庫快照存儲(chǔ)其“寫入時(shí)復(fù)制”數(shù)據(jù)時(shí)所用的文件格式取決于快照是由用戶創(chuàng)建,還是在內(nèi)部使用:

·        用戶創(chuàng)建的數(shù)據(jù)庫快照將其數(shù)據(jù)存儲(chǔ)在一個(gè)或多個(gè)稀疏文件中。稀疏文件技術(shù)是 NTFS 文件系統(tǒng)的一項(xiàng)功能。首先,稀疏文件不包含任何用戶數(shù)據(jù),并且沒有為稀疏文件分配用于用戶數(shù)據(jù)的磁盤空間。有關(guān)在數(shù)據(jù)庫快照中使用稀疏文件以及數(shù)據(jù)庫快照增長方式的一般信息,請(qǐng)參閱數(shù)據(jù)庫快照的工作方式和了解數(shù)據(jù)庫快照中的稀疏文件大小。

·        數(shù)據(jù)庫快照通過特定的 DBCC 命令在內(nèi)部使用。這些命令包括 DBCC CHECKDB、DBCC CHECKTABLE、DBCC CHECKALLOC 和 DBCC CHECKFILEGROUP。內(nèi)部數(shù)據(jù)庫快照使用原始數(shù)據(jù)庫文件的稀疏備用數(shù)據(jù)流。和稀疏文件一樣,備用數(shù)據(jù)庫流也是 NTFS 文件系統(tǒng)的一項(xiàng)功能。使用稀疏備用數(shù)據(jù)流,可以進(jìn)行多項(xiàng)數(shù)據(jù)分配,使其與單個(gè)文件或文件夾進(jìn)行關(guān)聯(lián),但不影響文件大小或卷統(tǒng)計(jì)信息。

 

數(shù)據(jù)庫文件組

·        為便于分配和管理,可以將數(shù)據(jù)庫對(duì)象和文件一起分成文件組。有兩種類型的文件組:

·        主文件組

·        主文件組包含主數(shù)據(jù)文件和任何沒有明確分配給其他文件組的其他文件。系統(tǒng)表的所有頁均分配在主文件組中。

·        用戶定義文件組

·        用戶定義文件組是通過在 CREATE DATABASE 或 ALTER DATABASE 語句中使用 FILEGROUP 關(guān)鍵字指定的任何文件組。

·        日志文件不包括在文件組內(nèi)。日志空間與數(shù)據(jù)空間分開管理。

·        一個(gè)文件不可以是多個(gè)文件組的成員。表、索引和大型對(duì)象數(shù)據(jù)可以與指定的文件組相關(guān)聯(lián)。在這種情況下,它們的所有頁將被分配到該文件組,或者對(duì)表和索引進(jìn)行分區(qū)。已分區(qū)表和索引的數(shù)據(jù)被分割為單元,每個(gè)單元可以放置在數(shù)據(jù)庫中的單獨(dú)文件組中。有關(guān)已分區(qū)表和索引的詳細(xì)信息,請(qǐng)參閱已分區(qū)表和已分區(qū)索引。

·        每個(gè)數(shù)據(jù)庫中均有一個(gè)文件組被指定為默認(rèn)文件組。如果創(chuàng)建表或索引時(shí)未指定文件組,則將假定所有頁都從默認(rèn)文件組分配。一次只能有一個(gè)文件組作為默認(rèn)文件組。db_owner 固定數(shù)據(jù)庫角色成員可以將默認(rèn)文件組從一個(gè)文件組切換到另一個(gè)。如果沒有指定默認(rèn)文件組,則將主文件組作為默認(rèn)文件組。

  • 文件和文件組示例

  • 以下示例在 SQL Server 實(shí)例上創(chuàng)建了一個(gè)數(shù)據(jù)庫。該數(shù)據(jù)庫包括一個(gè)主數(shù)據(jù)文件、一個(gè)用戶定義文件組和一個(gè)日志文件。主數(shù)據(jù)文件在主文件組中,而用戶定義文件組包含兩個(gè)次要數(shù)據(jù)文件。ALTER DATABASE 語句將用戶定義文件組指定為默認(rèn)文件組。然后通過指定用戶定義文件組來創(chuàng)建表。

    示例:

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




向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI