从2008 R2到2014年迁移期间的兼容性级别

时间:2016-06-07 15:49:26

标签: sql-server-2008-r2 migration sql-server-2014

我正在开发一个项目,为我们的项目团队创建工具,以便快速启动具有部分或全部20多个数据库的开发和测试环境,但只使用他们项目所需的特定数据。环境可以是开发人员计算机上的物理服务器,VM或本地实例。生产数据库都是2008 R2,但我们将进入2014年,所以我们需要支持两者。

我正在开发一个脚本来创建一组标准的登录和数据库用户,并指定了特定的角色。这些必须是特定于版本的,以考虑现在已弃用的与角色相关的2008存储过程。每个团队恢复的特定数据库会有所不同,因此脚本在sys.databases上使用游标,并在WHILE循环中工作,其顶部是USE,最后是FETCH NEXT。

大多数数据库都将is_auto_update_statistics_async设置为0,但是少数数据库(包括每个人的默认数据库)都将其设置为1.因此,USE语句将更改光标所在的SET上下文。分配导致FETCH NEXT失败。我第一次尝试纠正这种情况是在FETCH NEXT之前发出SET AUTO_UPDATE_STATS_ASYNC ON,但这导致错误 - 即使在2014本地实例上(' AUTO_UPDATE_STATS_ASYNC'也不是识别的SET选项)。

我有一个解决方案,但在研究时我注意到原始2008 R2数据库和恢复到2014本地实例的数据库中的compatibility_level是相同的(100)。

错误以及兼容级别保持不变的事实是否表明数据库在恢复到2014年实例时并未真正迁移?

如果是这样,在恢复之后会增加兼容级别吗?

1 个答案:

答案 0 :(得分:0)

根据我在帖子中的说法,可能只是语法错误,首先是AUTO_UPDATE_STATISTICS_ASYNC而不是AUTO_UPDATE_STATS_ASYNC

其次,SET AUTO_UPDATE_STATISTICS_ASYNC不是有效的SET选项(如ANSI_NULLS等),它是ALTER DATABASE设置,所以应该这样执行:

ALTER DATABASE [DatabaseName] SET AUTO_UPDATE_STATISTICS_ASYNC ON