SQL Server数据库中的数据消失

3
我遇到了一个问题,我的Web应用程序使用Entity Framework连接到SQL Server数据库。在随机时间间隔内,其中一个表的数据一直被清空。约有90%的数据被删除。
我们已经仔细检查了Web应用程序,并且根本找不到任何删除语句,更不用说那个表上的删除语句了。
我们已经运行了SQL Server Profiler,但它没有捕获到任何删除语句。然而,我在这个表上也有一个ON DELETE触发器来将删除的数据复制到备份表中,这可以正常运行并触发,因此似乎存在关于是否实际运行了删除语句的冲突。服务器上还有数百GB的空间,因此空间不足不是问题。
我们已经尽力调查了这个问题,但是无法找到解决方法,现在我们已经没有任何想法了。
因此,如果有人知道任何可能导致这种情况发生的原因,我将非常感激任何帮助。
提前致谢。

我不明白你所说的关于on delete触发器冲突的意思。如果你的on delete触发器没有捕获到所有已删除的记录,那么就有可能是有人禁用了该触发器。 - GuidoG
2
你的数据库中是否有使用级联删除的外键?在我看来,应该禁止使用级联删除。 - GuidoG
一个想法而不是一个正确的答案:它可能是一个MERGE吗?我曾经遇到过糟糕编写的MERGE,它们会意外删除东西。我不确定它们是否需要在分析器中进行不同的跟踪,但值得一看。 - Jo Douglass
@JoDouglass,你能详细解释一下MERGE以及它可能引起的问题吗?这是我们以前从未遇到过的。 - DaRoGa
1
如果您错误地编写了连接条件,MERGE 将会表现得好像源中缺少行,并导致 WHEN NOT MATCHED BY SOURCE 触发。 - Jo Douglass
显示剩余7条评论
1个回答

1

您应该检查是否有级联删除。以下查询可以帮助您进行检查:

SELECT name, 
       delete_referential_action_desc
FROM   sys.foreign_keys

我不知道实体框架是否可以拥有自己的级联删除功能,因为我不使用它。因此,我不知道如何检查实体框架的级联删除。


这个查询对于所有的外键都返回NO_ACTION,因此我认为没有级联删除?在EF方面,我已经检查过了,它已经全部关闭了。感谢有用的查询。 - DaRoGa
是的,这意味着级联删除不是您问题的根源。我现在没有任何其他想法可以寻找您的问题,抱歉。 - GuidoG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接