2

大家好,我一直在研究这个问题一段时间,通常的谷歌搜索没有帮助:(

我在 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 用户所有。

有什么建议么?

4

6 回答 6

2

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

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

再次感谢那些提供建议的人

于 2008-10-15T04:10:09.770 回答
0

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

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

于 2008-10-15T01:58:52.530 回答
0

感谢您的回复 hectorsosajr。

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

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

于 2008-10-15T02:12:57.980 回答
0

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

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

看看这个链接是否能帮助你找到你的依赖问题。

于 2008-10-15T02:41:07.143 回答
0

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

于 2008-10-15T02:52:07.137 回答
0

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

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

于 2008-10-15T03:47:00.863 回答