【问题标题】:Restore SQL Server 2008 database to SQL Server 2000将 SQL Server 2008 数据库还原到 SQL Server 2000
【发布时间】:2010-12-17 05:15:29
【问题描述】:

我必须将整个数据库从 SQL Server 2008 机器移动到 SQL Server 2000 机器。

我使用 Management Studio 2008 创建了一个备份,将其复制到 2000 机器的硬盘驱动器,然后从 Management Studio 2008 中选择将数据库还原到 2000 机器。

我收到一条错误消息,指出“设备上的媒体系列...格式不正确。SQL Server 无法恢复此媒体系列”。

如果我使用 Enterprise Manager 2000,我会遇到同样的错误。

有没有办法将整个数据库从较新的 SQL 服务器移动到较旧的 SQL 服务器?

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2000


    【解决方案1】:

    我唯一能想到的就是重新创建整个结构,然后从实时数据库中复制数据。因此,创建将创建表、视图和 sp 的脚本,然后创建脚本以从现有数据库中复制数据。

    【讨论】:

    • 我自己刚刚完成了这项工作。我发现这样做的唯一方法是编写整个数据库(包括数据)的脚本并在目标机器上运行脚本。现在,这很痛苦,因为 2008 DB 可能会创建一个无法在 2000 上运行的脚本(好吧,我的确实如此),所以您需要在运行 2000 之前编辑生成的脚本。在开始之前储备 Tylenol。祝你好运。
    • 是的,这是唯一的方法。 SQL Server 从未向后兼容,例如您永远无法将新版本恢复到旧服务器。我认为这不会改变
    【解决方案2】:

    正如其他人已经说过的那样,没有默认方法可以做到这一点。只是不支持。以下是有关如何正确执行此操作并避免任何迁移问题的更多详细信息。

    您需要为结构和数据生成脚本,然后在 SQL 2000 上执行这些脚本(就像其他人已经说过的那样),但有几件事情需要考虑。

    在 SSMS 中生成脚本

    • 确保选中 SQL 2000 脚本数据选项,以避免在 SQL 2000 上尝试创建类似地理类型列的内容时出现问题。
    • 确保检查脚本的执行顺序以避免基于依赖的错误

    这对于中小型数据库来说是一个很好的选择,并且需要一些 SQL Server 知识(依赖关系、版本之间的差异等)

    第三方工具

    • 想法是使用第三方数据库比较工具,例如 ApexSQL DiffData Diff
    • 好的一面是这些将处理脚本执行和版本之间的差异
    • 试用期结束后您需要支付这些费用的事实不太好
    • 我已经成功使用了这两个工具,但是市场上的任何其他工具都不会出错。 Here 是该类别中其他工具的列表。

    【讨论】:

      【解决方案3】:

      您不能将备份从较新版本移动到较旧版本,在这种情况下,您可以编写数据库脚本,在 2000 框中执行它,然后您可以使用标准数据传输来传输您想要的任何数据

      【讨论】:

        【解决方案4】:

        假设您在使用 SSIS 的机器之间有网络连接。容易得多,也少了很多麻烦。

        【讨论】:

          【解决方案5】:

          您可以为您的数据库使用脚本生成器,然后在属性表单中选择:General-> Script for server version:SQL Server 2000。

          脚本生成器会显示与您的服务器版本不兼容的内容。

          【讨论】:

            【解决方案6】:

            我听说您只能通过从数据库管理员工具生成 SQL 语句转储并在目标旧数据库上重新运行这些查询来做到这一点。

            【讨论】:

            • 当然,您必须手动操作它们,因为脚本工具会放入 2000 无法识别的东西。
            【解决方案7】:

            您可以生成一个脚本,该脚本将重新创建所有对象并传输所有数据...只要数据库中的所有内容在 SQL 2000 中都有效。所以没有 ROW_NUMBER()、没有 PARTITION、没有 CTE、没有 datetime2,层次结构或其他几种字段类型,没有 EXECUTE AS,以及许多其他优点。基本上,除非您的数据库非常基础,否则很有可能这是不可能的。

            【讨论】:

              【解决方案8】:

              我们遇到了类似的情况。一个技术含量很低但很方便的解决方案是:

              1. 备份和截断 SQL 2000 中的表。
              2. 在 SQL 2008 中创建一个 LINKED 服务器,指向 SQL 2000
              3. 在 sysobjects 上运行选择查询以生成insert into LINKED SERVER.table select * from table 的查询脚本
              4. 执行查询脚本。

              【讨论】:

                猜你喜欢
                • 2010-12-12
                • 1970-01-01
                • 2023-04-04
                • 2013-02-08
                • 1970-01-01
                • 2010-09-29
                • 2014-09-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多