Microsoft® SQL Server; 将数据库映射到一组操作系统文件上数据和日志信息绝不混合在同一个文件中而且个别文件只由一个数据库使用
SQL Server 数据库有三种类型的文件
主要数据文件
主要数据文件是数据库的起点指向数据库中文件的其它部分每个数据库都有一个主要数据文件主要数据文件的推荐文件扩展名是 mdf
次要数据文件
次要数据文件包含除主要数据文件外的所有数据文件有些数据库可能没有次要数据文件而有些数据库则有多个次要数据文件次要数据文件的推荐文件扩展名是 ndf
日志文件
日志文件包含恢复数据库所需的所有日志信息每个数据库必须至少有一个日志文件但可以不止一个日志文件的推荐文件扩展名是 ldf
SQL Server 不强制使用 mdfndf 和 ldf 文件扩展名但建议使用这些扩展名以帮助标识文件的用途
在 SQL Server 中某个数据库中的所有文件的位置都记录在 master 数据库和该数据库的主文件中大多数情况下数据库引擎使用 master 数据库中的文件位置信息不过对于某些操作数据库引擎使用主文件中的文件位置信息初始化 master 数据库中的文件位置项
当使用 sp_attach_db 系统存储过程附加数据库时
当从 SQL Server 版升级到 SQL Server 时
当还原 master 数据库时
SQL Server 文件有两个名称
logical_file_name 是在所有 TransactSQL 语句中引用文件时所使用的名称
逻辑文件名必须遵守 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 实例在单个计算机上运行则每个实例获得不同的默认目录来存储该实例中创建的数据库文件
数据库文件组
出于分配和管理目的可以将数据库文件分成不同的文件组一些系统可以通过控制在特定磁盘驱动器上放置的数据和索引来提高自身的性能文件组可以对此进程提供帮助系统管理员可以为每个磁盘驱动器创建文件组然后将特定的表索引或表中的 textntext 或 image 数据指派给特定的文件组
没有一个文件可以是一个以上文件组的成员表索引以及 textntext 和 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_Prmmdf
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\MyDBldf
SIZE=
MAXSIZE=
FILEGROWTH=)
GO
ALTER DATABASE MyDB
MODIFY FILEGROUP MyDB_FG DEFAULT
GO
Create a table in the userdefined filegroup
USE MyDB
CREATE TABLE MyTable
( colaint PRIMARY KEY
colbchar() )
ON MyDB_FG
GO
可以将用户文件组设成只读数据不能更改但可以修改目录以执行权限管理等工作
SQL Server 数据库可以从服务器中分离出来然后重新连接到另一台服务器或原来的服务器上这对制作要分发的以便用于在客户的本地 SQL Server 安装上使用的数据库特别有用例如公司可以创建包含其当前产品目录的数据库公司可以在可写的光盘驱动器上创建这个数据库并将它设成只读然后他们可以复制这张光盘给那些在 Windows 便携式电脑上安装了目录应用程序和 SQL Server 的地区销售代表发送复本这样一来销售代表就有了最新的产品目录信息