追踪神秘更新SQL的提示?

时间:2010-11-13 00:11:20

标签: sql sql-server debugging

我刚开始一份新工作,并且有一个错误来追踪并修复。基本问题是DB记录中的字段被清除,没有人知道原因。到目前为止,我已经尝试过:

  • 检查表格中的触发器, 没有。
  • 使用SQL监控表 最后一对的服务器分析器 希望错误的日子 将会再次发生但不幸的是 它没有。
  • 查看所有代码 插入/更新,我没有看到 任何导致这种情况的事情 问题。

有没有人有任何其他建议可以找到可以更新此记录的内容?我不是在检查我应该做的事吗?我应该看一下其他任何信息来源吗?

4 个答案:

答案 0 :(得分:2)

创建一个将写入历史记录表的触发器。包括写日期和用户的列。

答案 1 :(得分:2)

:: fn_dblog()将至少显示更新发生的时间(序列,而不是时间)以及该事务执行的其他操作。根据此事务所执行的其他操作以及此时其他事务正在执行的操作的信息,您应该能够至少缩小更新发生的上下文,从这一点开始代码检查是可行的选择。

读取日志需要...日志,因此您的数据库应处于完全恢复模式。

答案 2 :(得分:0)

select
schema_name = s.name,
object_name = o.name
from sys.sql_modules m join sys.objects o on m.object_id = o.object_id
    join sys.schemas s on o.schema_id = s.schema_id
where definition like '%FieldName%'

此查询查看数据库中的所有对象(存储过程,函数,视图),并查找引用“FieldName”的任何位置。我将浏览此查询返回的所有对象,以查看是否有任何异常的字段。这可能是非常繁琐的,因为它可能会返回比您关心的更多结果,但它确实可以捕获所有对该字段的引用

答案 3 :(得分:0)

如果您使用的是SQL Server 2008,则可以使用扩展事件来获取有问题的语句的完整堆栈跟踪。示例代码Create Trigger to log SQL that affected table?