【完結篇】 遇到的詭異問題,終於解決了,原來是因為鎖
折磨我一天的問題,今天又進行了進一步分析,發現可能出現了不斷引用自己的死迴圈。、
注意,這裡面是無窮盡的,在往後你可以繼續點。我開始回憶這次測試的整個過程:
我一開始建立同義詞的時候,db_LINK建立錯了,指的庫是自己的庫,我們再來捋一遍,我要建立同義詞所指的表名是bsvc, 而我的同義詞也叫bsvc,新庫裡建立的空表也叫bsvc,全是一樣的,我想,是不是我建同義詞的時候,由於是私有同義詞,所以提前把原表先改名,建之後,DB_LINK指到了自己的庫裡,但是庫裡還沒有這個表,只有一個同義詞,然後就引用同義詞,同義詞再引用,導致了死迴圈,永遠的沒有盡頭。
但是這種死迴圈的情況,在網上搜了一大圈,依然沒有解決的方法,最後聽從一朋友的建議,還是從鎖的角度出發,解決這個問題。
透過這條SQL語句:
SELECT /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser,s.LOGON_TIME
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT Null
查出昨天有很多鎖沒有釋放。其實我昨天也看了很多,但沒有鎖所涉及的表跟BSVC有關,所以沒有在意,昨天的鎖還沒有解決,而且今天也沒有什麼鎖發生,所以我決定把這些鎖全部KILL
運用alter system kill session () 語句 殺掉之後,在v$session裡檢視他們的狀態,變成了killed ,資源還沒有全部釋放,所以我們只能從作業系統層面殺掉程式了。
當一個session被kill掉以後,該session的paddr被修改,如果有多個session被kill,那麼多個session
的paddr都被更改為相同的程式地址。那我們怎麼獲得真正的paddr呢?運用下面的語句
SQL> select p.addr from v$process p where pid <> 1
2 minus
3 select s.paddr from v$session s;
select spid from v$process where ADDR in ( select p.addr from v$process p where pid <> 1 minus select s.paddr from v$session s)
SQL> select spid from v$process where ADDR in ( select p.addr from v$process p where pid <> 1 minus select s.paddr from v$session s)
spid算出來了,在作業系統上kill -9 全部殺掉之後,同義詞終於可以刪除了。問題解決
注意,這裡面是無窮盡的,在往後你可以繼續點。我開始回憶這次測試的整個過程:
我一開始建立同義詞的時候,db_LINK建立錯了,指的庫是自己的庫,我們再來捋一遍,我要建立同義詞所指的表名是bsvc, 而我的同義詞也叫bsvc,新庫裡建立的空表也叫bsvc,全是一樣的,我想,是不是我建同義詞的時候,由於是私有同義詞,所以提前把原表先改名,建之後,DB_LINK指到了自己的庫裡,但是庫裡還沒有這個表,只有一個同義詞,然後就引用同義詞,同義詞再引用,導致了死迴圈,永遠的沒有盡頭。
但是這種死迴圈的情況,在網上搜了一大圈,依然沒有解決的方法,最後聽從一朋友的建議,還是從鎖的角度出發,解決這個問題。
透過這條SQL語句:
SELECT /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser,s.LOGON_TIME
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT Null
查出昨天有很多鎖沒有釋放。其實我昨天也看了很多,但沒有鎖所涉及的表跟BSVC有關,所以沒有在意,昨天的鎖還沒有解決,而且今天也沒有什麼鎖發生,所以我決定把這些鎖全部KILL
運用alter system kill session () 語句 殺掉之後,在v$session裡檢視他們的狀態,變成了killed ,資源還沒有全部釋放,所以我們只能從作業系統層面殺掉程式了。
當一個session被kill掉以後,該session的paddr被修改,如果有多個session被kill,那麼多個session
的paddr都被更改為相同的程式地址。那我們怎麼獲得真正的paddr呢?運用下面的語句
SQL> select p.addr from v$process p where pid <> 1
2 minus
3 select s.paddr from v$session s;
select spid from v$process where ADDR in ( select p.addr from v$process p where pid <> 1 minus select s.paddr from v$session s)
SQL> select spid from v$process where ADDR in ( select p.addr from v$process p where pid <> 1 minus select s.paddr from v$session s)
spid算出來了,在作業系統上kill -9 全部殺掉之後,同義詞終於可以刪除了。問題解決
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25116248/viewspace-1124112/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PNP的子集和問題終於解決了
- 終於,解決了一個大問題
- 關於 SAP ABAP gateway OData 的一個詭異問題及解決辦法Gateway
- Go etcd 的依賴問題終於解決了。。。Go
- freebsd簡單漢化終結篇[解決了簡單漢化的所有問題(轉)
- 終於解決了這個線上偶現的panic問題
- 對 JsonConvert 的認識太膚淺了,終於還是遇到了問題JSON
- 利用sys schema解決一次詭異的語句hang問題
- Glide終於解決了同時繫結多個webp格式圖片的問題IDEWeb
- 終於搞懂了!原來vue3中template使用ref無需.value是因為這個Vue
- 介面詭異的404問題記錄
- 很詭異的博弈問題分析方法
- 遇到問題的解決方法
- 困擾Chrome使用者多年的大問題,終於要解決了!Chrome
- 一次詭異的線上資料庫的死鎖問題排查過程資料庫
- 記錄--終於搞懂了!原來vue3中template使用ref無需.value是因為這個Vue
- oracle 鎖問題的解決Oracle
- 報表為什麼會沒完沒了?怎麼解決這個問題?
- 終於解決了moto mpx220發簡訊白屏的問題
- python 詭異問題求助各位大哥Python
- 由optimizer_switch所引起的詭異問題
- 一個看似詭異的Oracle連線問題Oracle
- 解決程式(因為數字的問題)沒反應的方法
- 終於解決了《====》記一次mysql熱備份xtrabackup(沒有解決問題)MySql
- 遇到詭異問題,刪除私有同義詞,plsql developer掛死無響應SQLDeveloper
- 使用RMAN report need backup命令檢查備份時遇到一個詭異的問題
- 因為arp 問題導致的vip 故障與解決方案
- Service Mesh是什麼,為我們解決了什麼問題?
- 如何分析因為 SAP UI5 版本差異帶來的問題試讀版UI
- 玩Deno遇到問題的解決方案
- 今天遇到的問題與解決方法
- CKEditor使用中遇到的問題解決
- 解決 plsql 遇到亂碼的問題SQL
- 解決在使用Amoeba遇到的問題
- 一次詭異的MySQL問題處理故事MySql
- 什麼是鎖?深入分析解讀MySQL鎖,解決幻讀問題!MySql
- 【原創】autotrace中statistics為0的問題的解決
- 解密詭異併發問題的幕後黑手:可見性問題解密