但是最近我在服务器上遇到了一个数据库,其中每个数据库都有多个mdf文件。
那是因为命名约定不正确。微软表示,每个数据库都有一个主数据文件,但这并不意味着它只能有一个“ mdf数据文件”,数据库可以有许多.mdf
扩展名的数据文件,但只有一个是主数据文件。最好对mdf
主数据文件和ndf
辅助数据文件进行扩展名以具有适当的分界,但这并不是一成不变的规则,您也可以对主数据文件赋予.abc扩展名,因此您所看到的是正常的。事实上,您可以提供任何喜欢的扩展名。
一个数据库具有多个.mdf文件是否有任何智慧?
如果你的意思是:
在一个数据库中拥有多个主文件是否有任何智慧?
答案是否定的,一个数据库只能有一个主数据文件。
但是,如果您的意思是:
对于一个数据库拥有多个数据文件(.mdf,.ndf或其他名称)是否有任何智慧?
这取决于您是否可以使用多个数据文件。如果它们分布在不同的物理驱动器上(我说的是主轴),您将在写入密集型应用程序中看到一些优势。如果它们都在相同的逻辑分区上,将没有任何优势,因为底层的它们将使用公共资源。使用文件和文件组可提高数据库性能,因为它允许跨多个磁盘,多个磁盘控制器或RAID(独立磁盘冗余阵列)系统创建数据库。例如,如果您的计算机有四个磁盘,则可以创建一个由三个数据文件和一个日志文件组成的数据库,每个磁盘上都有一个文件。在访问数据时,四个读/写头可以同时并行访问数据。
根据此MSDN BOL文章
文件组对每个文件组中的所有文件使用比例填充策略。在将数据写入文件组时,SQL Server数据库引擎会将与文件中的可用空间成比例的量写入文件组内的每个文件,而不是将所有数据写入第一个文件直到满。然后将其写入下一个文件。例如,如果文件f1具有100 MB的可用空间,文件f2具有200 MB的可用空间,则从文件f1分配一个扩展区,从文件f2分配两个扩展区,依此类推。这样,两个文件几乎同时充满,并实现了简单的条带化。
我知道的另一个优势是,如果您有一个数据文件,并且想在其他服务器上还原该数据库,则考虑使用1 TB数据库,因为它极不可能拥有1 TB的可用空间。现在,如果将同一个数据库散布在大小均为250 G的不同文件上,则还原起来会变得更加容易。这实际上可能不是您的情况,但是它确实很容易找到具有四个250 G驱动器而不是一个1 TB驱动器的服务器。
我会说最好使用不同的文件组来代替许多数据文件,但是环境也不是很多。由多个文件组组成的数据库可以通过称为“逐段还原”的过程来逐步还原。零碎还原适用于所有恢复模型,但对于完整和批量记录的模型,它比简单模式更灵活。可以分别备份和还原数据库中的文件或文件组。这样,您就可以只还原损坏的文件,而不必还原数据库的其余部分。可以单独或成组还原文件组备份中的文件