我无法连接我的数据库。当我试图在中附加数据库时,会得到以下错误:
数据库“C:\FILES\ACCOUNTING.MDF”无法打开,因为它是904版本。此服务器支持852及更早版本。不支持降级路径。无法打开新数据库“C:\FILES\ACUNTING.MDF”。CREATE数据库被中止。(.Net SqlClient数据提供程序)
我试过这样的命令:
cd "C:\Program Files\Microsoft SQL Server\130\LocalDB\Binn"
SqlLocalDB.exe delete "MSSQLLocalDB"
SqlLocalDB.exe create "MSSQLLocalDB"
但它仍然有一个错误
发布于 2020-03-07 07:27:13
不能这样做--不能将数据库从更新的Server版本 (v904 = Server 2019)附加/分离或备份/还原到旧版本 (v852,即Server 2016)--内部文件结构太不一样,无法支持向后兼容性。
你要么把这个问题解决掉
发布于 2020-03-07 09:44:20
出现问题语句中的错误消息是因为Server数据库文件(*.mdf、*.ndf和*.ldf)和备份不向后兼容。向后兼容性是我们无法还原或附加从Server的较高版本创建的数据库到Server的较低版本的原因。但是,有一些选项可以帮助我们将数据库从较高版本的Server降为较低版本的Server。这些备选办法包括:
在中使用,使用,创建自定义脚本和BCP,在本技巧文章中,我们将在中使用。
以下是我们需要遵循的基本步骤:
使用SSMS中的“生成脚本向导”从Server的较高版本中编写数据库架构和数据。连接到Server的较低版本,并运行在上一步中生成的SQL脚本,以创建数据库架构和数据。在下一节中,我将演示将Server 2012数据库降级为Server 2008 R2数据库的步骤。
使用SSMS生成脚本向导降级Server数据库的步骤
步骤1脚本SQLServer2012实例(IITCUK\DEV01 01)上的OUTLANDER数据库的架构,使用SSMS中的Generate向导。 在对象资源管理器连接到IITCUK\DEV01 01中,右键单击OUTLANDER数据库,展开任务并选择“GenerateScripps..net.”。
这将启动“生成和发布脚本向导”。单击“下一步”,跳过“介绍”屏幕并继续到“选择对象”页面。
在“选择对象”页面上,选择“脚本整个数据库和所有数据库对象”选项,然后单击“下一步”继续进行“设置脚本选项”页面。
在“高级脚本选项”对话框中,
将“服务器版本的脚本”设置为“表/视图”选项下的Server 2008 R2 (或任何版本),“设置脚本触发器”、“脚本索引”和“脚本主键”设置为“真”,并将数据类型设置为“架构”和“数据”--最后一个选项是关键,因为这是每个表生成数据的内容。
完成后,单击OK,关闭“高级脚本选项”对话框并返回到“设置脚本选项”页面。在“设置脚本选项”页中,单击“下一步”继续“摘要”页。
查看“摘要”页面上的选择后,单击“下一步”生成脚本。
成功生成脚本后,选择Finish按钮关闭“生成和发布脚本”向导。
步骤2连接到Server 2008 R2实例(IITCUK\Server 2008),然后运行在步骤1中生成的脚本,以创建OUTLANDER数据库架构和数据。 在对象资源管理器连接到IITCUK\ Server 2008中,然后在中,打开步骤1中保存的Server脚本
修改脚本,以指定OUTLANDER数据库数据和日志文件的正确位置。完成之后,运行脚本在IITCUK\SQLServer2008 2008实例上创建OUTLANDER数据库。
成功执行后,刷新对象资源管理器中的数据库文件夹。如下图所示,OUTLANDER数据库已成功降级。
Notes在使用这种方法时有几件事需要注意。
此解决方案创建一个大型SQL文件,该文件具有创建数据库对象的脚本,并为表中的数据插入语句。对于大型数据库,如果同时编写模式和数据,SQL文件可能会变得非常大,并且很难加载到编辑器中。此外,如果文件太大,您可能会从编辑器获得与内存相关的错误消息。对于大约1GB或更多的大型数据库,如果这种方法不起作用,那么您应该考虑使用SSIS迁移数据库或创建自定义脚本来为每个表写出对象和BCP数据。您可以使用“生成脚本向导”只生成没有数据的架构,并使用SSIS或BCP导出和导入数据。此方法适用于Server 2017至Server 2005。在新版本中,有些脚本选项可能有些不同,但过程仍然相同。在执行脚本之前,您应该检查脚本,以确保所有内容看起来都是正确的,如数据库文件的路径、数据库选项等。此外,如果您使用的是低版本中不存在的新功能,则Server将无法创建对象,您将需要检查生成的脚本并相应地更新代码。对于一个非常简单的数据库,这种方法应该非常容易操作,但是您可能需要花费一些时间对脚本进行一些修改,以获得更复杂的数据库。下面是所有脚本选项的列表。如果单击某一项,屏幕底部将为您提供该选项的简短定义。
下一步要避免此问题,请始终确保在将Server和数据库升级到更高版本的Server之前执行数据库的完整备份。此外,在向用户发布应用程序之前,一定要彻底测试应用程序。将此降级选项视为从升级中回滚的最后一个选项,因为所需时间和存储可能非常大。对于一个非常大的数据库,请确保您有足够的存储空间来支持数据需求。在发布到生产之前,一定要验证行和对象计数,并测试应用程序。
https://stackoverflow.com/questions/60575236
复制相似问题