• 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就是我们专用服务器进程的进程地址

  • 相关阅读:
    辛星和你彻底搞清CSS中的相对定位和绝对定位
    快速向表中插入大量数据Oracle中append与Nologging
    关于insert /*+ append*/ 各种insert插入速度比较
    dblink连接的目标端 session不断的问题。
    oracle操作记录
    ORACLE快速彻底Kill掉的会话
    Oracle 死锁的检测查询及处理
    Oracle 11g必须开启的服务及服务详细介绍
    oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
    Oracle报 ORA-00054资源正忙的解决办法
  • 原文地址:https://www.cnblogs.com/guilingyang/p/6148533.html
Copyright © 2020-2023  润新知