OracleCommand执行ExecuteNonQuery出现程序挂起现象

2024-02-15 17:48

本文主要是介绍OracleCommand执行ExecuteNonQuery出现程序挂起现象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

string sql = "INSERT INTO TempTable (A, B, C) VALUES ('2222222', '1111111', 'RRR')";//A为主键
OracleCommand cmd = new OracleCommand(sql, connection);
cmd.ExecuteNonQuery();

在执行这段代码的时候,第一次插入没有成功,当Stop Debug再重新启动的时候,发现程序运行到cmd.ExecuteNonQuery的时候就卡住不动了。造成这个的原因是Oracle的block机制。

If session "A" inserts a row in a table with a primary key, session "A" will block ANY other session attempting to insert the same primary key until session "A" commits or rolls back the insert. All other attempts to insert will "hang".

此时我在代码中把sql语句主键2222222换成33333333,那么就能顺利插入。说明只有在相同的主键情况下,这个操作才会被block. 因为以前插入2222222的时候,程序意外结束,但是对于Oracle端事务并没有提交或者回滚,所以就锁定了这一个主键。注意,仅仅是这一个值的主键。

这里还有一个问题,就是现在我打开SQL Developer,执行插入2222222的主键语句,会顺利的执行完成,不发生卡住现在,而用代码执行SQL语句还是会发生卡住现象。但是我重启VS,新建一个项目,写入这些代码,也相当于另外的一个程序来执行这个插入语句,也是会有卡住现象。可能跟使用的.net provider有关?因为使用的是同一个Provider,所以卡住。因为SQL Developer没有使用这个provider,所以不会卡住?这只是一个猜测。

这种lock叫做TMlock,也叫row transaction lock, 可以使用SQL语句查看是否有这种lock

SELECT sid, id1 FROM v$lock WHERE TYPE='TM'

SID ID1
76 14197

SELECT * FROM dba_objects WHERE object_id = 14197;

OBJECT_NAME                                                                                                                    
--------------------------------------------------------------------------------------------------------------------------------
TemTable


如何解除这个TM lock?row transaction lock

在SQL Developer UI执行一个Commit命令就行了。

这篇关于OracleCommand执行ExecuteNonQuery出现程序挂起现象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712085

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听