如何查看事务日志?

时间:2010-08-11 21:01:45

标签: sql sql-server sql-server-2005

我不确定交易日志是我需要的还是什么。

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

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

所以我不确定事务日志是否会告诉我发生了什么以及尝试插入哪些数据。我不能重新创建它总是对我有用的错误。

我的第二个问题是由于某种原因,当我的页面加载时,我从该数据库中有一行我认为不再存在(我有一个带有PK的隐藏列。)当我试图找到这个主要的密钥在数据库中不存在。

我正在使用ms sql 2005.

由于

3 个答案:

答案 0 :(得分:1)

我认为交易日志不会对您有所帮助。

关于如何插入具有唯一性违规的数据的SQL 2模式。 有一个设置:IGNORE_DUP_KEY。默认情况下它是OFF。如果将其打开,SQL将忽略重复的行,并且INSERT语句将成功。

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

顺便说一下,要查看事务日志,可以使用以下命令:

SELECT * FROM  fn_dblog(null, null)

答案 1 :(得分:1)

您可以使用(未​​记录的)函数fn_dblog()检查日志,但是在重复密钥违例的情况下它不会告诉您任何内容,因为违规发生之前行插入,因此不生成日志记录。虽然您在错误发生时会获得其他操作,但您可能会重新创建导致错误情况的操作,这是正确的。请注意,如果数据库处于SIMPLE恢复模型中,那么日志将被重用,您可能会忘记发生的任何事情。

有关fn_dblog()用法的示例,请查看本文How do checkpoints work and what gets logged。虽然它是一个不同的主题,但它显示了该功能的工作原理。

答案 2 :(得分:0)

如果您可以重复该错误,我建议使用SQL Server探查器,以便您可以确切了解发生了什么。

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