Oracle链接、会话、事务的关系

一、会话:在一个CONNECTION上可以建立0个、一个或多个SESSION。各个会话是单独而且独立的即使它们共享同一个数据库连接CONNECTION
         连接并不是会话的同义词。一个连接可能有零个、一个或多个建立在其上的会话。每个会话是分开且独立的,即使他们共享一个同样的物理连接到数据库。
         会话中的某个提交并不影响在该连接上的任何其他会话。事实上,使用该连接的每个会话可以使用不同用户身份。


二、事务,指的是你在当前SESSION中要做的一件事情(一个会话可以启动多个事务),可以跨链接,甚至跨数据库实例

1.一个会话可以有连接也可以没有连接。使用高级Oracle Net特性(如连接池)时,客户可以删除一条物理连接,
而会话依然保留(但是会话会空闲)。客户在这个会话上执行某个操作时,它会重新建立物理连接。
2.只有有会话才可能有窗口操作,会话是用户指令执行的载体:用于执行SQL、提交事务并运行服务器中存储过程等。


当系统没有运行在共享服务模式下时,Oracle 为每个用户会话创建一个服务进程(server process)。
而当系统运行在共享服务模式下时,多个用户会话可以共享同一个服务进程。

在SQL*Plus中打开autotrace后,当执行DML操作(insert、update、delete、select和merge)时,SQL*Plus将完成下列操作。
1)如果第二个会话不存在,则使用当前连接创建一个新的会话。
2)SQL*Plus要求产生的新会话查询v$sesstat视图,为运行DML的会话记录初始统计数据。
3)在第一个会话中运行DML操作。
4)在完成DML语句后,SQL*Plus 将要求其他会话再次查询V$sesstat并产生显示执行DML会话在统计数据上的差异报告。
如果关闭autotrace,SQL*Plus将终止第二个会话并不再监视v$session视图。

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

Oracle 行锁:

insertupdatedelete操作默认加行级锁,其原理和操作与select for update并无两样。 

select for update of,这个of子句在牵连到多个表时,具有较大作用,如不使用of指定锁定的表的列,则所有表的相关行均被锁定,若在of中指定了需修改的列,则只有与这些列相关的表的行才会被锁定。

猜你喜欢

转载自ghxsh123.iteye.com/blog/2233185