您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

一次Oracle行级锁导致的问题

2025/5/27 5:12:46发布10次查看
我在plsql/developer是用的system用户连接的数据库,而在crt用 sqlplus / as sysdba 连接数据库,是sys用户。现在在plsql/deve
发现问题:今天开发同事让给修改一行数据的某几个字段,非常之简单的操作,确因为对oracle锁机制的理解不到位导致问题。
我同时用plsql/developer 和crt两种工具都连接上了数据库,然后打算在plsql/developer上update一个字段,,在crt上update一个字段(我也不知道当时是怎么想的,哈哈)然后就莫名其妙的夯住了。。。。。由于自己经验和学识不足,还傻傻的等待中,还以为是数据量太大呢,原来是锁的原因,
分析问题:我在plsql/developer是用的system用户连接的数据库,而在crt用  sqlplus / as  sysdba 连接数据库,是sys用户。现在在plsql/developer中update了一个字段,没有commit,就直接在crt上update了另一个字段,导致后者等待,应为已经有了行级锁,
解决问题:
.1、 用dba权限的用户查看数据库都有哪些锁
select a.username,a.sid,a.serial#,a.logon_time
 from v$locked_object b,v$session a
 where b.session_id=a.sid order by a.logon_time;
.2、根据sid查看具体的sql语句,如果sql不重要,可以kill
select sql_text from v$session a,v$sqltext_with_newlines b
  where decode(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
  and a.sid=&sid order by piece;
3、kill该事务
alter system kill session '339,13545';
然后再次执行update,最好用同一个用户执行,非常快的执行了。
本文永久更新链接地址:
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product