Microsoft® SQL Server
;
將數據庫映射到一組操作系統文件上
數據和日志信息絕不混合在同一個文件中
而且個別文件只由一個數據庫使用
SQL Server
數據庫有三種類型的文件
主要數據文件
主要數據文件是數據庫的起點
指向數據庫中文件的其它部分
每個數據庫都有一個主要數據文件
主要數據文件的推薦文件擴展名是
mdf
次要數據文件
次要數據文件包含除主要數據文件外的所有數據文件
有些數據庫可能沒有次要數據文件
而有些數據庫則有多個次要數據文件
次要數據文件的推薦文件擴展名是
ndf
日志文件
日志文件包含恢復數據庫所需的所有日志信息
每個數據庫必須至少有一個日志文件
但可以不止一個
日志文件的推薦文件擴展名是
ldf
SQL Server
不強制使用
mdf
ndf 和
ldf 文件擴展名
但建議使用這些擴展名以幫助標識文件的用途
在 SQL Server
中
某個數據庫中的所有文件的位置都記錄在 master 數據庫和該數據庫的主文件中
大多數情況下
數據庫引擎使用 master 數據庫中的文件位置信息
不過對於某些操作
數據庫引擎使用主文件中的文件位置信息初始化 master 數據庫中的文件位置項
當使用 sp_attach_db 系統存儲過程附加數據庫時
當從 SQL Server
版升級到 SQL Server
時
當還原 master 數據庫時
SQL Server
文件有兩個名稱
logical_file_name 是在所有 Transact
SQL 語句中引用文件時所使用的名稱
邏輯文件名必須遵守 SQL Server 標識符規則
且對數據庫必須是唯一的
os_file_name 是物理文件名
物理文件名必須遵從 Microsoft Windows NT® 或 Microsoft Windows®
和 Microsoft Windows
的文件名規則
下面是在 SQL Server
默認實例上創建的數據庫的邏輯文件名和物理文件名示例
SQL Server 數據和日志文件可以放置在 FAT 或 NTFS 文件系統中
但不能放在壓縮文件系統中
在 SQL Server
中
數據文件的頁按順序編號
文件首頁的頁碼是
每個文件都有一個文件 ID 號
在數據庫中唯一標識一頁需要同時使用文件 ID 和頁碼
下例顯示包含
MB 主要數據文件和
MB 次要數據文件的數據庫中的頁碼
在每個文件中
第一頁是包含文件特性信息的文件的頁首頁
在文件開始處的其它幾頁也包含系統信息(如分配映射表)
系統頁存儲在主要數據文件和第一個日志文件中
其中有一個是包含數據庫屬性信息的數據庫引導頁
SQL Server
文件可以從它們最初指定的大小自動增長
定義文件時可以指定增量
每次填充文件時
均按這個增量值增加它的大小
如果在文件組中有多個文件
這些文件在全部填滿之前不自動增長
填滿後
這些文件使用循環算法進行增長
還可以指定每個文件的最大大小
如果沒有指定最大大小
文件可以一直增長到用完磁盤上的所有可用空間
如果 SQL Server 作為數據庫嵌入應用程序
而該應用程序的用戶無法迅速與系統管理員聯系
此功能在這種情況下特別有用
用戶可以讓文件按需要自動增長
以減輕監視數據庫中的可用空間量和手工分配額外空間的管理負擔
如果有多個 SQL Server 實例在單個計算機上運行
則每個實例獲得不同的默認目錄來存儲該實例中創建的數據庫文件
數據庫文件組
出於分配和管理目的
可以將數據庫文件分成不同的文件組
一些系統可以通過控制在特定磁盤驅動器上放置的數據和索引來提高自身的性能
文件組可以對此進程提供幫助
系統管理員可以為每個磁盤驅動器創建文件組
然後將特定的表
索引
或表中的 text
ntext 或 image 數據指派給特定的文件組
沒有一個文件可以是一個以上文件組的成員
表
索引
以及 text
ntext 和 image 數據可以與文件組相關聯
在這種情況下
它們的所有頁都將分配在那個文件組中
日志文件不能作為文件組的一部分
日志空間與數據空間分開管理
文件組中的文件不自動增長
除非文件組中的文件全都沒有可用空間
有兩種類型的文件組
主要文件組
主文件組包含主要數據文件和任何沒有明確指派給其它文件組的其它文件
系統表的所有頁均分配在主文件組中
用戶定義文件組
用戶定義文件組是在 CREATE DATABASE 或 ALTER DATABASE 語句中
使用 FILEGROUP 關鍵字指定的文件組
每個數據庫中都有一個文件組作為默認文件組運行
當 SQL Server 給創建時沒有為其指定文件組的表或索引分配頁時
將從默認文件組中進行分配
一次只能有一個文件組作為默認文件組
db_owner 固定數據庫角色成員可以將默認文件組從一個文件組切換到另一個
如果沒有指定默認文件組
則主文件組是默認文件組
SQL Server
在沒有文件組時也能有效地工作
因此許多系統不需要指定用戶定義文件組
在這種情況下
所有文件都包含在主文件組中
而且 SQL Server
可以在數據庫內的任何位置分配數據
文件組不是在多個驅動器之間分配 I/O 的唯一方法
db_owner 固定數據庫角色成員可以備份和還原個別的文件或文件組
而不用備份或還原整個數據庫
下例在 SQL Server
的默認實例上創建數據庫
該數據庫包括一個主要數據文件
一個用戶定義的文件組和一個日志文件
主要數據文件在主文件組中
而用戶定義文件組有兩個次要數據文件
ALTER DATABASE 語句將用戶定義文件組指定為默認文件組
之後
通過指定用戶定義的文件組來創建表
USE master
GO
Create the database with the default data
filegroup and the log file
Specify the
growth increment and the max size for the
primary data file
CREATE DATABASE MyDB
ON PRIMARY
( NAME=
MyDB_Primary
FILE NAME=
c:\Program Files\Microsoft SQL Server\MSSQL\data\MyDB_Prm
mdf
SIZE=
MAXSIZE=
FILEGROWTH=
)
FILEGROUP MyDB_FG
( NAME =
MyDB_FG
_Dat
FILE NAME =
c:\Program Files\Microsoft SQL Server\MSSQL\data\MyDB_FG
_
ndf
SIZE =
MB
MAXSIZE=
FILEGROWTH=
)
( NAME =
MyDB_FG
_Dat
FILE NAME =
c:\Program Files\Microsoft SQL Server\MSSQL\data\MyDB_FG
_
ndf
SIZE =
MB
MAXSIZE=
FILEGROWTH=
)
LOG ON
( NAME=
MyDB_log
FILE NAME =
c:\Program Files\Microsoft SQL Server\MSSQL\data\MyDB
ldf
SIZE=
MAXSIZE=
FILEGROWTH=
)
GO
ALTER DATABASE MyDB
MODIFY FILEGROUP MyDB_FG
DEFAULT
GO
Create a table in the user
defined filegroup
USE MyDB
CREATE TABLE MyTable
( cola int PRIMARY KEY
colb char(
) )
ON MyDB_FG
GO
可以將用戶文件組設成只讀
數據不能更改
但可以修改目錄以執行權限管理等工作
SQL Server
數據庫可以從服務器中分離出來
然後重新連接到另一台服務器或原來的服務器上
這對制作要分發的
以便用於在客戶的本地 SQL Server 安裝上使用的數據庫特別有用
例如
公司可以創建包含其當前產品目錄的數據庫
公司可以在可寫的光盤驅動器上創建這個數據庫
並將它設成只讀
然後
他們可以復制這張光盤
給那些在 Windows
便攜式電腦上安裝了目錄應用程序和 SQL Server 的地區銷售代表發送復本
這樣一來
銷售代表就有了最新的產品目錄信息
From:http://tw.wingwit.com/Article/os/xtgl/201311/8594.html