我在网上搜索过,但没有找到我要找的东西。
据我所知,问题/查询是 SQL Server 中的数据库应该有一个 .mdf 文件,可能还有一些 .ndf 文件和一个 .log 文件。
我见过许多带有一个 mdf 和多个 ndf 文件的数据库。但是最近我在服务器上遇到了一些数据库,其中每个数据库都有多个 mdf 文件。
我对一些数据库进行了备份,将它们移至另一台服务器,并将主文件恢复为 .mdf,将所有其他文件恢复为 .ndf,显然除了日志文件恢复为 .log 之外。
现在我的问题是:
- 为数据库拥有多个 .mdf 文件有什么智慧吗?
- 拥有多个 .mdf 文件有什么缺点吗?
它是SQL Server 2008 R2 64bit Enterprise Edition
非常感谢任何正确方向的建议或指示。谢谢你。
那是因为不正确的命名约定。微软说每个数据库都有一个主数据文件,但这并不意味着它只能有一个“mdf数据文件”,数据库可以有多个
.mdf
扩展名的数据文件但只有一个是主数据文件。最好mdf
为主数据文件和ndf
辅助数据文件提供扩展名以进行适当的分界,但这不是硬性规定,您也可以为主数据文件提供 .abc 扩展名,这样您所看到的都是正常的。事实上,您可以提供任何您喜欢的扩展名。如果你的意思是:
答案是否定的,一个数据库只能有一个主数据文件。
但如果你的意思是:
这取决于您可以也不能拥有多个数据文件的优势。如果它们分布在不同的物理驱动器上(我说的是主轴),您会看到写入密集型应用程序的一些优势。如果它们都在相同的逻辑分区上,那将没有任何优势,因为它们将使用公共资源。使用文件和文件组可以提高数据库性能,因为它允许跨多个磁盘、多个磁盘控制器或 RAID(独立磁盘冗余阵列)系统创建数据库。例如,如果您的计算机有四个磁盘,您可以创建一个由三个数据文件和一个日志文件组成的数据库,每个磁盘上有一个文件。在访问数据时,四个读/写磁头可以同时并行访问数据。
根据此 MSDN BOL 文章
文件组对每个文件组中的所有文件使用比例填充策略。在将数据写入文件组时,SQL Server 数据库引擎将与文件中的可用空间成比例的数量写入文件组中的每个文件,而不是将所有数据写入第一个文件直到写满。然后它写入下一个文件。例如,如果文件 f1 有 100 MB 空闲空间,文件 f2 有 200 MB 空闲空间,则从文件 f1 分配一个扩展区,从文件 f2 分配两个扩展区,依此类推。这样,两个文件几乎同时变满,实现了简单的条带化。
我知道的另一个优点是考虑一个 1 TB 的数据库,如果你有一个数据文件,并且你想在其他服务器上恢复这个数据库,那么你不太可能有 1 TB 的可用空间。现在,如果相同的数据库分布在每个大小为 250 G 的不同文件上,则恢复变得更容易。这实际上可能不是您的情况,但它确实有很大帮助,与一个 1 TB 驱动器相比,找到具有四个 250 G 驱动器的服务器并不容易
我会说,与其拥有许多数据文件,不如拥有不同的文件组,但同样没有很多环境。由多个文件组组成的数据库可以通过称为分段恢复的过程分阶段恢复。分段还原适用于所有恢复模式,但对于完整模式和批量日志模式比简单模式更灵活。可以单独备份和恢复数据库中的文件或文件组。这允许您仅恢复损坏的文件,而无需恢复数据库的其余部分。文件组备份中的文件可以单独或作为一个组恢复