【问题标题】:How do I convert a SQL Server 2008 .mdf file to SQL Server 2012?如何将 SQL Server 2008 .mdf 文件转换为 SQL Server 2012?
【发布时间】:2013-03-01 17:55:16
【问题描述】:

我需要将文件DATABASE.MDF 从 SQL Server 2008 转换为 SQL Server 2012?

无法升级数据库“Sales”,因为此版本的 SQL Server 不支持其非发行版本 (539)。您无法打开与此版本的 sqlservr.exe 不兼容的数据库。您必须重新创建数据库。
无法打开新数据库“销售”。 CREATE DATABASE 已中止。 (Microsoft SQL Server,错误:950)

【问题讨论】:

  • 你不需要转换它。直接在sql server 2012上恢复就好了。
  • 感谢您的宝贵时间,但我有下一个错误:无法升级数据库“销售”,因为此版本的 SQL Server 不支持其非发布版本 (539)。您无法打开与此版本的 sqlservr.exe 不兼容的数据库。您必须重新创建数据库。无法打开新数据库“销售”。 CREATE DATABASE 已中止。 (Microsoft SQL Server,错误:950)............老实说,我找到了几个解决方案,但没有成功
  • 请查看我的回答的更新。您知道 SQL Server 2000 和 SQL Server 2008 之间存在很大差异。不准确地描述您的问题是获得一堆无用建议并在此过程中浪费人们时间的好方法。

标签: sql-server sql-server-2008 sql-server-2012


【解决方案1】:

只要附上它,它就会被升级。如果您没有 LDF 文件(为什么没有 LDF 文件?),您可能必须使用:

CREATE DATABASE [DatabaseName] ON 
    (FILENAME = N'Drive:\path\file.mdf')
    FOR ATTACH_REBUILD_LOG;

当然有一些注意事项...

  • 鉴于您只有 .mdf 文件,您可能会大惊小怪。如果文件没有从 SQL Server 完全分离,它可能无法重新附加,您将不得不返回源服务器进行正确备份(不是 .mdf 文件)。这完全取决于您从哪里获得要升级的 .mdf 文件。如果您的 .mdf 文件未完全分离,您可能会收到此错误:

文件激活失败。物理文件名“..._log.LDF”可能不正确。
无法重建日志,因为数据库未完全关闭。
消息 1813,第 16 层,状态 2,第 1 行
无法打开新数据库“DatabaseName”。 CREATE DATABASE 已中止。

  • 如果你的数据库是80兼容模式,它会升级到90。这可能意味着某些工作代码可能会突然中断,例如*=/=*连接语法。
  • 如果您的数据库大于 10GB,并且您尝试附加到 Express(可能是 LocalDB,从未尝试过),附加将失败(或者可能附加成功但在第一次自动增长时会失败?也没有测试过这个) .
  • 如果您的数据库是在 2008 Enterprise / Developer 上创建的,并且您使用了仅在该版本中可用的功能,并且您将数据库附加到 Standard 或 Express 版本,那么您也会遇到问题...
  • 好的,从您的错误消息来看,您根本没有尝试附加 2008 数据库,而是尝试附加 2000 数据库。您不能将其直接附加到 SQL Server 2012。您首先需要将其附加到 SQL Server 2005、2008 或 2008 R2 的任何实例以将其升级到该版本,然后将其备份并恢复到 SQL Server 2012。

FWIW,一种将数据库从一个实例移动到另一个实例的更安全的方法是使用BACKUP/RESTORE(原因是如果您的备份失败,您仍然拥有数据库的副本 -如果您分离数据库,并且出现问题,则您的副本为零)。尽管即使采用这种更安全的方法,上述某些问题仍可能存在。

【讨论】:

  • 感谢您提供的信息......现在......无法打开新的数据库“销售”。 CREATE DATABASE 已中止。消息 950,级别 20,状态 1,第 1 行数据库“销售”无法升级,因为此版本的 SQL Server 不支持其非发布版本 (539)。您无法打开与此版本的 sqlservr.exe 不兼容的数据库。您必须重新创建数据库。怎么解决这个问题?
  • 您是否阅读了我的更新,最后一个以OK 开头的要点?您无法将此数据库附加到 SQL Server 2012。您需要先将其附加到2005、2008或2008 R2,然后将其备份并恢复到2012。停止尝试。其他方法都不起作用 - 这是 SQL Server 故意阻止的。
  • 谢谢,我解决了这个问题,只是指出OK .. 很抱歉,我尝试了这么多选项,时间不多,压力也很大,但如果没有你的帮助,我不会这样做:备份/恢复
【解决方案2】:

OP 似乎误解了他的 DB 类型。 SQL Server 的 539 版本不是 2008 而是 SQL Server 2000。请参阅此线程: SQL Server file version number: where can I find a reference?

我在尝试将 SQL Server 2000 db 附加/恢复到 SQL Server 2012 实例时遇到了同样的错误消息。也许有办法解决它,但我所做的是首先转换为 SQL Server 2008 R2,然后到 SQL Server 2012。这执行没有问题。

【讨论】:

  • 您是如何将其转换为 2012 版的。有什么工具吗?
  • 实际上,如果我从 .bak 恢复或者只是附加和分离数据库,我不记得我不记得了。我的机器上有 2008R2 和 2012 实例,所以我只是附加/恢复到 2008 实例,然后分离/备份并附加/恢复到 2012 实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多