【问题标题】:SQL DTS Database Copy FailsSQL DTS 数据库复制失败
【发布时间】:2010-09-17 05:39:22
【问题描述】:

大家好,我已经解决这个问题一段时间了,通常的谷歌搜索没有帮助:(

我在 SQL 2000 中有一个生产数据库。我想将它复制到训练数据库的顶部以刷新它。我希望这是计划每周发生一次的事情,以使培训数据库保持最新状态。

我为此创建了一个 DTS 作业。在该 DTS 作业中,我有一个“复制 SQL Server 对象”任务。该任务设置为:

  • 创建所有复制的对象
    • 首先删除目标对象
  • 复制数据
    • 替换现有数据
  • 复制索引、触发器、主键和外键
  • 复制所有用户表、视图、函数和存储过程。

当我运行这个 DTS 包时(当然是在预生产中进行测试),它完成了 99% 并抛出以下错误:

Step Error Source: Microsoft SQL-DMO (ODBC SQLState: 42S02)
Step Error Description:[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'dbo.vwEstAssetStationAddress'.
Step Error code: 800400D0
Step Error Help File:SQLDMO80.hlp
Step Error Help Context ID:1131

我在网上搜索并没有提供太多帮助。有报道称这些错误会受到影响,但似乎没有一个符合我的情况。我发现的一个建议是 sysdepends 表已损坏,导致 DTS 作业以错误的顺序运行其脚本。但是,我运行了以下脚本来更正该表,但它仍然抛出相同的错误:

USE master
GO
ALTER DATABASE [DATABASE NAME]
SET SINGLE_USER
GO

USE [DATABASE NAME]
GO

DBCC CHECKTABLE('sysdepends',REPAIR_REBUILD )
GO

USE master
GO
ALTER DATABASE [DATABASE NAME]
SET MULTI_USER
GO

我还看到拥有不同的对象所有者可能会导致此错误。但我已经确认,在这种情况下,这些对象都归 dbo 用户所有。

有什么建议吗?

【问题讨论】:

    标签: sql-server sql-server-2000 dts


    【解决方案1】:

    我觉得自己很愚蠢,但我将我刚刚找到的答案发布给后人(所以所有有帮助的人都可以停止代表我的压力。

    尽管我选择了所有要复制的用户表、视图、存储过程和用户​​定义函数,但我没有选择“包括所有相关对象”。我曾假设如果您选择两个对象进行复制,并且一个依赖于另一个,SQL 将始终以正确的顺序执行它们。显然不是。选中这个小复选框让一切变得不同。

    再次感谢提供建议的人

    【讨论】:

      【解决方案2】:

      不知何故,您的 DTS 包找不到 dbo.vwEstAssetStationAddress 表。不幸的是,该消息没有说明它是在源还是目标上找不到它。

      具体步骤是什么,按照您在 DTS 包中的顺序排列?我假设上面的任务项列表不按顺序排列。我知道这不是答案,但看起来我们需要更多信息来进一步帮助您。

      【讨论】:

        【解决方案3】:

        感谢 hectorsosajr 的回复。

        导致错误的对象 (dbo.vwEstAssetStationAddress) 是一个引用 2 个基础表的视图。我已经在源数据库和目标数据库上测试了查询视图,以及运行定义它的 SELECT 语句,它工作正常。

        DTS 中的数据库对象复制任务不允许您指定它传输事物的顺序。据我了解,它使用 sysdepends 表来确定事件的必要顺序。

        【讨论】:

          【解决方案4】:

          我试图避免通过备份/恢复来做到这一点。有一些数据库用户是 SQL Server 帐户(不是 Active Directory)。这变得很痛苦,但是如果您需要从一台服务器到另一台服务器,因为您必须删除这些用户并重新创建它们。

          【讨论】:

          • 试试我添加到我的答案的链接 - 它可能会帮助你隔离你的依赖问题。
          【解决方案5】:

          听起来它正在尝试基于尚不存在的视图创建存储过程/视图。

          为什么不使用不同的名称备份和恢复数据库? (如果不是生产,我会说分离、复制和重新附加)。您可以在 T-SQL 的控制下完成所有这些工作。

          看看this link 是否能帮助你找到你的依赖问题。

          【讨论】:

            【解决方案6】:

            我已经运行了另一个测试来尝试隔离它。我从目标数据库中完全删除了上述视图,然后再次运行 DTS。它因同样的错误而失败。但是,显然是无效对象名称的视图已成功重新创建。似乎错误来自试图引用该视图的东西,但它实际上并没有在遇到该错误时停止脚本。

            Cade - 我会检查那个链接。我还将尝试确定引用视图和破坏的内容。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-03-16
              • 1970-01-01
              • 2011-08-13
              • 1970-01-01
              • 2011-06-12
              相关资源
              最近更新 更多