zoukankan      html  css  js  c++  java
  • Oracle连接与会话

    连接(connection):连接是从客户端到oracle数据库实例的一条物理路径。

    会话(session):会话是数据库实例中存在的一个逻辑实体。

    case1:一个连接可以有多个会话

    SQL> col USERNAME format a20
    SQL> select username ,sid,serial#,server,paddr,status from v$session where username =user;

    USERNAME            SID    SERIAL# SERVER    PADDR          STATUS
    -------------------- ---------- ---------- --------- ---------------- --------
    SCOTT                421       1165 DEDICATED 000000029E296F18 ACTIVE

    SQL> set autotrace on statistics
    SQL> select username ,sid,serial#,server,paddr,status from v$session where username =user;

    USERNAME            SID    SERIAL# SERVER    PADDR          STATUS
    -------------------- ---------- ---------- --------- ---------------- --------
    SCOTT                421       1165 DEDICATED 000000029E296F18 ACTIVE
    SCOTT                422       4107 DEDICATED 000000029E296F18 INACTIVE


    Statistics
    ----------------------------------------------------------
          0  recursive calls
          0  db block gets
          0  consistent gets
          0  physical reads
          0  redo size
        993  bytes sent via SQL*Net to client
        524  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          2  rows processed

    SQL> set autotrace off;

    PADDR地址相同,这两个会话都使用同一个专有服务器进程。

    active的会话运行查询显示信息

    inactive会话就是autotrace会话,它的任务是监视我们的实际会话,并报告它做了什么。这个过程如下:

    image

    case2:一个连接可以没有会话

    在上面的SQL*PLUS窗口中,键入disconnect
    SQL> disconnect
    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    从技术上讲,这个命令应该叫destroy_all_session(清除所有会话)更合适,因为我们并没有真正的断开物理连接。

    现在开启另一个SQL*PLUS窗口

    oracle@test1: /oracle> sqlplus / as sysdba

    SQL*Plus: Release 11.2.0.4.0 Production on Fri Dec 9 09:58:05 2016

    Copyright (c) 1982, 2013, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options

    SQL> select * from v$session where username='SCOTT';

    no rows selected

    SQL> col username format a20
    SQL> select username,program from v$process where addr=hextoraw('000000029E296F18');

    USERNAME         PROGRAM
    -------------------- ------------------------------------------------
    oracle             oracle@test1 (TNS V1-V3)

    可以看到,scott用户下没有会话,但是仍有一个进程,相应地有一个物理连接(使用前面的PADDR)。

    使用connect命令在这个没有会话的进程中创建一个新会话(connect应该叫做create_session更合适)。

    使用之前的disconnect连接的SQL*PLUS执行如下:

    SQL> conn scott/tiger
    Connected.
    SQL> select username ,sid,serial#,server,paddr,status
      2  from v$session
      3  where username=user;

    USERNAME            SID    SERIAL# SERVER    PADDR          STATUS
    -------------------- ---------- ---------- --------- ---------------- --------
    SCOTT                421       1167 DEDICATED 000000029E296F18 ACTIVE
    可以注意到,PADDR还是一样的,我们还是在使用同一条物理连接,但是SID可能和之前的一样也可能不一样。取决于注销时是否有别人登陆以及之前的SID是否可用。

    PADDR就是我们专用服务器进程的进程地址

  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/guilingyang/p/6148533.html
Copyright © 2011-2022 走看看