【发布时间】:2010-10-07 09:58:39
【问题描述】:
是否可以将 SQL Server 2008 数据库的备份恢复到 SQL Server 2005 实例上?
我需要处理一个数据库备份在 sql server 2008 中的示例应用程序。 但是我将无法安装 2008。那么是否可以在 2005 中恢复该备份?
【问题讨论】:
标签: sql sql-server-2005 sql-server-2008
是否可以将 SQL Server 2008 数据库的备份恢复到 SQL Server 2005 实例上?
我需要处理一个数据库备份在 sql server 2008 中的示例应用程序。 但是我将无法安装 2008。那么是否可以在 2005 中恢复该备份?
【问题讨论】:
标签: sql sql-server-2005 sql-server-2008
【讨论】:
所有答案都缺少一件重要的事情,那就是在 SSMS 中生成脚本没有正确排序脚本。
必须以正确的依赖顺序对脚本进行排序,以便在父表等之后创建子表。
这对于小型数据库来说不是问题,因为它很容易手动重新排序脚本,但在处理具有 100 多个对象的数据库时可能是一个大问题。
我的经验是使用可以读取备份并以正确顺序生成脚本的第三方工具最方便。我正在使用来自 ApexSQL 的 ApexSQL Diff 和 Data Diff,但任何流行的供应商都不会出错。
【讨论】:
不,不是直接的。 SQL Server 2008 数据库备份不向后兼容 SQL Server 2005。但是,使用 SQL Server 2008 Management Studio,您可以在 SQL Server 2005 模式下编写数据和架构脚本。这个article 详细描述了这个过程。
【讨论】:
有可能
在 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
完成。
【讨论】:
这个问题我很久了。
您无法将 SQL2008 备份恢复到 SQL2005 实例。
对我来说,诸如导入/导出向导或使用带有 for SQL2005 选项的生成脚本从 SQL2008 编写数据库脚本之类的解决方法将不起作用。 因为简单地说,我的数据库在它们的视图和存储过程或 udf 中相互交叉引用。它们不完全属于我的责任,因此我无法将它们合并到 1 个数据库中。 它们是一组 6 个 db,直接在它们的视图和存储过程中相互引用。 当我将它们从一个 SQL2005 实例转移到另一个实例时,我通常会进行完整备份/恢复。
如果我要为它们编写脚本,即使使用 with dependencies 选项,我也会在重新创建时遇到错误,因为 db1 不会在 db3 中找到视图,因为碰巧我先执行了 create db1 脚本。如果我先尝试 db3,我会遇到类似的异常。
编写脚本以便我不会出现此类依赖项异常的唯一方法是找出一个有效的序列并以这种方式部分编写脚本:例如:db1_tables 后跟 db2_tables 后跟 db2_views 后跟 db1_views,sp , udfs 等。
我有这样的序列。而当我需要创建一组新的这样的 6 个 dbs 时,我会依次执行较小的部分脚本。
这解释了为什么带有依赖项和数据并设置为 SQL2005 版本脚本的生成脚本对我不起作用。
在我的情况下,导入/导出向导更好,因为它会复制表,然后您仍然需要编写所有视图、sp、udfs 等脚本。
我真正需要的是一个SQL2008备份文件的转换工具,将它们转换为SQL2005格式。然后我的问题就会消失。 或者某种允许从 SQL2008 完整备份文件中恢复的工具,而不用问我太多问题。
如果有人知道并使用过这些工具,请告诉我。
【讨论】:
您可以使用DBSave,它是一个很棒的免费软件工具,可以在不同的机器上备份和恢复ms sql server。 设置和使用都非常简单。
【讨论】:
不,你不能,但是像 red Gate 的 SQL 比较/数据比较这样的工具可以直接读取备份文件并将信息传输到实时数据库,处理与 SS2005 不兼容的任何语法或设置
【讨论】:
在导入/导出方面没有运气(平面文件导出在导入时失败,声称字符集映射问题 [即使始终使用相同的字符集] 和/或截断问题 [即使源和目标具有完全相同的结构]),并且没有使用“生成脚本”选项suggested by Garry Shutler(它生成了一个有语法错误的脚本),我终于能够复制我想从 2008 年到 2005 年复制的大表使用SQL Server bcp utility。所以这是这种情况的另一种选择,尽管对于整个数据库来说,它是逐表的,并且可能对视图等没有帮助。
我使用的步骤:
在源服务器上,使用“Script Table As...CREATE”获取结构,然后在目标服务器上运行。
在目标服务器上,使用您新创建的表创建一个bcp 格式文件:
bcp database.owner.table 格式 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。)
希望这对其他人有用。
【讨论】: