当前位置:首页 » 文件管理 » 文件组中可以包含哪些文件
扩展阅读
vivox9字体怎样免费用 2024-09-08 09:24:50
怎样看数据是否溢出 2024-09-08 09:08:39

文件组中可以包含哪些文件

发布时间: 2024-04-20 19:43:55

A. 一个文件组可以被多个数据库使用

1、一个文件或文件组不能由多个数据库使用。例如,任何其他数据库都不能使用包含 sales 数据库中的数据和对象的文件 sales.mdf 和 sales.ndf。

2、一个文件只能是一个文件组的成员。

3、一个文件组可以包含多个文件,一个数据表在创建时可以指定要将数据放在那一个文件组上,而没有办法指定是要放在哪一个文件上,文件组对组内的所有文件都使用按比例填充策略。

4、事务日志文件不能属于任何文件组。

使用文件和文件组时的一些一般建议:

大多数数据库在只有单个数据文件和单个事务日志文件的情况下性能良好。

如果使用多个文件,请为附加文件创建第二个文件组,并将其设置为默认文件组。这样,主文件将只包含系统表和对象。

若要使性能最大化,请在尽可能多的不同的可用本地物理磁盘上创建文件或文件组。将争夺空间最激烈的对象置于不同的文件组中。

使用文件组将对象放置在特定的物理磁盘上。

将在同一联接查询中使用的不同表置于不同的文件组中。由于采用并行磁盘 I/O 对联接数据进行搜索,所以性能将得以改善。

将最常访问的表和属于这些表的非聚集索引置于不同的文件组中。如果文件位于不同的物理磁盘上,由于采用并行 I/O,所以性能将得以改善。

请勿将事务日志文件置于其中已有其他文件和文件组的物理磁盘上。

文件组对组内的所有文件都使用按比例填充策略的解析:

当数据写入文件组时,SQL Server 数据库引擎按文件中的可用空间比例将数据写入文件组中的每个文件,而不是将所有数据都写入第一个文件直至其变满为止。然后再写入下一个文件。例如,如果文件 f1 有 100 MB 可用空间,文件 f2 有 200 MB 可用空间,则从文件 f1 中分配一个区,从文件 f2 中分配两个区,依此类推。这样,两个文件几乎同时填满,并且可获得简单的条带化。

假定将数据库设置为自动增长,则当文件组中的所有文件填满后,数据库引擎便会采用循环方式一次自动扩展一个文件以容纳更多数据。例如,某个文件组由三个文件组成,它们都设置为自动增长。当文件组中所有文件的空间都已用完时,只扩展第一个文件。当第一个文件已满,无法再向文件组中写入更多数据时,将扩展第二个文件。当第二个文件已满,无法再向文件组中写入更多数据时,将扩展第三个文件。当第三个文件已满,无法再向文件组中写入更多数据时,将再次扩展第一个文件,依此类推

自己实践过程摸索的内容:

文件与文件组的删除,如果因为以前的分区方案不合理,需要取消分区,或者按另外一种方式分区,就需要涉及到文件与文件组的删除操作,如果没有掌握正确步骤,有时候可能无法删除,会提示你“文件不为空,无法删除”或者“文件组不为空,不能删除”等等,如果不知道技巧,会很郁闷!本人就曾经经历过这样的郁闷!在网络也没找到正确答案,下面说说我自己经过摸索后得到的答案。

1、 文件的删除:首先要先清空文件里的数据,删除之前数据一定要记得先备份,可将数据复制到其他表,然后执行:

DBCC SHRINKFILE (FileName, EMPTYFILE);
文件中的内容删除后,再执行删除文件命令,DataBaseName表示数据名,FileName 表示文件名:

ALTER DATABASE [DataBaseName] REMOVE FILE FileName;
2、文件组的删除:

当文件组的文件被删除后,按正常理解,应该就可以直接删除文件组,实际是不行的,你无法删除文件组。

因为还有几个东西依赖文件组,一是分区方案,二是使用该分区方案的分区表。

所以要删除分区方案才能删除文件组。但要删除分区方案之前要先更改依赖它的分区表,使其不依赖它。

这个主要是更改分区表的分区列,使其不使用分区方案,如果实在不会更改,在表里数据已经备份的前提下,可以直接删除表来解决。

然后再删除分区表方案,最后就可以直接删除文件组了。

总结前面的删除过程:

1、修改分区表,使其不依赖分区方案。

2、删除分区方案(依赖要删除的文件组)。

DROP PARTITION SCHEME [Part_func_scheme_Name]
3、直接删除文件组。

ALTER DATABASE [DataBaseName] REMOVE FILEGROUP [FGName]
DataBaseName表示数据名,FGName 表示文件组名。

B. 使用数据文件和文件组应该注意哪些问题

使用数据库文件组应注意以下问题:


我们可以出于分配和管理的目的将数据库文件分为多个组。在某些情况下,我们可以通过控制将数据和索引放置到专用磁盘上的专门文件组来改善性能。包含主数据文件的文件组被称为主文件组。只有一个主文件组,如果在创建数据库时不明确地指示将文件放到某个其他的文件组,所有的数据文件都会被放在主文件组中。

