失败的复制作业删除所有用户

use*_*972 6 sql-server-2005 sql-server

由于这件事的进展在第一次显然有些难以理解:

我使用带有分离/重新连接方法的复制数据库向导尝试了一个完全无聊的、已经完成了数千次的数据库复制。

复制失败。日志表明它无法对CREATE VIEW特定视图执行操作,因为该视图的数据源不存在。这本身就很有趣,因为源肯定存在,并且有问题的视图在数据库中完全可用。我还不太清楚这有多重要,因为我还没有弄清楚为什么会产生错误。

这导致从数据库中删除所有非系统用户关联,留下用户 dbo、information_schema、sys 和 guest。非系统角色也被删除。架构不受影响。

我已经从备份中恢复了损坏的数据库。然而,在学术上,我想知道以下几点:

  1. 为什么失败的复制操作会从数据库中剥离用户关联?
  2. 是否可以在源数据库上执行任何类型的维护/重建/修复操作来修复它?
  3. 用户的流失是显而易见的,但鉴于失败的复制作业的相当神秘的性质显然会损坏数据库,我应该如何担心不太明显的影响?从理论上讲,我希望从备份中恢复可以减轻这种担忧,但是我有什么理由担心,例如,主数据库吗?

这是完全可重复的。为了试验这个特定问题,我制作了一些副本(手动),在每种情况下,失败的复制作业都会从数据库中删除用户和角色。

删除产生错误的视图允许复制完成,并且正如人们所期望的那样,除了保持源数据库不变之外,还生成具有相同数据、用户等的副本。

如果这很重要,我已经尝试重建系统数据库的索引以及损坏的数据库,但没有明显效果。

产生的错误:

1:00:25 PM,5/28/2013 1:00:25 PM,0,0x,ERROR : errorCode=-1073548784 description=Executing the query "CREATE VIEW [Sourcing].[PermittedArrProducts]
AS
SELECT     dbo.tblArrProducts.ArrProductID, dbo.tblArrProducts.ArrangementID, dbo.tblArrProducts.ContainerTypeID, dbo.tblArrProducts.Quantity
FROM         Sourcing.PermittedArrangements INNER JOIN
                      dbo.tblArrProducts ON Sourcing.PermittedArrangements.ArrangementID = dbo.tblArrProducts.ArrangementID

" failed with the following error: "Invalid object name 'Sourcing.PermittedArrangements'.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
Run Code Online (Sandbox Code Playgroud)

use*_*972 1

因此,在马克提出上述问题之后,我用更通用的术语进行了更多搜索(基本上忽略了用户的损失,只关注复制作业失败的事实),并遇到了这个线程这个线程,以及这条线索似乎与我所经历的一切非常接近。这让我发现,虽然视图在使用中起作用,但它们的依赖关系不再被标记,这就是导致复制作业失败的原因。

虽然我仍然有点好奇为什么失败的复制作业会清除源数据库中的用户(以及为什么它似乎“卡在”SMO 模式下),但我认为这或多或少应该回答我的问题。感谢大家。