一步一步教你备份和恢复你的TFS服务器(组图)备份和恢复一个TFS(TeamFoundationServer)服务器常常令人心生畏惧。因为这会涉及到很多服务和步骤。TFS(TeamFoundationServer)2010一发布,我就知道我们必须要做些什么来改进这个过程,同时,我们也开始讨论如何简化这个过程。我们关注的主要客户是小型的团队,它们既没有数据中心运营团队,也没有知道如何导入和导出SQL备份的DBA(Databaseadministrator)。几个月以前,我们计划构建一个全新的PowerTool,这个工具将会极大地简化备份和恢复一个TFS(TeamFoundationServer)服务器的过程。我很自豪地宣布,我们已经实现了这个PowerTool,它会包含在PowerTools的下一个版本中(现在,还没有确定具体日期,但是应该就在接下来的几个月内发布)。在我们当前发布的备份指南中,最令人沮丧的事情是:你每次在服务器中添加一个新的项目集合的时候,你都必须要在这个新的数据库中安装一些新的存储过程,以确保它可以获得和其它所有的数据库一致的快照。据我所知,大多数人都会忘记做这件事情。虽然,这并不意味着世界末日,但是,如果你忘记做这件事情,它就无法给你提供最无缝的恢复体验。这个新工具最酷的一个特性是:你每次进行备份的时候,它都可以自动地扫描所有的项目集合,同时,它会确保安装了所有合适的快照,当你建立一个新的集合的时候,没有任何附加的备份工作需要你来完成。这个新集合会被自动地配置,然后添加到你现有的备份计划中。你的部署越复杂,你的备份就越复杂。在这个讨论中,我将会把关注点放在TFS的初级用户上,因为这方面的简化是最大的,但是,这个PowerTool实际上可以帮助所有用户简化备份和恢复的过程。当我们开始构建这个PowerTool的时候,我们决定要利用全新的2010管理控制台的一个未公开的特性:可扩展性。实际上,这个管理控制台是支持插件的,但是我们没有在文档中公开这些接口,因为我们还没有对它们进行足够的测试。这是第一次真正地对它们进行测试,我希望在将来我们可以把这些接口公开给第三方的插件。让我带你领略一下全新的备份体验,同时,我会告诉你这个工具可以做些什么。配置一个备份计划在你的TFS(TeamFoundationServer)2010服务器上安装新版本的PowerTools以后(是的,这个工具只支持TFS(TeamFoundationServer)2010),你会注意到在管理控制台中有一个新标签,叫做“TeamFoundationBackups”。当你点击这个标签的时候,你会看到这样一个界面,通过这个界面,你可以配置你的TFS(TeamFoundationServer)备份计划。如果你点击“CreateBackupPlan”,会启动一个向导,来引导你完成整个过程。这是这个向导的welcome页面:点击“Next”,它会导航到第一个页面,在这个页面中你可以输入备份的路径和你希望保存备份的天数(超过这个天数以后,它会自动地删除备份)。当然,如果你希望自己手动删除备份,也可以很容易地做到——它们只是特定目录下的一些文件而已。再次点击“Next”,你可以提供自动执行备份的账户,同时,你可以看到这个账户需要什么SQL权限。正如你将会看到的那样,以后的备份并不是一定要被自动化,但是他们可以被自动化。再次点击“Next”,你现在可以进行一些配置,让备份服务把备份过程中的故障email给你。在这个例子中,我没有给我的TFS(TeamFoundationServer)服务器配置SMTP主机,所以我唯一的选择是“NoEmailAlerts”。这里你可以使用和其他TFS(TeamFoundationServer)通知一样的email主机和地址,也可以指定唯一的收件人。如果你想指定多个收件人,你可以用逗号把这些收件人的email地址隔开。再次点击“Next”,你现在可以配置时间表了。默认是每天晚上对你的TFS(TeamFoundationServer)进行完整的备份。对于小型的TFS(TeamFoundationServer)来说,这已经足够了。选择这个选项意味着将会在每天凌晨2点进行完整的备份。如果你想进行更多的控制,你可以点击“AdvancedSchedulesOptions”。如果你选择了“AdvancedSchedules”,那么你会得到两个选项:1)Full,DifferentialandTransactionalSchedule和2)ManualBackupOnly。如果你选择了“ManualBackupOnly”,它不会自动地执行任何的备份,只有当你运行管理控制台,点击“TakeFullBackupNow”按钮的时候才会执行一次备份(稍后会详细说明这部分内容)。这里我选择“Full,DifferentialandTransactionalSchedule”——这是一个十分具有代表性的企业备份策略。我把它设置成每个星期天的凌晨2点做一次完整的备份,每周的周一到周六的凌晨2点做一次差异备份(有时也称作增量备份),每15分钟做一次事务性的备份。这意味着我不会丢失15分钟以上的数据,这种策略的性能和存储开销并不大。SQL备份功能的这些特性真的很酷。我已经配置好了时间表,点击“Next”,让我检查一下我的设置。再次点击“Next”将会验证我提供的这些设置的有效性。你总不会希望等到第二天凌晨2点才发现你错误地输入了一些东西吧:)在这个例子中我收到了一个警告,因为我已经有了一个配置好的备份计划,而我正在重写它。这个工具规定一个TFS(TeamFoundationServer)服务器只能拥有一个备份时间表。点击“Configure”,将会为了备份而重新配置你的TFS(TeamFoundationServer)服务器,这会对你的TFS(TeamFoundationServer)服务器做出一些改动。再次点击“Next”,现在你已经完成了所有的配置工作!对于备份来说,你的服务器已经完全配置好了(可以和文档比较一下:))。进行一次备份当然,如果你已经建立了一个时间表,那么备份会在指定的时间自动地进行,但是我真的无法给你展示一张很酷的截图——那是不可见的:)。无论你是否建立了一个时间表。你都可以在任意时间执行一次完整的备份。如果备份计划已经配置好了,TeamFoundationBackups窗格看起来应该是这样的。它会显示你的很多设置,并且会提供一个管理操作的列表(在右边)。如果你点击“TakeFullBackupNow”,它会执行一次备份,然后把备份文件放在计划中指定的文件系统目录中。就是这样,就这么简单!恢复一个备份恢复一个备份需要一点技巧,它主要取决于你要做什么。我们支持两种基本的场景:1)恢复一个或多个团队项目集合(而不是真个服务器)。如果一个团队把他们的数据库搞乱了,他们想恢复它,但是所有使用这个服务器的其他团队又不想被打断,那么,你可以进行这样的操作。2)恢复整个TeamFoundationServer的数据(也许你保存数据的驱动器损坏了)。这两个过程几乎是一样的,但是我会指出几个主要的区别。这些步骤只是示意性的,要深入了解如何进行配置,你可以参考PowerTools提供的文档。你必须要做的第一件事情是让这个服务器为恢复做好准备。如果你要恢复整个服务器,你应该使用命令提示符,然后在TFS(TeamFoundationServer)2010的Tools目录中运行“tfsservicecontrolquiesce”。这会关闭所有的TFS(TeamFoundationServer)服务,同时,这会释放所有的数据库锁。如果你只是要恢复一些特定的集合,这个工具会提示你,来获取你要在脱机状态下恢复哪些集合,然后自动地拷贝那个用于替换的集合。这个工具很保守。它不会重写任何数据。所以,除了恢复一些特定的集合的情况之外,如果你要恢复一个现有的数据库的备份,你必须首先删除这个数据库。你可以使用SQLServerManagementStudio或SQLServerManagementStudioExpress来完成这个任务,这是很容易做到的。我更喜欢先Detach一些数据库,然后再移除它们,但是你也可以直接删除这些数据库。所有这些都可以通过在SQLServerManagementStudio中右击上下文菜单来完成。现在你已经为恢复做好准备了。在TFS(TeamFoundationServer)的管理控制台中,在“TeamFoundationBackups”标签下,你点击“RestoreDatabases”。这会启动一个向导,来引导你完成这个过程。在欢迎屏上点击“Next”以后,你可以浏览备份的列表,然后选择一个想要恢复的备份集(通过这个备份的日期和时间)。点击“Next”以后,你需要在你希望恢复的这个备份集中选择一些数据库和对应的SQL实例。如果一个数据库的“SQLServer”域是空白的,那么这意味着不能恢复这个数据库。在这个例子中,我要恢复同一个SQL实例中的所有数据库,但是,如果这是一个多实例的SQLServer,我可以选择把它们恢复到不同的SQL实例中,来扩展TFS(TeamFoundationServer)服务器。再次点击“Next”,你可以检查你刚才做出的一些选择。点击“Next”或“Verify”可以确保这个恢复是有效的。点击“Restore”将会恢复这些SQL数据库。最后,再次点击“Next”会显示一个“成功屏”:)它还包括一个“informationalwarning”,你很可能要在应用程序层上删除这个缓存,因为你不想和刚刚恢复那个数据库产生不一致。如果你运行了“tfsservicecontrolquiesce”,你必须要做的最后一件事情是运行“tfsservicecontrolunquiesce”,让TFS(TeamFoundationServer)服务器重新上线。总结就是这样!就这么简单!如果你以前做过TFS(TeamFoundationServer)服务器的备份/恢复,你一定会承认这种方法是更加容易的。我的讨论并没有涵盖所有说明(那是文档应该做的工作),也没有涵盖所有的备份策略,如果你还没有测试过它,不能只依靠这篇文章。无论你做了什么工作——你都要确保你可以备份和成功恢复所有数据,请,请,请不要在偶然地修改格式或删除你还没有备份的数据的过程中让你的系统遭到破坏。在一个带有真实数据的生产性的系统上测试它以前,你可以首先在一个仿真的系统上,或者在一个“预生产”的系统上测试它。对于这个全新的PowerTool,我真的激动万分。让管理一个TFS(TeamFoundationServer)服务器尽可能地容易,这是下一个步骤。就像我说的那样,在下一个版本的PowerTools中,它会和其他炫酷的工具一起发布。只要它一发布,我就会告诉大家的。像过去一样,欢迎大家提供反馈。