一次Oracle行級鎖導致的問題

來源:互聯網
上載者:User

一次Oracle行級鎖導致的問題

發現問題:今天開發同事讓給修改一行資料的某幾個欄位,非常之簡單的操作,確因為對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,最好用同一個使用者執行,非常快的執行了。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.