SQL DTS数据库副本失败

时间:2008-10-15 01:30:58

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

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

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

有什么建议吗?

6 个答案:

答案 0 :(得分:2)

我感到很愚蠢,但是我发布了我刚刚为子孙后代找到的答案(所以你们所有有帮助的人都可以代表我停止压力。

即使我选择了要复制的所有用户表,视图,存储过程和用户​​定义的函数,我也没有选择“包括所有依赖对象”。我假设如果您选择了两个要复制的对象,而另一个依赖于另一个,则SQL将始终按正确的顺序执行。显然不是。选中这个小小的复选框就完全不同了。

再次感谢那些帮助过建议的人

答案 1 :(得分:0)

DTS包找不到dbo.vwEstAssetStationAddress表。不幸的是,该消息并未说明它是否在源或目标上找不到它。

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

答案 2 :(得分:0)

感谢hectorsosajr的回复。

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

DTS中的数据库对象复制任务不允许您指定它传输内容的顺序。据我所知,它使用sysdepends表来确定事件的必需顺序。

答案 3 :(得分:0)

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

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

查看this link是否可以帮助您找到依赖项问题。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

凯德 - 我会查看该链接。我还将尝试建立引用视图和破坏的内容。