除了主文件组,数据库还可以有一个或多个用户定义的文件组。我们可以在CREATE DATABASE或ALTER DATABASE语句中使用FILEGROUP关键字来创建用户定义的文件组。

注意不要混淆主文件组和主文件。

主文件总是在创建数据库时第一个列出的文件,并且它的文件扩展名一般为.mdf。主文件的一个特点就是它指向master数据库中的一张称为sysfiles1的表,该表包含属于这个数据库的所有文件的信息。

主文件组是包含主文件的文件组。该文件组包含主数据文件和所有没有放在其他专门文件组里的文件。系统表里的所有页面总是从主文件组里的文件中分配。
默认文件组

一个文件组总是会有一个DEFAULT属性。注意DEFAULT是文件组的一个属性而不是名字。在每个数据库中只有一个文件组是默认文件组。默认情况下,主文件组同时也是默认文件组。数据库所有者能够使用ALTER DATABASE语句改变默认文件组。默认文件组包含没有放在一个专门文件组里的全部的表和索引。

大多数SQL Server数据库只有一个单独的数据文件,该文件就在一个(默认的)文件组中。实际上,大多数用户都对SQL Server是如何工作的了解不够多,从而不知道文件组是什么。用户获得了对数据库更为精密的了解后,她也许会决定使用多个装置来将一个数据库的I/O分散开来。实现它最简单的方法就是在一个RAID装置上创建一个数据库文件。不过那样一来还是不需要使用文件组。随着用户对数据库的精密性和复杂度的了解达到更高的水平,她也许会发现非常需要使用多个文件——也许是为了创建一个单个装置不能提供足够空间的数据库。在这种情况下,她还是不需要使用文件组——她能够使用一个CREATE DATABASE语句来完成这个目标,该语句带的参数是一组位于不同驱动器上文件的列表。

更为资深的数据库管理员也许会决定将不同的表分配到不同的驱动器上,或者使用SQL Server 2005的表和索引分区特性,只有这时才会用到文件组。他们可以使用SQL Server Management Studio中的对象浏览器来创建位于多个文件组上的数据库。然后他们能够右击对象浏览器中的数据库名称并创建一个CREATE DATABASE命令脚本,该脚本包含所有文件组中的所有文件。它们能够保存该脚本并在需要重建这个数据库或创建一个类似的数据库时重用该脚本。

.

你也许想知道为什么会需要创建位于一个物理驱动器的多个文件之上的数据库。
通常这样做并不会对性能有所改善,但是它为我们在两个重要的方面增加了灵活性。


首先,如果我们需要在磁盘损坏时从备份还原一个数据库,那么新的数据库必须包
含与原来数据库同样数目的文件。例如,如果原来的数据库由一个12GB的大型文件
组成,我们就需要将它还原到有着同样大小文件的数据库中。如果这时没有另外一个
12GB的驱动器马上可供使用,那么我们就不能还原数据库!然而,如果最初创建的
数据库是在几个较小的文件上的,那么实际上我们就增加了还原期间的灵活性。我们
更可能找到几个4GB的可用驱动器而不是一个大型的12GB驱动器。


其次,将数据库分布到多个文件上,即使这些文件是在同一个驱动器上,也能够为
我们带来可以很方便地将数据库迁移到不同驱动器上的灵活性。如果我们在将来改
变硬件配置,就可能会有这种需要。

分配有空间的对象(也就是表和索引)被创建在一个特殊的文件组之上。如果没有指定文件组,它们会被创建在默认的文件组之上。当我们向存储在某个特定的文件组上的对象增加空间时,数据会以按比例填充(proportional fill)的方式被存储,这意味着如果在一个文件组中有一个文件的自由空间是另一个文件的两倍,那么每当从第二个文件分配一个区(extent)时,将会从第一个文件分配两个区。在本章后面部分会有对区的更多讨论。

我们也可以使用文件组来备份数据库的一些部分。因为一张表是被创建在单个的文件组之上的,所以可以通过备份放置了一些表的文件组来选择备份某一批关键表。我们也可以通过两种方式来还原单个的文件或文件组。首先,我们可以对数据库进行部分还原并且只是还原文件组的一个子集,该子集必须包括主文件组。一旦主文件组还原完毕,数据库就马上可用,但是只有在已还原的文件组上的对象才会可用。部分还原文件组的一个子集是对一个问题的解决方案。该问题就是如何允许非常大型的数据库(VLDB,very large database)在限定的时间窗口内可用。

C. 次文件组存放什么文件

.ndf文件
数据文件三种类型:
主数据文件:(后缀名.mdf),存放在主文件组中。主数据文件里面存放数据和数据库启动信息。
日志文件:(后缀名.ldf),数据库中至少包含一个日志,也可以有多个。(注意:文件组中包含个日志)。
日志包含恢复数据库的所有日志信息。
次要数据文件:(后缀名.ndf),存放于文件组中。