oracle执行update语句时卡住问题分析及解决办法
问题
开发的时候debug到一条update的sql语句时程序就不动了,然后我就在plsql上试了一下,发现plsql一直在显示正在执行,等了好久也不出结果。但是奇怪的是执行其他的select语句却是可以执行的。
原因和解决方法
这种只有update无法执行其他语句可以执行的其实是因为记录锁导致的,在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住。由于我的java程序中加了事务,之前debug到一半的时候我强制把工程终止了,这样就导致没有执行事务提交,所以oracle将代码中update那一条的记录锁了。可通过下面两步解决:
1.首先查询锁定记录
SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;
2.然后删除之
ALTER system KILL session 'SID,serial#'
总结
以上就是本文关于oracle执行update语句时卡住问题分析及解决办法的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:ORACLE SQL语句优化技术要点解析、浅谈oracle rac和分布式数据库的区别、Oracle RMAN自动备份控制文件方法介绍等,若有不足之处,欢迎留言指正。感谢大家对本站的支持!
相关推荐
-
sqlserver中delete、update中使用表别名和oracle的区别
昨天发现程序中数据分析的结果不对,重新进行分析后,原数据仍在,有值的字段被累计.心说,不对啊,是重新生成记录后才分析的啊.难道忘了DELETE了?查代码,发现有删除语句.于是在查询分析器中执行,报错.反复试几次,明白了,Delete From不认表名别名!回头想下,当初程序改完后主要是在Oracle中测的,SQLServer一直没细测. 之所以要用别名,是因为where条件中需要用到子查询写一些条件,下面不写那么复杂,仅说明一下问题. 结论: (ORACLE适用) DELETE FROM
-
ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
UPDATE 1.先备份数据(安全.提高性能). 2.分批更新,小批量提交,防止锁表. 3.如果被更新的自动有索引,更新的数据量很大,先取消索引,再重新创建. 4.全表数据更新,如果表非常大,建议以创建新表的形式替代更新. DELETE 1.分批提交.减少锁表时间.减少回滚段压力. 2.大批量数据删除加上rownum<1000. 3.大批量删除,禁止中途ctrl+c,或kill调session. 4.大量数据删除后最好重建索引,分析表. INSERT 1.关闭redo log(ALTER TA
-
oracle中UPDATE nowait 的使用方法介绍
1.UPDATE nowait 应用以下场景:查询某条数据,并对其开启数据库事务.如果查询的当前数据没有加锁,则正确返回结果,并对当前数据加锁,如果查询的当前数据已在事务中,已加锁.但返回异常信息:提示数据已加锁.SQL语句: Sql代码: 复制代码 代码如下: SELECT * FROM hold_mc_site_product_pic pic WHERE pic.id = 730127 FOR UPDATE nowait 2.应用在多线程并发的情况下.先查询出要处理的数据,并加入数据库级的锁
-
oracle执行update语句时卡住问题分析及解决办法
问题 开发的时候debug到一条update的sql语句时程序就不动了,然后我就在plsql上试了一下,发现plsql一直在显示正在执行,等了好久也不出结果.但是奇怪的是执行其他的select语句却是可以执行的. 原因和解决方法 这种只有update无法执行其他语句可以执行的其实是因为记录锁导致的,在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住.由于我的java程序中加了事务,之前debug
-
Oracle执行Update语句的几种方式
Oracle没有update from语法,可以通过四种写法实现同样的功能: 一.标准update语法(常用.速度可能最慢) 当更新的表示单个或者被更新的字段不需要关联表带过来,此法是最好的选择. update a set a.c2= (select b.c2from b where a.c1=b.c1) where exists (select 1 from b where a.c1=b.c1) 二.内联视图更新(关联主键字段,速度较快) inline view更新法就是更新一个临时建立的视图
-
Oracle使用in语句不能超过1000问题的解决办法
目录 前言 我的解决方案是: 一.建立临时表 1.ON COMMIT DELETE ROWS 2.ON COMMIT PRESERVE ROWS 二.使用in() or in() 总结 前言 在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出“java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000”这个异常. 我的解决方案是: 一.建立临时表 ORACLE临时表有两种类型:会话级的临时表
-
MySQL执行update语句和原数据相同会再次执行吗
背景 本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗? 测试环境 MySQL5.7.25 Centos 7.4 binlog_format为ROW 参数 root@localhost : (none) 04:53:15> show variables like 'binlog_row_image'; +------------------+-------+ | Variable_name | Value | +------
-
Python MySQLdb 执行sql语句时的参数传递方式
使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法. 1.不传递参数 conn = MySQLdb.connect(user="root",passwd="123456",host="192.168.101.23",db="cmdb") orange_id = 98 sql = "select * from orange where id=%s" % orange_id cursor =
-
解决python 执行sql语句时所传参数含有单引号的问题
在编写自己的程序时,需要实现将数据导入数据库,并且是带参数的传递. 执行语句如下: sql_str = "INSERT INTO teacher(t_name, t_info, t_phone, t_email) VALUES\ (\'%s\', \'%s\', \'%s\', \'%s\')" % (result, result2, phoneNumber, Email) cur.execute(sql_str) 执行程序后,产生错误: ProgrammingError: (1064
-
深入学习Android ANR 的原理分析及解决办法
目录 一.ANR说明和原因 1.1 简介 1.2 原因 1.3 避免 二.ANR分析办法 2.1 ANR重现 2.2 ANR分析办法一:Log 2.3 ANR分析办法二:traces.txt 2.4 ANR分析办法三:Java线程调用分析 2.5 ANR分析办法四:DDMS分析ANR问题 三.造成ANR的原因及解决办法 四.ANR源码分析 4.1 Service造成的Service Timeout 4.2 BroadcastReceiver造成的BroadcastQueue Timeout 4.
-
PHP中ID设置自增后不连续的原因分析及解决办法
PHP中ID设置自增后不连续的原因分析如下所述: alter table tablename drop column id; alter table tablename add id mediumint(8) not null primary key auto_increment first; 每次删除把这两行家伙加上就行了 还有就是这个 使用mysqli对象中的query()方法每次调用只能执行一条SQL命令. 如果需要一次执行多条SQL命令,就必须使用mysqli对象中的 multi_que
-
Android实现类似IOS右滑返回的效果(原因分析及解决办法)
使用类库SwipeBackLayout https://github.com/Issacw0ng/SwipeBackLayout 出现的问题: 1. 主Activity返回时黑屏或者返回只是看到桌面背景而没有看到上一个Activity界面 原因: 使用滑动返回需要在Activity的额主题中声明android:windowIsTranslucent=true,而该属性是设置Activity为是否为透明主题,当主Activity采用透明主题时,由于是app Activity栈中的第一个,所以滑动返
-
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
1.问题: 后端接收不到AngularJs中$http.post发送的数据,总是显示为null 示例代码: $http.post(/admin/KeyValue/GetListByPage, { pageindex: 1, pagesize: 8 }) .success(function(){ alert("Mr靖"); }); 代码没有错,但是在后台却接收不到数据,这是为什么呢? 用火狐监控:参数是JSON格式 用谷歌监控:传参方式是request payload 可以发现传参方式是
随机推荐
- 深入浅析AngularJS中的module(模块)
- PHP 加密解密内部算法
- Vue.js中用webpack合并打包多个组件并实现按需加载
- C++标准库bitset类型的简单使用方法介绍
- java中treemap和treeset实现红黑树
- JAVA使用爬虫抓取网站网页内容的方法
- 用Python的线程来解决生产者消费问题的示例
- PHP开发中常用的十个代码样例
- PHP实现微信发红包程序
- 获取文件更新列表 批处理
- Linux如何设置服务自启动
- javascript 使用正则test( )第一次是 true,第二次是false
- JavaScript数据结构之双向链表定义与使用方法示例
- JavaScript中三个等号和两个等号你了解多少
- Java设计模式之状态模式(State模式)介绍
- Android ViewPager向导页面制作方法
- Python基于win32ui模块创建弹出式菜单示例
- 解决python os.mkdir创建目录失败的问题
- 易语言输入汉字与拼音比较命令使用讲解
- mysql 8.0.11 macos10.13安装配置方法图文教程