5

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

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

4

2 回答 2

15

只需附加它,它将被升级。如果您没有 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 行
无法打开新数据库“数据库名称”。CREATE DATABASE 已中止。

  • 如果您的数据库是 80 兼容模式,它将升级到 90。这可能意味着某些工作代码可能会突然中断,例如*=/ =*join 语法。
  • 如果您的数据库大于 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(原因是如果您的备份失败,您仍然拥有数据库的副本 - 如果您分离数据库,并且发生了一些事情错了,你有零份)。尽管即使采用这种更安全的方法,上述一些问题仍可能适用。

于 2013-03-01T17:56:54.557 回答
2

OP 似乎误解了他的数据库类型。SQL Server 的 539 版本不是 2008 而是 SQL Server 2000。请参阅此线程: SQL Server 文件版本号:我在哪里可以找到参考?

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

于 2013-07-31T20:47:27.013 回答