V$SESSION記錄的BLOCKING_SESSION錯誤
記錄一個很詭異的問題,在進行一個測試時碰到的,V$SESSION中記錄的BLOCKING_SESSION資訊是錯誤的,可惜這個問題當時沒有注意,後續也無法再重現出來,只好作為一個現象記錄一下,Oracle給出的一些資訊看來也是不完全可信的。
在會話1執行:
[tingkun.yang@node1 ~]$ sqlplus
test/test
SQL*Plus: Release 10.2.0.5.0 -
Production on Sun Nov 25 04:04:00 2012
Copyright (c) 1982, 2010, Oracle.
All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> set pages 100 lines 140
SQL> create table t_lock (id number, name varchar2(30), gender varchar2(8));
Table created.
SQL> insert into t_lock values
(1, 'a', 'm');
1 row created.
SQL> insert into t_lock values
(2, 'b', 'f');
1 row created.
SQL> commit;
Commit complete.
SQL> update t_lock set name =
'c' where id = 1;
1 row updated.
SQL> select sid from v$mystat
where rownum = 1;
SID
----------
151
在會話2執行同一行的更新,被鎖定:
[tingkun.yang@node1 ~]$ sqlplus
test/test
SQL*Plus: Release 10.2.0.5.0 -
Production on Sun Nov 25 04:03:27 2012
Copyright (c) 1982, 2010, Oracle.
All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> set pages 100 lines 120
SQL> update t_lock set name = 'd' where id = 1;
在會話3上執行對V$SESSION的查詢,當時沒有太注意:
SQL> conn / as sysdba
Connected.
SQL> select sid, event, blocking_session from v$session where usernamE =
'TEST';
SID EVENT
BLOCKING_SESSION
---------- ----------------------------------------------------------------
----------------
131 SQL*Net message from client
151 SQL*Net message from client
SQL> select sid, event,
blocking_session from v$session where usernamE = 'TEST';
SID EVENT
BLOCKING_SESSION
---------- ----------------------------------------------------------------
----------------
131 enq: TX - row lock
contention
161
151 SQL*Net message from client
隨後在會話1執行了ROLLBACK:
SQL> roll;
Rollback complete.
檢查了會話2的連線資訊:
1 row updated.
SQL> select sid from v$mystat
where rownum = 1;
SID
----------
131
這時才發現,之前查詢的V$SESSION中的BLOCKING_SESSION資訊是錯誤的。當前資料庫只有兩個測試會話,分別是131和151,而BLOCKING_SESSION給出的結果居然是161。雖然V$SESSION中還有BLOCKING_SESSION_STATUS列來表示當前的BLOCKING_SESSION是否有意義,但是一般而言,如果BLOCKING_SESSION_STATUS的值不是VALID,那麼BLOCKING_SESSION的值會是NULL,但是像這種值本身就是錯誤的,還是第一次碰到。
由於沒有辦法重現,現在確定不了Oracle為什麼會出現這種問題,只能先作為一個異常案例記錄一下,如果以後發現類似的錯誤,再進行分析。不過這提示一點,Oracle檢視的返回結果經常作為我們診斷、分析問題的依據,但是如果結果本身不可信,那麼在此基礎上推匯出來的結果很可能也是不可信的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-1060813/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- v$session的blocking_session含義SessionBloC
- 錯誤記錄(八)could not initialize proxy - no SessionSession
- blocking_session阻塞BloCSession
- 錯誤記錄(九)Could not obtain transaction-synchronized Session for current threadAIsynchronizedSessionthread
- Kafka錯誤記錄Kafka
- 記錄錯誤並繼續執行:錯誤事件記錄子句 --轉事件
- C++錯誤記錄C++
- SpringMVC錯誤記錄SpringMVC
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- MongoDB的一次錯誤記錄MongoDB
- 錯誤記錄:apache預設網頁訪問錯誤Apache網頁
- JS錯誤記錄 – dom操作 – 排序JS排序
- 假資料填充錯誤記錄
- virtualbox 錯誤解決記錄
- Docker環境編譯時的錯誤記錄Docker編譯
- postgresal使用錯誤解決 (記錄篇)
- 碰見一個BLOCKING_SESSION顯示不正確的BUGBloCSession
- 【SQL*Plus】使用11g SQL*Plus的errorlogging選項記錄session級別的錯誤SQLErrorSession
- Incorrect key file for table '/tmp/....'錯誤的解決--記錄
- 用dbms_error記錄load時的錯誤Error
- 記錄一次錯誤的使用當前時間new Date()引發的錯誤
- Oracle RAC 錯誤記錄以及處理方法Oracle
- 【Oracle】-【v$session】v$session的SNIPED狀態OracleSession
- kill session V$SESSION標記為KILLED 的2種情況Session
- MySQL儲存函式錯誤[Err] 1064的除錯記錄MySql儲存函式除錯
- vagrant homestead 錯誤記錄以及解決方案
- php安全配置記錄和常見錯誤梳理PHP
- hadoop 安裝錯誤記錄(持續更新)Hadoop
- read by other session的優化記錄Session優化
- [記錄]關於安裝VMware workstation 時我遇到的錯誤
- ORA-600(krvxdds: duplicated session not)錯誤Session
- 虛擬機器部署 Sentinel 服務錯誤記錄虛擬機
- 記錄redis佇列read error on connection to錯誤Redis佇列Error
- Laravel 大檔案分塊上傳錯誤記錄Laravel
- abp9 .net8 升級錯誤記錄
- 測試庫發生ora-12528錯誤及相應的該錯誤測試記錄
- V$SESSIONSession
- 【SESSION】v$session and v$license 中sessions_current 的區別Session