在首次创建数据库,或者以后将更多文件添加到数据库时,可以创建文件组。但是,一旦将文件添加到数据库,就不可能再将这些文件移到其它文件组。
一个文件不能是多个文件组的成员。表格、索引以及text、ntext和image数据可以与特定的文件组相关联。这意味着它们的所有页都将从该文件组的文件中分配。
有三种类型的文件组:
主文件组
这些文件组包含主数据文件以及任何其它没有放入其它文件组的文件。系统表的所有页都从主文件组分配。
用户定义文件组
该文件组是用CREATEDATABASE或ALTERDATABASE语句中的FILEGROUP关键字,或在SQLServer企业管理器内的"属性"对话框上指定的任何文件组。
默认文件组
默认文件组包含在创建时没有指定文件组的所有表和索引的页。在每个数据库中,每次只能有一个文件组是默认文件组。如果没有指定默认文件组,则默认文件组是主文件组。
最多可以为每个数据库创建256个文件组。文件组只能包含数据文件。事务日志文件不能是文件组的一部分。
SQLServer中一个数据库可以对应多个物理文件,其中有一个的主数据库文件,扩展名为MDF,其他为次数据库文件,扩展名为NDF。可以将不同的文件存放在不同的驱动器上,可以提高数据访问速度。文件组是逻辑概念,主要目的是将文件分组管理。createdatabasedb3onprimary--主文件组(name='db3_dat1',--数据库主文件filename='d:\db3_dat1.mdf',size=10mb,maxsize=100mb,filegrowth=10%),(name='db2_dat2',--主文件组,是次数据库文件filename='d:\db2_dat2.ndf',size=10mb,maxsize=100mb,filegrowth=10%),filegroupdb3g1--第2个文件组(name='db3_dat3',--第2个文件组中的次数据库filename='d:\db2_dat3.ndf',size=10mb,maxsize=30mb,filegrowth=5mb),(name='db3_dat4',--第2个文件组中的次数据库filename='d:\db2_dat4.ndf',size=5mb,maxsize=30mb,filegrowth=5mb),filegroupdb3g2--第三个文件组(name='db3_dat5',----第三个文件组中的次数据库filename='d:\db2_dat5.ndf',size=10mb,maxsize=50mb,filegrowth=20%)logon(name='db3_log',--日志文件filename='d:\db3_log.ldf',size=20mb,maxsize=100mb,filegrowth=10mb)(name=spri2_dat,filename='f:\database\spri2dt.ndf')
这里 spri2_dat 是文件组,是个概念的东西,抽象的
f:\database\spri2dt.ndf这个事文件,是实际的,实实在在存放在系统里的一个文件。
定义的作用就是,指定f:\database\spri2dt.ndf 给spri2_dat用,不好理解是吧
举个例子,初中高中学校里有很多班级每个班级都有固定的教室是吧
比如高三2班,我们说你是高三二班的,其实高三二班是个概念,抽象的,我让你去把高三二班给灭了,给炸了,你也不知道是该杀人还是放火或者怎么样,就算你这样,高三二班还是存在的,
现在我们指定一个物理地址,比如教学楼二层201作为这个班的固定教室,这个地址是实实在在存在的,吧它灭了,他就真被灭了
这里班级名称就像文件组,教室就像文件,
一个学校可以定义很多班级,也可以有很多教室,但是这个教室没有定义给哪个班级使用前,这个班级是不能上课的,就像文件组是不能存数据的,一个学生入学了,我们不会直接把他扔到哪个教室,而是给他分班,然后根据班级找匹配的教室,就像数据并不直接跟文件对接,而是归入文件组。
指定好后,教室也可以跟着班级名称叫高三二班了,很容易混淆,而且教室今天给了高三2班,明年又可能给1班,
在数据库里,文件毕竟不像建筑那么值钱,所以我们都是新建文件了,而且爱建多少建多少,想建多大建多大
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)