是否可以将SQL Server 2008数据库的备份还原到SQL Server 2005的实例上?
我需要处理sql server 2008中数据库备份的示例应用程序。 但是我无法安装2008年。那么有可能在2005年恢复这种状态吗?
答案 0 :(得分:35)
没有。无法从较新版本的备份还原数据库。
如果您已经死定,我认为您最好的选择是在SQL 2008中的对象资源管理器中选择数据库, 右键单击,选择任务 - >生成脚本。在选项对话框中可以查看所有内容,包括脚本数据。
并确保选择“Script for SQL 2005”。
将对象导入目标服务器时,如果对象很大,您可能会发现无法通过Management Studio打开SQL文件(完全没用“操作无法完成”错误,不能少) 。没关系,只需通过sqlcmd
加载文件。
答案 1 :(得分:6)
所有答案都缺少一个重要的事情,那就是SSMS中的Generate Scripts没有正确排序脚本。
必须以正确的依赖顺序对脚本进行排序,以便在父表等之后创建子表。
对于小型数据库而言,这不是一个问题,因为它很容易手动重新排序脚本,但在处理具有100多个对象的数据库时,这可能是个大问题。
我的经验是,使用第三方工具最方便,可以按正确顺序读取备份和生成脚本。我正在使用来自ApexSQL的ApexSQL Diff和Data Diff,但是对于任何受欢迎的供应商都不会出错。
答案 2 :(得分:5)
不,不是直接的。 SQL Server 2008数据库备份不与SQL Server 2005向后兼容。但是,使用SQL Server 2008 Management Studio,您可以在SQL Server 2005模式下编写脚本数据和模式。这个article详细描述了这个过程。
答案 3 :(得分:4)
是的,有可能
在SQL Server 2008中使用导出。转到All Programs
- > Microsoft SQL Server 2008
- > Import and Export Data
然后会打开SQL Server Import AND Export Wizard
窗口。按Next
选择一个数据源(在您的情况下来自SQL Server 2008)。选择目标(在您的情况下从SQL Server 2005)。
选择Copy data from one or more tables or view
选择来源的表格和目的地的表格
点击Next
& Finish
完成。
答案 4 :(得分:4)
我已经有这个问题很久了。
您无法将SQL2008备份还原到SQL2005实例上。
对我来说,像导入/导出wizzard这样的解决方法或者使用带有for SQL2005选项的生成脚本从SQL2008编写数据库脚本将不起作用。 因为简单地说,我的数据库在它们的视图和存储过程或udfs中相互交叉引用。他们完全没有完全履行我的责任,因此我无法将它们整合到一个数据库中。 它们是一组6个dbs,它们直接在视图和存储过程中相互引用。 当我将它们从一个SQL2005实例转移到另一个实例时,我通常会进行完全备份/恢复。
如果我要编写脚本,即使使用with dependencies选项,我也会在重新创建时遇到错误,因为db1将无法在db3中找到视图,因为我首先执行了create db1脚本。如果我先尝试db3,我会得到类似的例外。
编写脚本以使我不会有这样的依赖性异常的唯一方法是找出一个有效的序列并以这种方式部分编写脚本:比如:db1_tables后跟db2_tables,后跟db2_views,后跟db1_views,sp ,udfs等。
我有这样一个序列。当我需要创建一组这样的6个dbs时,我按顺序执行了较小的部分脚本。
这就解释了为什么生成具有依赖关系和数据并设置为SQL2005版本脚本的脚本对我不起作用。
导入/导出wizzard在我的情况下更好,因为它将复制表,然后你仍然需要编写脚本所有视图,sp,udfs等。
我真正需要的是SQL2008备份文件的转换工具,将它们转换为SQL2005格式。然后我的问题就会消失。 或者某种工具可以从SQL2008完整备份文件中恢复,而不会问我太多问题。
如果有人知道这些工具并使用过它们,请告诉我。
答案 5 :(得分:1)
你可以使用DBSave,这是一个很棒的免费工具,可以在不同的机器上备份和恢复ms sql server。 设置和使用非常简单。
答案 6 :(得分:0)
不,你不能,但像红门的SQL比较/数据比较这样的工具可以直接读取备份文件。将信息传输到实时数据库,处理SS2005上不兼容的任何语法或设置
答案 7 :(得分:0)
导入/导出的东西没有运气(平面文件导出失败导入索赔字符集映射问题[即使整个使用相同的字符集]和/或截断问题[即使源和目标具有完全相同的结构]),并且没有运气使用“生成脚本”选项suggested by Garry Shutler(它生成了一个语法错误的脚本),我终于能够复制我想要从2008年复制的大表使用SQL Server bcp
utility到2005年。所以这是这种情况的另一个选择,虽然对于整个数据库来说,它将是逐个表的,并且可能对视图等没有帮助。
我使用的步骤:
在源服务器上,使用“Script Table As ... CREATE”获取结构,在目标服务器上运行该结构。
在目标服务器上,使用新创建的表创建bcp
格式文件:
bcp database.owner.table format nul -f table.fmt -n
(如果您未使用Windows身份验证,则可能需要-U
和-P
选项来指定用户名和密码。)
将该格式文件复制到源服务器(如有必要)。
将数据导出到源服务器上的文件:
bcp database.owner.table out table.dat -f table.fmt
(同样,可能包含-U
和-P
。)
将数据文件复制到目标服务器(如有必要)。
导入目标服务器上的数据:
bcp database.owner.table in table.dat -f table.fmt
(同样,可能包含-U
和-P
。)
希望证明对别人有用。