session 和connection的不同
这里的不同,主要讨论dedicated server下的不同,为讨论shared server情况下的。参考资料是TOM的《oracle编程艺术9i,10g,11g》
一个connection可能没有session建立在上面,也可能有一个、甚至多个session建立在connection上,并且每个session都是分割开的、独立的,即使他们共享数据库的physical connection。一个connection中的某个session的提交动作不会影响到其他session。
在oracle中,connection是在用户进程和数据库实例中间的一个简单的物理回路-----也可以说是网络连接。这个connection可能是连接到dedicated server process或者连接到一个dispatcher。session可能建立在connection上,也可能不在connection上。在使用advanced Oracle Net features时,如connection pooling,物理connection可能被客户端丢弃,留下session未动,空闲状态。当客户端想在这个session中执行一些操作时,oracle会重建这个物理connection。
connection:是客户端到oracle实例的物理路径(在客户端进程和dedicated server 或dispatcher)。connection建立在network或者IPC 进程上。然而,如果使用Oracle的connection manager(CMAN),connection就可能建立在客户端和CMAN,CMAN和数据库间。注意:这里的connection是分两段的。一段是,客户端和CMAN,第二段是,CMAN和数据库间。
session:是存在于instance中的逻辑entity(存在、实体)。
使用SQL*Plus 来看看实际中的connection和session。通过AUTOTRACE命令来验证一个connection中可以有多个session。
这个sql显示当前系统中只有一个session:一个单一的dedicated server-connection session。PADDR列是dedicated server的进程号。下面打开AUTOTRACE。
这样就得到两个session,这两个都是用相同的dedicated server 进程,可见这两个session的PADDR的值是相同的。值得注意的是STATUS是ACTIVE的session,这个session就是执行上面那个sql的session。但是INACTIVE的session是哪个?它是AUTOTRACE session。AUTOTRACE的工作是监视用户的real session,并且给出real session的工作报告。
AUTOTRACE在SQL*Plus中被激活后,当用户自行DML操作(INSERT, DELETE, SELECT,MERGE)时,SQL*Plus会执行下面动作:
1,SQL*Plus会在当前的connection中创建一个新的session;
2,SQL*Plus会让这个新的session查询V$SESSTAT来得到执行DML操作的session的初始统计信息。
3,SQL*Plus在原始的session中执行DML操作
4,DML操作完成后,SQL*Plus会请求AUTOTRACE session再次查询V$SESSTAT,计算出执行DML操作的 session在执行DML操作前后的统计信息。
关闭AUTOTRACE后,SQL*Plus会关闭这个session,并且在V$SESSION中看不到这个session。oracle为何在同一个connection中新建一个session。因为,如果在额外的connection中建立一个session,那么AUTOTRAEC统计出的信息就不准确了。
以上是在一个connection中建立2个session。下面是使用SQL*Plus,来看看connection中没有session的情况。使用DISCONNECT命令即可。
在一个窗口中执行disconnect
这个命令并没有物理关闭connection,但是关闭了所有的session。如果在另一个窗口中使用其他用户登录、查询。
这里用u1登录,u1有dba权限。用u1用户去查询和SYS用户相关的session信息。结果可以发现,在disconnect之后,和SYS用户相关的session信息全部丢失。
下面接着查看之前SYS用户的session所在的connection是否还存在。这个connection的ADDR是 ‘2E3C2B84’
这里可以发现这个进程并未消失。
在以前的窗口重新连接SYS用户:connect /
可以看见重新连进来以后的ADDR还是‘2E3C2B84’,但是SID不一样了。这个SID和之前的不一样,是因为在SYS帐号disconnect期间,有其他人在别处使用SYS帐号登录过。
- 大小: 6.2 KB
- 大小: 19.9 KB
- 大小: 7 KB
- 大小: 5.5 KB
- 大小: 3.8 KB
- 大小: 9.1 KB
分享到:
相关推荐
<sessionState mode="SQLServer" sqlConnectionString="your_connection_string" applicationName="shared_session_app" /> ``` 确保所有应用程序的`applicationName`相同,这样它们就能访问相同的Session数据。 **...
//得到Cookie的所有内容,包括SESSIONID,在进行下次提交的时候 直接把这个Cookie的值设到头里头就行了 //淡然只得到SESSIONID也很简单的 ,但是有时候Set-Cookie的值有几个的 List<String> list = (List) ...
下面将详细讲解这个过程,包括GET和POST方法的使用,以及Session管理。 首先,我们需要了解HTTP协议。HTTP是超文本传输协议,用于在Web上交换信息。它有两种主要的方法:GET和POST。GET方法用于获取资源,参数通过...
在分布式系统中,由于用户请求可能会被路由到不同的服务器上,因此,如何在多台服务器之间共享session数据成为了一个挑战。这就是“用redis共享session”这个主题所关注的核心问题。 Redis是一个高性能的键值数据库...
【hibernate与Session详解】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库...学习并熟练掌握Hibernate和Session,对于提升Java开发的效率和质量有着重要的作用。
与Web开发中的`HttpSession`不同,`Hibernate Session`与JDBC的`Connection`更为相似,负责处理数据的持久化操作。`Session`具有短暂的生命周期,通常在一次数据库事务的开始和结束之间创建和关闭。 `Session`具有...
为了实现这一目标,就需要解决不同服务器间Session共享的问题。Spring-Session正是为此而设计的一个框架,它提供了一种机制来存储用户的会话信息至中央数据存储区,如Redis等,从而实现跨服务共享。 #### 一、...
使用Session,开发者可以存储用户的登录状态、购物车信息等,确保用户在不同页面间切换时数据的一致性。 接下来,我们讨论数据保持。在Web应用中,数据保持是指在用户离开页面或关闭浏览器后仍能保留某些信息的能力...
hibernate中session对象的状态详解
`Session`的内部维护了一个JDBC的`Connection`对象,而`Transaction`则管理着`Connection`上的事务状态。`SessionFactory`是`Session`的工厂,负责创建和配置`Session`。`SessionFactory`一般在应用启动时创建并缓存...
在现代Web应用开发中,Session共享是一个常见的需求,特别是在分布式系统中。Spring框架结合Redis作为Session存储机制,能够有效地...通过合理配置和实践,你可以轻松地在不同的Web服务器之间共享用户的Session数据。
* Connection reset by peer:Connection reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器端之间的连接断开后,导致连接的一端继续发送数据,引发该异常。 实践经验 通过实践经验,我们可以...
本篇将详细讲解如何在Hibernate中手动获取Session,以及涉及到的相关配置和连接管理。 首先,理解Hibernate的核心组件——Session。Session是Hibernate中的工作单元,它是与数据库交互的主要接口,负责保存、更新和...
创建一个简单的Servlet或Controller,模拟用户登录,然后在不同的服务器实例上访问,检查是否能正确获取到Session中的用户信息。 以上步骤完成后,你应该已经成功地整合了Spring和Redis,实现了基于Redis的Session...
默认情况下,Session信息存储在服务器的内存中,当服务器集群时,每个服务器都有自己的Session,导致用户在集群中的不同服务器之间切换时,Session信息无法共享,造成用户体验下降。 为了解决这个问题,我们可以...
使用Apache HttpClient库可以更方便地处理session共享,因为它提供了更强大的功能和更好的API,但基本原理相同:保存和发送Cookie以保持会话状态。如果你的项目已经包含了HttpClient库,可以考虑使用它来替代...
`read()`和`write()`分别用于读取和写入Session数据,`destroy()`用于删除指定的Session,`gc()`则负责定期清理过期的Session。 接下来,我们需要注册这个自定义的Session处理器: ```php $db_conn = new mysqli('...
分布式Session是现代Web应用在高并发、分布式部署环境中解决用户会话一致...在实际开发过程中,还可以根据具体需求调整Redis配置,比如设置Session过期策略、使用Sentinel或Cluster等,以满足不同的性能和可靠性需求。
- **connection()**:获取Session与数据库的连接,用于低级别操作。 - **close()**:关闭Session,释放资源,包括关闭JDBC连接。 - **cancelQuery()**:取消当前执行的查询。 5. **线程安全**: Session不是...