[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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/267265/viewspace-2213824/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值