SQLSERVER-底层基础-体系结构-文件和文件组结构

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

时间: 2024-11-08 22:41:16

SQLSERVER-底层基础-体系结构-文件和文件组结构的相关文章

sqlserver 理解文件和文件组

在sqlserver中,数据库在硬盘的存储方式和普通文件存储一样,仅仅几个文件而已,sqlserver通过管理逻辑上的文件组的方式来管理存储数据的文件, 如图: 文件组管理着磁盘上的文件,而文件中存放着sqlserver的实际数据 为什么通过文件组来管理文件?使用文件组可以隔离用户和文件,使得用户针对文件组来创建表和索引,而不是实际磁盘的文件,当文件移动或者修改时候,由于用户建立的表和索引是建立在文件组上的,并不依赖文件,这样加强了可管理性 还有一点:使用文件组管理文件可以使的同一文件组内的不同

01.SQLServer性能优化之----强大的文件组----分盘存储

  前天有学弟问逆天:“逆天,有没有一种方式可以让我一个表存到两个数据库文件中,或者说怎么把一个表的数据平摊到其他数据库文件中?” (⊙o⊙)…,逆天数据库优化不是很强悍,不过类似的情景倒是见过,可以给你一个思路.比如说我们在创建数据库的时候就可以好好利用文件组. 举个例子: 我们一般创建数据库都是这么来的: create database BigValues on primary --数据库文件,主文件组 ( name='BigValues_Data', --逻辑名 size=10mb, --

SQLServer中数据库文件的存放方式,文件和文件组

我们公司近一年来做了一个CRM系统. 遇到一个问题就是:在插入交流记录的时候速度特别慢.(交流记录数据量大) 后来我们经理采用文件组的方法,将客户交流记录这张表提出来就快很多了 这里有一篇关于文件组的文章: 简介 在SQL SERVER中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL SERVER通过管理逻辑上的文件组的方式来管理文件.理解文件和文件组的概念对于更好的配置数据库来说是最基本的知识. 理解文件和文件组 在SQL SERVER

MySQL 体系结构以及各种文件类型学习汇总

1,mysql体系结构 由数据库和数据库实例组成,是单进场多线程架构. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件可以是frm.myd.myi.ibd等结尾的文件,当使用ndb存储引擎时候,不是os文件,是存放于内存中的文件. 数据库实例:由数据库后台进程/线程以及一个共享内存区组成,共享内存可以被运行的后台进程/线程所共享. 2,mysql文件类型 Mysql主要文件类型有如下几种: 参数文件:mysql实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数

MySQL体系结构以及各种文件类型学习

1,mysql体系结构 由数据库和数据库实例组成,是单进场多线程架构. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件可以是frm.myd.myi.ibd等结尾的文件,当使用ndb存储引擎时候,不是os文件,是存放于内存中的文件. 数据库实例:由数据库后台进程/线程以及一个共享内存区组成,共享内存可以被运行的后台进程/线程所共享. 2,mysql文件类型 Mysql主要文件类型有如下几种: 参数文件:mysql实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数

SQL Server中数据库文件的存放方式,文件和文件组 (转载)

简介 在SQL SERVER中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL SERVER通过管理逻辑上的文件组的方式来管理文件.理解文件和文件组的概念对于更好的配置数据库来说是最基本的知识. 理解文件和文件组 在SQL SERVER中,通过文件组这个逻辑对象对存放数据的文件进行管理. 先来看一张图: 我们看到的逻辑数据库由一个或者多个文件组构成 而文件组管理着磁盘上的文件.而文件中存放着SQL SERVER的实际数据. 为什么通过文件组

Linux 基础入门----用户及文件权限管理

用户及文件权限管理 实验介绍 1.Linux 中创建.删除用户,及用户组等操作. 2.Linux 中的文件权限设置. 一.Linux 用户管理 Linux 是一个可以实现多用户登陆的操作系统,比如“李雷”和“韩梅梅”都可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件.但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制 ,不同用户不可以轻易地查看.修改彼此的文件. 下面我们就来学

关于SQL Server中分区表的文件与文件组的删除(转)

在SQL Server中对表进行分区管理时,必定涉及到文件与文件组,关于文件与文件组如何创建在网上资料很多,我博客里也有两篇相关转载文件,可以看看,我这就不再细述,这里主要讲几个一般网上很少讲到的东西,但有时候却很重要. 前面内容主要摘自SQL的联机帮助: 1.一个文件或文件组不能由多个数据库使用.例如,任何其他数据库都不能使用包含 sales 数据库中的数据和对象的文件 sales.mdf 和 sales.ndf. 2.一个文件只能是一个文件组的成员. 3.一个文件组可以包含多个文件,一个数据

2017年4月8日Office 365 使用CSV文件导入邮件组

国内版 第一步: Import-Module msonline Connect-MsolService 输入用户名密码 第二步: Get-MsolUser" 第三步: Set-ExecutionPolicy unrestricted $cred = Get-Credential $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://partner.outlook.cn/Power