oracle數(shù)據(jù)庫鎖表的原因及解決方法
1、oracle數(shù)據(jù)庫表在操作insert update 、delete 時忘記提交事務(wù)或者回滾,就會發(fā)生鎖表
2、鎖表的原理是 數(shù)據(jù)庫使用獨占式封鎖機(jī)制,當(dāng)執(zhí)行上面的語句時,對表進(jìn)行鎖住,直到發(fā)生commite 或者 回滾 或者退出數(shù)據(jù)庫用戶
鎖表的原因
第一、 A程序執(zhí)行了對 tableA 的 insert ,并還未 commite時,B程序也對tableA 進(jìn)行insert 則此時會發(fā)生資源正忙的異常 就是鎖表
第二、鎖表常發(fā)生于并發(fā)而不是并行(并行時,一個線程操作數(shù)據(jù)庫時,另一個線程是不能操作數(shù)據(jù)庫的,cpu 和i/o 分配原則)
當(dāng)發(fā)生鎖表后,我們應(yīng)當(dāng)kill 掉鎖表的sql進(jìn)程,這樣就可以解除鎖表;
解決方法:
第一步:找出被鎖表對應(yīng)的session_id
SELECT B.OWNER, B.OBJECT_NAME, A.SESSION_ID, A.LOCKED_MODE FROM V$LOCKED_OBJECT A, DBA_OBJECTS B WHERE B.OBJECT_ID = A.OBJECT_ID;
第二步:根據(jù)上一步查出來的session_id找出對應(yīng)的SERIAL#
SELECT B.USERNAME, B.SID, B.SERIAL#, LOGON_TIME FROM V$LOCKED_OBJECT A, V$SESSION B WHERE A.SESSION_ID = B.SID ORDER BY B.LOGON_TIME;
第三步(解鎖):殺掉對應(yīng)的進(jìn)程
ALTER SYSTEM KILL SESSION 'session_id,SERIAL#';
第四步:完事!
到此這篇關(guān)于oracle數(shù)據(jù)庫鎖表的原因及解決方法的文章就介紹到這了,更多相關(guān)oracle數(shù)據(jù)庫鎖表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle數(shù)據(jù)庫的啟動與關(guān)閉方法
這篇文章主要介紹了Oracle數(shù)據(jù)庫的啟動與關(guān)閉方法,需要的朋友可以參考下2013-07-07Oracle配置dblink訪問PostgreSQL的操作方法
本文給大家介紹下Oracle配置dblink訪問PostgreSQL的操作方法,通過dblink訪問PostgreSQL的詳細(xì)過程,對Oracle?dblink訪問PostgreSQL相關(guān)知識感興趣的朋友一起看看吧2022-03-03Oracle數(shù)據(jù)庫的實例/表空間/用戶/表之間關(guān)系簡單講解
這篇文章主要介紹了Oracle數(shù)據(jù)庫的實例/表空間/用戶/表之間關(guān)系簡單講解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Oracle數(shù)據(jù)庫中TRUNC()函數(shù)示例詳解
在Oracle數(shù)據(jù)庫中TRUNC函數(shù)主要用于截斷日期、時間或數(shù)值,通過指定不同的格式參數(shù),可以截取日期或時間的特定部分,如年份、月份、小時等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10關(guān)于Oracle多表連接,提高效率,性能優(yōu)化操作
這篇文章主要介紹了關(guān)于Oracle多表連接,提高效率,性能優(yōu)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10