當ORACLE出現表鎖死的情況,會導致其他人員無法編輯相關資料,嚴重的造成應用程式崩潰。
如何處理表死結的問題?
1、查詢鎖死的表;
SELECT /*+ rule*/ a.sid, b.owner, object_name, object_type FROM v$lock a, all_objects b WHERE TYPE = 'TM' and a.id1 = b.object_id ;
2、根據SID查詢SID和SERIAL#;
SELECT sid,serial# FROM v$session WHERE sid = &sid;
3、根據SID和SERIAL#,殺掉被鎖死的表,使之可被編輯。
alter system kill session 'SID,SERIAL#';
若是有多個節點,以上SQL語句中,將“v$lock”修改為“gv$lock”,
“v$session ”修改為“gv$session ”,否則會遺漏資訊。
方法二:
以下的文章主要描述的是Oracle死結的解決辦法,你如果對Oracle死結的具體解決辦法有興趣的話你就可以點擊以下的文章進行觀看了。以下就是具體方案的描述,希望在你今後的學習中會有所協助。
1.查哪個過程被鎖
查V$DB_OBJECT_CACHE視圖:
SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='過程的所屬使用者' AND LOCKS!='0';
2. 查是哪一個SID,通過SID可知道是哪個SESSION.
查V$ACCESS視圖:
SELECT * FROM V$ACCESS WHERE OWNER='過程的所屬使用者' AND NAME='剛才查到的過程名';
3. 查出SID和SERIAL#
查V$SESSION視圖:
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='剛才查到的SID'
查V$PROCESS視圖:
SELECT SPID FROM V$PROCESS WHERE ADDR='剛才查到的PADDR';
4. 殺進程
(1).先殺Oracle進程:
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2).能過CMD控制台,再殺作業系統進程:
ORAKILL 資料庫實現 剛才查出的SPID
一定要記住,要把之前查出的Oracle死結記下來,然後,一一對其Kill,如果Kill不乾淨的話,還是解決不了問題
上述的相關內容就是對Oracle死結解決辦法的描述,希望會給你帶來一些協助在此方面。