oracle中转服务器搭建,Oracle技术之专用服务器和共享服务器连接与会话

连接:客户端进程和服务器进程之间的一条物理路径

会话:数据库的一个逻辑实体,由客户端进程和服务器进程搭建起来,作为2个进程之间通信的信道

一、专用服务器连接

1.在linux上,可以在同一台机器上运行客户端和服务器进程,能很清楚的看出这种父/子进程关系

SYSTEM@PROD> select a.spid dedicated_server,b.process clientpid

2 from v$process a,v$session b

3 where a.addr=b.paddr and

4 b.sid=(select sid from v$mystat where rownum=1);

DEDICATED_SE CLIENTPID

------------ ------------

4606        4557

SYSTEM@PROD> !/bin/ps -ef | grep 4557

oracle   4557 8686 0 15:25 pts/3   00:00:00 sqlplus  客户端进程(父进程)

oracle   4606 4557 0 15:25 ?       00:00:00 oraclePROD (DESCRIPTION=(LOCAL=YES)

(ADDRESS=(PROTOCOL=beq))) 服务端进程(子进程)

即:sqlplus进程是父进程->oraclePROD是子进程,能很清楚的看出了这种父/子进程关系。谁发起谁是父进程

DESCRIPTION=(LOCAL=YES)说明客户端进程是本地的

DESCRIPTION=(LOCAL=NO)说明客户端进程是远程的

2.可以使用sqlplus在看看实际的连接和会话是什么样子。这里使用了autotrace命令,发现有两个会话

,我们在一条连接创建了2个会话。一条连接上的不同会话可以使用不同的用户身份

即:一个连接上可以创建0个、1个、多个会话,每个会话都是独立的。

一个会话可以有连接也可以没有连接(会话会空闲)

[oracle@secdb1 ~]$ sqlplus system/oracle        使用system用户进入sqlplus

SYSTEM@PROD> select username,sid,serial#,server,paddr,status from v$session

2 where username=USER;

USERNAME                            SID   SERIAL# SERVER   PADDR   STATUS

------------------------------ ---------- ---------- --------- -------- --------

SYSTEM                               110      24 DEDICATED329DB9DCACTIVE

只需打开autotrace来查看sqlplus中所执行语句的统计结果

SYSTEM@PROD> set autotrace on statistics         打开执行计划中的统计信息

SYSTEM@PROD> select username,sid,serial#,server,paddr,status from v$session

2 where username=USER;

USERNAME                             SID   SERIAL# SERVER   PADDR   STATUS

------------------------------ ---------- ---------- --------- -------- --------

SYSTEM                               109       183 DEDICATED329DB9DCINACTIVE 监控会话

SYSTEM                               110        24 DEDICATED329DB9DCACTIVE   实际会话

这个109 110会话使用了一个329DB9DC进程地址,也就是一个连接创建了2个会话

Statistics

----------------------------------------------------------

0 recursive calls

0 db block gets

0 consistent gets

0 physical reads

0 redo size

774 bytes sent via SQL*Net to client

381 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

2 rows processed

SYSTEM@PROD> set autotrace off                  关闭执行计划

Sqlplus中启用AUTOTRACE时,如果我们执行DML操作(insert  update  delete  merge)

(1)如果还不存在“监控会话”,它会使用当前连接创建一个新会话(监控会话109)

(2)要求这个新会话查询v$sesstat视图来记住实际会话的初始统计值。

(3)在原会话中运行DML操作

(4)DML语句执行结束后,sqlplus会请求监控会话再次查询v$sesstat视图,并生成前面的所示报告,显示出实际会话的统计结果只差。

3.现在使用sqlplus来查看一条没有任何会话的连接,在sqlplus窗口中键入一条disconnect命令

SYSTEM@PROD> disconnect                       关闭所有会话

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

@> show user

USER is ""                                      没有登录用户

@> select username,sid,serial#,server,paddr,status from v$session

2 where username=USER;

SP2-0640: Not connected                          只是说明没有会话了,但连接还在

注:从技术上讲,这个命令应该叫distroy_all_session(破坏所有会话)更合适,而不是disconnect,因为我们并没有真正断开物理连接。如果想断开物理连接,应该执行“exit”

@> exit

[oracle@secdb1 ~]$

[oracle@secdb1 ~]$ sqlplus / as sysdba                       使用sys用户来查询system用户的会话

SYS@PROD> select * from v$session where username='SYSTEM';  可以看到,这个system用户下没有会话

no rows selected

但PADDR329DB9DC进程还存在,对应的有一条物理连接。

SYS@PROD> select username,program from v$process where addr='329DB9DC';

USERNAME       PROGRAM

--------------- ------------------------------------------------

oracle         oracle@secdb1 (TNS V1-V3)

4.现在使用sqlplus的connect命令创建一个新会话,但还是使用原来的PADDR329DB9DC进程连接

@> conn system/oracle

Connected.

SYSTEM@PROD>

SYSTEM@PROD> select username,sid,serial#,server,paddr,status from v$session

2 where username=USER;

USERNAME                             SID   SERIAL# SERVER   PADDR   STATUS

SYSTEM                                104    31  DEDICATED329DB9DCACTIVE

可以注意到,PADDR329DB9DC还是使用原来的进程连接,但SID是新的会话ID了,可能会分配原来的SID,也可能是新的SID,这取决于在我们注销时是否有别人登录,以及我们原来的SID是否可用。

注:最常见的是一个连接对应一个会话,这也是大多数人每天所看到的情况

1)专用服务器模式下UGA在PGA中分配空间

2)共享服务器模式下UGA在SGA中分配空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值