【发布时间】:2020-09-28 07:39:00
【问题描述】:
我有一个大型数据库,必须在较旧的 SQL Server 实例上重新创建。数据库保留了与旧服务器对应的兼容性级别设置。我知道,它不能保证完全的向后兼容性,但数据库架构最初是在考虑旧服务器版本的情况下创建和维护的。
这是我尝试过的:
- 备份->恢复;当然它不起作用,因为在较新的服务器版本上创建数据库备份时无法降级(哦微软,为什么 Compat 级别也不会生成兼容的备份?)
- DACPAC -> 未知原因失败,声称它缺少一些依赖对象(但它们存在于数据库中)
- 生成架构脚本 - 在较新的 SQL Management Studio(尝试 v17 和 v18)上失败
Microsoft.SqlServer.Management.Smo.SmoException: Cyclic dependencies found.。在较旧的 SQL Management Studio (2008) 上,它不会失败,但会生成一个包含错误顺序对象的脚本,因此在视图中引用的表之前创建视图,当然,执行这样的脚本会失败 - Visual Studio Schema 比较工具 - 失败并显示无意义的警告,并使更新按钮处于禁用状态
Cannot generate deployment plan due to an internal error: An error occurred during deployment plan generation. Deployment cannot continue.
这个问题是否有可行的(最好是免费的)解决方案?如何在另一台服务器上的空数据库上复制数据库架构?
源 SQL 服务器版本:2017
目标 SQL 服务器版本:2008 R2
数据库兼容级别:2008 (100)
【问题讨论】:
-
理论上是的。你有足够的代表知道如何提问。涉及的 SQL Server 版本有哪些?选择的兼容性设置是什么? (我可以看到您正在使用 SSMS 17 和 18 - 有助于了解)。
-
RE “在较旧的 SQL Management Studio 上,它会生成一个包含错误顺序对象的脚本,因此在视图中引用的表之前创建视图” - 假设使用
IF NOT EXISTS构造并且语句由GO,然后您可以简单地运行脚本几次,直到创建所有依赖对象。 (以前自己做过) -
@Alex 添加了版本号。但是,在查找错误时,我发现这些错误消息已经困扰 SQL Management Studio 多年,与 SQL Server 和数据库版本无关。不过,感谢有关“如果不存在”的提示-我将尝试在启用此设置的情况下运行。关于代表 - 所以似乎给予了太多的信任,我不应该得到那个:D
-
SSMS 有一个设置(高级->“服务器版本脚本”)来生成与早期版本兼容的脚本。这也可能会有所帮助。
-
是的,请随时将其添加为答案,我会将其标记为最佳答案。看来,目前没有其他更好的解决方案来解决这个问题。
标签: sql-server compare database-schema migrate