2010-05-31 56 views
2

我有一个SQL表,从中删除数据。没有人知道数据如何被删除。我添加了一个触发器并知道时间,但是没有正在运行的作业会删除数据。每当从这个表中删除行时,我也添加了一个触发器。然后,我将删除的行和SYSTEM_USER插入到日志表中,但这并没有多大帮助。有什么更好的办法可以知道谁以及数据如何被删除?是否有可能获得服务器ID或什么?感谢您的任何建议。谁删除了我的sql表行?

对不起:我使用SQL Server 2000中

**更新1 *:它的重要,了解数据如何被删除 - 最好是我想知道正在执行DTS包或SQL语句。

+0

什么RDBMS和版本? – 2010-05-31 19:49:45

+0

你打开日志记录了吗?这是MySQL吗?您始终可以嗅探网络流量,查看已连接到服务器的IP。 – barrycarter 2010-05-31 19:49:59

回答

0

更改所有密码。尽可能少地删除访问权限。

3

如果恢复模式设置为“完全”,你可以检查日志。

除此之外,删除对表格的删除授权。如果它仍然发生,谁在做它有root/dbo访问 - 所以更改密码...

5

只是一个猜测,但你有删除级联的父表之一(由外键引用)。如果是这样,当您删除父行时,子表中的条目也将被删除。

1

尝试记录所有暂时的交易,即使它损害了性能。 MS提供了一个mssql分析器,如果需要的话,包括快速版本。有了它,你应该能够记录交易。作为分析器的替代方案,您可以使用trace_build存储过程将活动转储到参考文件中,然后对'delete'或其他类似关键字的任何实例使用'ctrl-f'。欲了解更多信息,请参阅本SO页...

Logging ALL Queries on a SQL Server 2008 Express Database?

而且,这可能听起来很蠢,但调查的可能性,你看到的是不是删除。相反,调查记录是简单地'更新','如果已经存在'取代','插入',或者任何你喜欢称之为的东西。在Mysql中,这是'INSERT ... ON DUPLICATE KEY UPDATE'语句。我不确定MSSQL的变种。