SQL SERVER中的文件和文件组
十一月 5, 2009 – 5:34 下午SQL SERVER中的文件和文件组
SQL SERVER中的文件和ORACLE中的数据文件差不多,而文件组则和ORACLE中的表空间类似。
每个SQL SERVER数据库中的至少具有两个操作系统文件:
一个数据文件和一个日志文件。
数据文件包含数据和对象,例如表、索引、存储过程和视图。
日志文件包含恢复数据库中的所有事务所需的信息。为了便于分配和管理,可以将数据文件集合起来,放到文件组中。
而数据文件可以分为两种:主要数据文件和次要数据文件
主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。
用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。
每个数据库有一个主要数据文件。主要数据文件的建议文件扩展名是 .mdf.
次要数据文件是可选的,由用户定义并存储用户数据。
通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。
另外,如果数据库超过了单个 Windows 文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。
次要数据文件的建议文件扩展名是 .ndf。
文件组
每个数据库有一个主要文件组。此文件组包含主要数据文件和未放入其他文件组的所有次要文件。
可以创建用户定义的文件组,用于将数据文件集合起来,以便于管理、数据分配和放置。
这个文件组的概念就和ORACLE中的表空间类似。
在ORACLE中在不同的磁盘上创建多个数据文件,并将数据文件划分到同一表空间上提高性能。
在SQL SERVER中也是类似的,可以分别在两个磁盘分别创建两个文件data1.ndf和data2.ndf,然后将他们分配给文件组fgroup1上。
这样在fgroup1上创建一张表test,表中的数据就会分配到两个磁盘上,提高性能。
主文件组
主要包含主要文件的文件组。所有系统表都被分配到主要文件组中。
用户定义文件組
用户首次创建数据库或以后修改数据库时明确创建的任何文件组
默认文件组
如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。
不管何时,只能将一个文件组指定为默认文件组。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。
PRIMARY 文件组是默认文件组,除非使用 ALTER DATABASE 语句进行了更改。
但系统对象和表仍然分配给 PRIMARY 文件组,而不是新的默认文件组。
下面创建个数据库sunwg举例说明
create database sunwg
on primary –主文件组和主要数据文件
(name=’sunwg_Primary’,
filename=’D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_primary.mdf’),
filegroup sunwg_filegroup1 –用户定义文件组1
(name=’sunwg_fg_data1′,
filename=’D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_fg_data_1.ndf’),–次要数据文件1
(name=’sunwg_fg_data2′ ,
filename=’D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_fg_data_2.ndf’),–次要数据文件2
filegroup sunwg_filegroup2
(name=’sunwg_fg_data3′,
filename=’D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_fg_data_3.ndf’)
log on
(name=’sunwg_log’,
filename=’D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_log.ldf’)
go
数据库sunwg结构如下:
主文件组
名字:sunwg_Primary
主文件:D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_primary.mdf
用户定义文件组
名字:sunwg_filegroup1
次要数据文件:D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_fg_data_1.ndf
次要数据文件:D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_fg_data_2.ndf
名字:sunwg_filegroup2
次要数据文件:D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_fg_data_3.ndf
日志文件
名字:sunwg_log
日志文件:D:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sunwg_log.ldf
查询当前数据库中的文件组信息
2> select * from sys.sysfilegroups;
3> go
groupid allocpolicy status groupname
1 0 16 PRIMARY
2 0 0 sunwg_filegroup1
3 0 0 sunwg_filegroup2
(3 rows affected)
查询当前数据库中文件信息
1> select fileid,groupid,size,name from sys.sysfiles;
2> go
fileid groupid size name
1 1 288 sunwg_Primary
2 0 128 sunwg_log
3 2 128 sunwg_fg_data1
4 2 128 sunwg_fg_data2
5 3 128 sunwg_fg_data3
(5 rows affected)
通过将sys.sysfilegroups的groupid和sys.sysfiles的groupid关联就可以得到次要文件的分组情况。
修改默认数据文件组
alter database sunwg modify filegroup sunwg_filegroup1 DEFAULT;
创建表的时候指定文件组
1> CREATE TABLE sunwg (id INT) ON sunwg_filegroup1;
2> go