Sop*_*are 18 t-sql sql-server transactions
这是我在生产服务器上遇到的一个奇怪的问题.它在过去两周内发生了两次,这是一个获得大量流量的服务器.
我们在Web服务中有一些代码执行a BEGIN TRAN
,然后运行一些SQL查询(两个插入后跟一个更新).然后在最后执行一个COMMIT
.现在我们两次在日志中收到消息:
COMMIT TRANSACTION请求没有相应的BEGIN TRANSACTION.
在前两个插入和更新之间,我们调用另一个Web服务,因此在调用前两个插入和最后一次更新之间可能会略有延迟COMMIT
.这会导致我们的问题吗?我们在IIS 7和Server 2008 R2上运行此操作(已应用所有更新).
最初我们虽然它可能是应用程序池被回收,但改为在半夜回收.现在我不确定是什么原因导致SQL服务器忘记调用BEGIN TRAN
.
这个Web服务确实被调用了很多.以前有人见过这样的东西吗?我现在完全失去了......
任何帮助或建议都非常赞赏!
SQL*_*ace 32
看起来您的事务失败,回滚并且没有任何提交
这样的事情的例子
CREATE TABLE BlaTest(id INT PRIMARY KEY NOT NULL)
GO
Run Code Online (Sandbox Code Playgroud)
现在运行它
BEGIN TRAN
INSERT BlaTest VALUES('a')
GO
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
这是错误
Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value 'a' to data type int.
Msg 3902, Level 16, State 1, Line 2
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
Run Code Online (Sandbox Code Playgroud)
这将毫无问题地运行
BEGIN TRAN
INSERT BlaTest VALUES(5)
GO
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
有关事务的好文章是Erland Sommarskog 在SQL 2005及更高版本中的错误处理
归档时间: |
|
查看次数: |
62250 次 |
最近记录: |