更新:2007 年 11 月
通过定义和使用其他文件组,可以改进数据库性能并就如何备份和还原数据库对象进行更好的管理。例如,可以针对不同的物理磁盘定义文件组以缩短访问时间。如果您将某个架构中的所有数据库对象都与特定的文件组相关联,则可以一起备份和还原这些对象。有关文件组的更多信息,请参见 Physical Database Files and Filegroups(物理数据库文件和文件组)。
行为
在数据库项目中定义文件和文件组之前,应当考虑下列行为,以便可以将预期行为与意外问题区分开。
升级到 Service Release 1
如果您在安装 Service Release 1 (SR1) 之前在 Visual Studio Team System Database Edition 中定义了文件组,则说明您已经将它们定义为架构对象,而且还在属于后期部署脚本的 storage.sql 文件中定义了相关文件。在安装 SR1 之后,可以将文件组和文件定义为数据库项目的属性。如果您使用 SR1 打开某个数据库项目,而且该数据库项目中包含在 SR1 之前创建的文件或文件组,则这些文件和文件组的定义将从架构对象转换为项目属性。另外,storage.sql 文件中的相应部分也将转换为注释。但是,这种转换不会影响 storage.sql 文件或文件组中的其他语句,也不会影响其他脚本中的文件定义。
导入架构
在从现有数据库导入架构时,还可以导入该数据库的文件组和文件定义。如果为从中导入架构的数据库定义了其他文件组,则会出现一则类似如下的警告:
警告: 已生成 ADD FILEGROUP 语句,这些语句包含对每个文件组的文件的创建。您应该检查这些文件名和文件路径是否与服务器上的其他文件一致。
比较架构
通过比较架构,可以确定是否针对具有不同名称的文件组创建了同名对象,还可以确定是否在源(而不是目标)中添加或移除了文件组。但是,您不能确定不同文件组是否包含相同的文件,因为文件组将总是显示为相同。有关如何比较架构的更多信息,请参见如何:比较两个数据库的架构。
生成和部署数据库项目
您不能使文件和文件组本身特定于某个生成配置。但是,您可以使用特定于某个配置的 MSBuild 变量来定义文件。例如,使用此方法,可以在独立开发环境中使用与临时服务器上不同的路径和文件名。
删除文件组、文件和日志文件
如果您从数据库项目中删除某个文件组,则可以将所做的更改部署到新数据库中,但是,如果要部署到现有的数据库中,则所做的更改将被忽略。当您从数据库项目中删除某个文件组时,与该文件组相关联的所有文件也将被删除。数据库项目中位于已删除文件组上的任何对象将以错误状态显示。若要解决这些错误,必须重新创建该文件组或者修改这些对象定义,才能将这些定义与另一个文件组相关联。在这些情况下,只有在错误得以解决之后才能部署数据库项目。
您不能删除主文件组,而必须始终指定一个默认文件组。如果您移除了某个文件组中的唯一一个文件,则会在“错误列表”窗口中看到一个警告,此警告指示该文件组的定义不完整。另外,您不能移除数据库项目中的唯一一个日志文件。对于每个数据库项目,必须始终至少定义一个日志文件。
限制
在部署文件组更改、重命名文件组并针对只读文件组定义数据库对象时,可能会遇到下列限制。
部署所做的更改
如果您在数据库项目中添加一个文件组,则可以将所做的更改部署到新的或现有的数据库。如果您删除某个文件组或者修改它的文件或属性,则可以将所做的更改部署到新数据库。但是,如果您将该项目部署到现有数据库,则对文件组进行的删除和修改将被忽略。如果数据库项目中某个文件组的名称与目标上某个文件组的名称相匹配,则会假设这两个文件组相同。
如果您重命名某个文件组,然后将其部署到现有数据库,则将创建一个具有新名称的文件组,现有的文件组不会发生变化。
重命名对象定义中的文件组
您不能使用重构功能来更新数据库对象定义中的文件组名称,而必须手动或者通过使用搜索功能来更新这些名称。有关更多信息,请参见“查找和替换”窗口。
针对只读文件组定义对象
即使您针对某个文件组选中了“只读”复选框,仍可以在数据库项目中针对该文件组定义对象。如果您尝试将这些更改部署到现有数据库,则部署操作将失败,并出现一个错误。如果您将这些更改部署到新数据库,则将创建这些对象,就好像“只读”复选框处于清除状态一样。在创建这些对象之后,该文件组将在数据库上设置为只读。