SQLServer将数据库映射为一组操作系统文件。数据和日志信息绝不会混合在同一个文件中,而且一个文件只能由一个数据库使用。
文件组是命名的文件集合,用于帮助数据布局和管理任务,例如备份和还原操作。
SQLServer数据库具有三种类型文件:
1.主数据文件(mdf,后缀名可变,主数据文件是数据库的起点,指向数据库中的其他文件。每个数据库都有一个主数据文件。);
2.次要数据文件(ndf,后缀名可变,除主数据文件以外的所有其他数据文件都是次要数据文件。);
3.日志文件(ldf,后缀名可变,包含着用于恢复数据库的所有日志信息。每个数据库必须至少有一个日志文件,当然也可以有多个。);
在 SQLServer 中,数据库中所有文件的位置都记录在数据库的主文件和 master 数据库中。大多数情况下,SQL Server 数据库引擎使用 master 数据库中的文件位置信息。但是,在下列情况下,数据库引擎使用主文件的文件位置信息初始化 master 数据库中的文件位置项:
- 使用带有 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 选项的 CREATE DATABASE 语句来附加数据库时。
- 从 SQL Server 2000 版或 7.0 版升级时。
- 还原 master 数据库时。
SQLServer文件有两个名称(逻辑和物理文件名称)
logical_file_name是在所有Transact-SQL 语句中引用物理文件时所使用的名称。逻辑文件名必须符合 SQL Server 标识符规则,而且在数据库中的逻辑文件名中必须是唯一的。
os_file_name是包括目录路径的物理文件名。它必须符合操作系统文件命名规则。
SQL Server 数据和日志文件可以保存在 FAT 或 NTFS 文件系统中。由于 NTFS 在安全方面具有优势,因此,我们建议您使用 NTFS 文件系统。可读/写数据文件组和日志文件不能保存在 NTFS 压缩文件系统中。只有只读数据库和只读次要文件组可以保存在 NTFS 压缩文件系统中。
如果多个 SQL Server 实例在一台计算机上运行,则每个实例都会接收到不同的默认目录来保存在该实例中创建的数据库文件。
为便于分配和管理,可以将数据库对象和文件一起分成文件组。有两种类型的文件组:
数据库文件组
主文件组
主文件组包含主数据文件和任何没有明确分配给其他文件组的其他文件。系统表的所有页均分配在主文件组中。
用户定义文件组
用户定义文件组是通过在 CREATE DATABASE 或 ALTER DATABASE 语句中使用 FILEGROUP 关键字指定的任何文件组。
日志文件不包括在文件组内。日志空间与数据空间分开管理。
一个文件不可以是多个文件组的成员。表、索引和大型对象数据可以与指定的文件组相关联。在这种情况下,它们的所有页将被分配到该文件组,或者对表和索引进行分区。已分区表和索引的数据被分割为单元,每个单元可以放置在数据库中的单独文件组中。
每个数据库中均有一个文件组被指定为默认文件组。如果创建表或索引时未指定文件组,则将假定所有页都从默认文件组分配。一次只能有一个文件组作为默认文件组。db_owner 固定数据库角色成员可以将默认文件组从一个文件组切换到另一个。如果没有指定默认文件组,则将主文件组作为默认文件组。