将 msdb 从 SQL Server 2008 R2 还原到 SQL Server 2012 实例

bum*_*una 5 sql-server sql-server-2008-r2 sql-server-2012

我正在一个单独的盒子上从 SQL Server 2008 R2 实例转移到 SQL Server 2012 实例。我想恢复msdb以获取我所有的代理工作等,但出现以下错误:

数据库 'msdb' 的还原失败。
(Microsoft.SqlServer.Management.RelationalEngineTasks)
System.Data.SqlClient.SqlError: 设备上系统数据库的备份\10.0.0.3\BackUps\NOFAULT2010_msdb_FULL_20121016_220006.bak 无法恢复,因为它是由不同版本的服务器创建的(10.50.1600) 比这台服务器 (11.00.2100)。
(Microsoft.SqlServer.SmoExtended)

如果我试图从 2012 年到 2008 年,我会理解这一点,但这对我来说是新的。

无论如何要让它发挥作用?或者,如果不是转移代理工作、用户、blazi blah 的最佳方式?

谢谢

Mik*_*lsh 13

如果您尝试恢复用户数据库 - 这将恢复正常。问题是这是一个系统数据库。系统数据库是为它们打算使用的 SQL 版本设计的。为了使 SQL Server 2008 R2MSDB在 SQL Server 2012 中工作,两个版本之间必须没有不同的功能。有道理?

简短的回答 为了让您的工作顺利进行,您需要从旧服务器中编写脚本并将脚本应用到新服务器上。如果您有一些作业,您可以像右键单击并编写每个作业一样简单地执行此操作。或者,如果您有很多并且不想一次一个,则使用 PowerShell 或其他一些方法查看脚本。

要获取登录名,您将使用Sp_help_revlogin我在下面引用的脚本和一个脚本来复制旧的服务器级角色和权限并将它们复制到新的..

基本上,对于您带来的 90% 的内容,我很确定答案是“编写脚本”,然后只需将该脚本应用到新服务器上,登录名、作业等现在都将存在于MasterMSDB专为 SQL Server 2012 设计的数据库。

稍长的答案和关于迁移/升级方法的快速讨论

因此,如果您尝试将所有这些对象转移到 SQL Server 2012,您的方法有两个基本选项。

  1. 进行就地升级。将您的实例从 SQL Server 2008 R2 升级到 SQL Server 2012..

优点- 您可以获得所有“东西”(代理作业、链接服务器、登录、警报、操作员、邮件配置文件等),并且您不必复制对象。

缺点- 它可能有点乱,现在工作正常并且受到支持,但我很偏执并且想确定我有成功和快速回滚选项(如果新服务器上出现问题,只需在期间恢复到旧服务器迁移。通过就地升级,它会更多,好吧,最终)。

您可以从这里开始就地升级。

  1. 迁移到新服务器...

在这种情况下,您只需从上面翻转利弊。这种方法并不那么艰难或费力。它只需要一些好的计划。基本上你:

  • 在您的旧服务器上,根据每个对象类型的说明和方法(通常可以在联机丛书中找到)(例如作业、链接服务器、SQL 代理警报等对象),编写出您想要移动的所有对象的脚本。 .

  • 使用类似sp_help_revlogin移动登录的工具和类似这样的脚本来移动登录权限。

  • 备份和恢复已经包含数据库内用户和权限的数据库(我喜欢在分离附加上这样做,因为它有助于保留回滚能力,但我已经看到并完成了这两种方式)。如果您是,请更改您的兼容模式计划在 2012 模式下支持 DB,并以这种方式对其进行了测试。或者,如果这是您的计划,请将它们保持在 2008 模式。

  • 在上面从旧服务器创建的新服务器上为所有对象(如作业、登录名等)运行这些脚本(最好在 DB 之后执行其中的大部分操作。默认不存在或作业数据库中的 T-SQL 步骤不存在等)

这种方法的另一个好处是,您可以在工作时间提前进行试运行.. 将该实例上使用的应用程序的测试或开发版本指向 2012 年,看看有什么问题.. 修复它并测试您的清单、回滚计划等,并为上线之夜做好准备。