以兼容模式转换旧 SQL 数据库

Convert old SQL Database in compatibility mode

我有一些 2006 年的旧数据库导出 (mdf + ldf)。 我无法将它们附加到 SQL Server 2016,而是附加到 SQL Server 2008R2,然后备份并在 SQL Server 2016 上恢复它。通过这种方法,数据库文件被转换。

我的问题是:我安装了第二个 SQL Server 2016 实例并将其切换到兼容级别 2008,而不是使用我的客户定义为安全风险的 SQL Server 2008R2 安装创建备份,然后在 "real" SQL Server 2016 上恢复。 不幸的是,当我进行恢复时,我收到错误消息

"sql ... cannot be upgraded because its non release version is not supported..."

因此,如果我理解正确,这意味着兼容级别为 2008 的 SQL Server 2016 与 SQL Server 2008 安装本身不同。那是对的吗?

那有什么区别呢?兼容性级别是否只影响 SQL 查询或数据库的整个行为(备份、恢复等)?

So, if I understand correctly, this means that SQL Server 2016 with compatibility level 2008 is NOT the same as SQL Server 2008 installation itself. Is that correct?

是的。兼容模式不会更改数据库 - 它只会在某些方面更改数据库引擎的行为,以使旧应用程序仍然 运行 符合预期。

即旧的兼容性级别将不接受某些新的 SQL 构造,并且有时会显示类似的查询行为。

您必须安装 2008R2 - 然后向客户收取升级所有数据库导出的费用;)

没有兼容级别和版本相同。

附加到实例的数据库使用与实例相同的版本。如果该数据库是从较旧的实例(例如 SQL Server 2008)还原的,则数据库将在 RESTORE 期间升级,然后置于适当的兼容模式;这意味着数据库 的行为 就像在旧实例上一样,但是,它仍然已升级。

你只能RESTORE一个数据库到一个支持数据库兼容级别的实例。如果您的文件来自 2006 年,那么 最新的 版本可能是 2005,它在 2015 年完全失去了支持。支持从 SQL Server 2005 备份的最新版本是 SQL 服务器 2014;您无法 恢复 2005 备份或 SQL Server 2016 之前的备份。

如果您的备份更旧,您将不得不使用更旧版本的 SQL 服务器。例如,如果它是 SQL Server 2000 备份,您将 获取不受支持的 SQL Server 2008,RESTORE 数据库, 将兼容性级别提高到 90 (2008),BACKUP 数据库,然后 RESTORE 在受支持的版本上。