.net core 事务出现The operation is not valid for the state of the transaction.

解决方法:TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 5, 0))//五分鐘。預設是一分鐘。

1.没事不要用TransactionScope,这玩意并不像文档里说的那样,只有"必要"的情况下,才会
升级本地事务到分布式事务.实际情况是:在Scope中,只要你打开两条连接,就算是这俩连接
都是相同的数据库,也会发生分布式事务.据说,同样的操作,分布式事务要慢上10倍.

2.TransactionScope被Abort时(比如Timeout),不会释放它持有的连接.这是一个bug,内部有
一个hotfix出来,但是还没有发布。

3.在比较大的负载情况下(不大的情况也有,但是少.不能确认是否是负载的问题.),可能会存
在System.Transactions.CommittableTransaction.Commit被永远阻塞的情况.后果是:你的
方法永远不会返回,TransactionScope拿到的连接永远不会返回给连接池,从数据库端看这些
连接状态都正常,从你的应用程序中看,它们都是活动的,所以,你永远都不可能再使用它们,
它们成了僵尸…这是一个已经确认的bug,但是没有hotfix.

4.如果不得不使用TransactionScope,先研究研究kb916002.

5.如果可能,不要用分布式事务。

当在SQL Server的数据库上进行一系列的更新、插入时,SQL Server会通过事务日志(transaction log)去记录这些操作。事务日志是一个关键的组成部分,用于确保在数据库的错误情况下也能保持数据的一致性和完整性。当SQL Server运行时,它会不断往事务日志中写入记录。当事务日志的空间被占满了,就会出现"SQL Server the transaction log for database is full" (SQL Server数据库事务日志已满)的错误信息。 发生这种情况的原因有很多种,比如数据库非常繁忙、数据库日志备份未能及时完成或备份操作未被正确定时等等。当出现这种错误时,有可能影响到当前正在进行的事务,可以尝试清理事务日志或者调整SQL Server日志文件的配置来解决问题。 可以采取以下三种方法解决该错误: 1. 增加事务日志文件的大小:可以在SQL Server Management Studio中增加事务日志文件的大小,这样增加的空间可以用于记录更多的事务日志。注意,该方法不能长期解决问题,需要不断地增加日志文件大小,才能满足数据库的需求。 2. 执行定期的日志备份: 通过定期的日志备份,可以释放事务日志中的空间,可以避免事务日志被占满。建议设置合理的备份时间和备份策略。 3. 调整日志文件的增长策略: 可以通过修改SQL Server日志文件的配置来解决问题。可以通过设置日志文件的增长策略来限制日志文件的大小,保证不会因为日志过大而出现错误。 总之,SQL Server的事务日志是保证数据完整性和一致性的重要组成部分,需要得到合理的管理和配置。当出现该错误时,需要积极的解决,以保证数据库的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值