[20180907]訪問v$檢視與一致性讀取.txt
[20180907]訪問v$檢視與一致性讀取.txt
--//前天看sql語句,發現應用存在一條訪問gv$session的語句,感到很奇怪.
--//v$之類的檢視,要訪問的一些基表實際上是x$,實際上是一些陣列或者連結串列之類的結構,只不過以表的形式展現出來.
--//這樣我思考一個問題,理論講就是一致性讀取的問題,透過例子說明:
1.環境:
--//開啟2個回話,sesson 1以scott使用者登陸,session 2以sys使用者登陸:
--//sesson 1:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
SCOTT@test01p> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
152 9 5460:4376 DEDICATED 5564 22 5 alter system kill session '152,9' immediate;
--//退出後再重新登陸,可以發現sid不變,至少在我的測試環境下能保證sid不變.
SCOTT@test01p> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
152 11 2600:6116 DEDICATED 6060 22 6 alter system kill session '152,11' immediate;
2.測試:
--//建立函式指令碼.
--//grant EXECUTE ON dbms_lock to scott;
CREATE OR REPLACE FUNCTION SCOTT.sleep (seconds IN NUMBER)
RETURN NUMBER
AS
BEGIN
sys.DBMS_LOCK.sleep (seconds);
RETURN seconds;
END;
/
--//session 1退出:
--//sesson 2:
SYS@test01p> select count(*) from v$session where sid = 152;
COUNT(*)
----------
0
--//當前沒有sid=152的會話.
SYS@test01p> select scott.sleep(5),a.sid,a.serial#,module from v$session a where sid in(1,152) ;
--//等.
--//馬上切換到session 1登陸,如果輸入命令不夠塊,可以適當延長sleep的時間.^_^.
--//sesion 1:
SCOTT@test01p> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
152 19 2132:6040 DEDICATED 5600 22 21 alter system kill session '161,119' immediate;
--//切換會session 2檢視:
SYS@test01p> select scott.sleep(5),a.sid,a.serial#,module from v$session a where sid in(1,152) ;
SCOTT.SLEEP(5) SID SERIAL# MODULE
-------------- ---------- ---------- ------------
5 1 1
5 152 19 SQL*Plus
--//我查詢v$session在前,登入會話在後,可以發現顯示sid=152哪行資訊.也就是一些動態檢視不支援一致性讀取的.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2213824/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20210418]查詢v$檢視問題.txt
- [20211214]檢視檢視V$ACTIVE_SESSION_HISTORY遇到奇怪問題.txtSession
- [20221128]再談防水牆(檢視訪問效能問題).txt
- [20221130]測試訪問檢視v$session幾種情況的效能差異.txtSession
- [20180907]insert+with+select.txt
- [20211019]V$DETACHED_SESSION檢視.txtSession
- [20230214]資料庫連線訪問asm相關檢視.txt資料庫ASM
- [20210528]V$INDEXED_FIXED_COLUMN檢視.txtIndex
- [20181206]關於一致性讀取3.txt
- [20230216]資料庫連線訪問asm相關檢視2.txt資料庫ASM
- [20200212]使用DBMS_SHARED_POOL.MARKHOT與檢視v$open_cursor.txt
- [20201207]12c v$open_cursor檢視.txt
- [20181103]12c檢視V$EVENT_NAME.txt
- 如何檢視Linux 當前訪問ipLinux
- [20211206]toad下job建立檢視問題.txt
- [20210304]關於11g一致性讀取的測試.txt
- [20190312]檢視v$datafile欄位OFFLINE_CHANGE#, ONLINE_CHANGE#.txt
- [20190506]檢視巢狀與繫結變數.txt巢狀變數
- [20200211]檢視v$db_object_cache的CHILD_LATCH欄位.txtObject
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視.txtSQL
- [20210114]toad檢視真實執行計劃問題.txt
- telnet檢視遠端機器埠是否可以訪問
- postgresql關於訪問檢視需要的許可權SQL
- nginx配置web訪問以及檢視目錄檔案NginxWeb
- MySQL筆記之一致性檢視與MVCC實現MySql筆記MVC
- [20181213]ogg大量讀取操作.txt
- [20220223]bbed讀取資料塊mssm與assm 2.txtSSM
- [20180503]檢視提示使用索引.txt索引
- [20240911]檢視超長檢視的定義2.txt
- [20231026]bbed檢視索引kd_off結構的問題.txt索引
- 快取與資料庫一致性問題深度剖析快取資料庫
- [20200422]跟蹤特定sql語句以及v$open_cursor檢視(補充).txtSQL
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視2.txtSQL
- [20210318]bbed讀取資料塊.txt
- 檢視V$DATAGUARD_STATS
- v$parameter gv$parameter 檢視 DDL 與隱含引數
- Java物件導向系列[v1.0.0][索引與檢視]Java物件索引
- [20230323]ps命令檢視thread.txtthread