AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 28502
Accepted
bumble_bee_tuna
bumble_bee_tuna
Asked: 2012-11-11 18:29:18 +0800 CST2012-11-11 18:29:18 +0800 CST 2012-11-11 18:29:18 +0800 CST

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

  • 772

我正在从一个 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 的最佳方式?

谢谢

sql-server sql-server-2008-r2
  • 2 2 个回答
  • 12825 Views

2 个回答

  • Voted
  1. Best Answer
    Mike Walsh
    2012-11-11T19:01:12+08:002012-11-11T19:01:12+08:00

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

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

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

    基本上,对于你所带来的 90%,我很确定答案是“编写脚本”,然后只需将该脚本应用到新服务器上,登录、作业等现在都将存在于Master和MSDB为 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 年,看看有什么问题。修复它并测试您的清单、回滚计划等,并为上线之夜做好准备。

    • 13
  2. Randy Sheldon
    2015-11-18T11:25:05+08:002015-11-18T11:25:05+08:00

    这是一个旧帖子,但我想提出一个不同的解决方案。

    1. 在您的 Sql2012 系统上,恢复 SQL2008 MSDB 数据库的备份,但在恢复过程中为其指定一个不同的名称 ('msdb_2008')。另外,请确保不要覆盖原始文件。还原过程会将数据库版本升级到 SQL2012。

    2. 从您的 SQL2012 实例中分离 MSDB_2008 数据库(但请记住恢复的文件在哪里!)

    3. 停止 SQL Server 服务(SQL 代理将因此而停止)

    4. 浏览到原始 MSDB 文件所在的区域,并将它们移动到子文件夹以妥善保管。

    5. 将 MSDB_2008 数据库文件复制到原始 MSDB 文件所在的路径,在此过程中重命名它们以匹配原始 MSDB 文件。

    6. 重新启动 SQL Server。

    • -3

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve