代码之家  ›  专栏  ›  技术社区  ›  chobo2

如何查看事务日志?

  •  2
  • chobo2  · 技术社区  · 15 年前

    我不确定事务日志是我需要的还是什么。

    我的第一个问题是我有一个插入一些行的存储过程。我刚检查了Elmah,发现发生了一些SQL异常。它们都是相同的错误(违反了pk约束)。

    除此之外,埃尔玛没有告诉我更多。所以我不知道是哪一行导致了这个主键约束(我猜出于某种原因,同一行被添加了两次)。

    因此,我不确定事务日志是否会告诉我发生了什么以及试图插入什么数据。我无法重新创建此错误,它始终适用于我。

    我的第二个问题是,由于某种原因,当我的页面加载时,我有一行数据库中我认为不存在的行(我有一个隐藏列,其中包含pk)。当我试图找到这个主键时,它在数据库中不存在。

    我正在使用MS SQL 2005。

    谢谢

    3 回复  |  直到 15 年前
        1
  •  1
  •   TTRider    15 年前

    我认为事务日志对您没有帮助。

    有关如何插入具有唯一性冲突的数据的SQL 2模式。 有一个设置:忽略重复键。默认情况下,它处于关闭状态。如果您打开它,SQL将点燃重复的行,您的insert语句将成功。

    您可以在这里阅读: http://msdn.microsoft.com/en-us/library/ms175132.aspx

    btw,要查看事务日志,可以使用以下命令:

    SELECT * FROM  fn_dblog(null, null)
    
        2
  •  1
  •   Remus Rusanu    15 年前

    您可以使用(未记录的)功能检查日志 fn_dblog() ,但在发生重复的密钥冲突的情况下,它不会告诉您任何信息,因为发生了冲突 之前 该行已插入,因此不会生成日志记录。是真的,尽管你会 其他 在发生错误时的操作以及从这些操作中可能重新创建导致错误条件的操作。注意,如果数据库是在简单恢复模型中,那么日志将被重用,您可能会丢失发生的任何事情的跟踪。

    看看这篇文章 How do checkpoints work and what gets logged 例如fn_blog()的用法。虽然主题不同,但它显示了函数的工作方式。

        3
  •  0
  •   madcapnmckay    15 年前

    如果您可以重复这个错误,我建议您使用SQL Server事件探查器,这样您就可以准确地看到发生了什么。

    如果使用ASP.NET加载页面,是否使用可能保留数据库中不再存在的行的任何输出缓存或数据缓存?