Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle会话由不同的web客户端共享-weblogic_Oracle_Oracle10g_Weblogic_Weblogic12c - Fatal编程技术网

Oracle会话由不同的web客户端共享-weblogic

Oracle会话由不同的web客户端共享-weblogic,oracle,oracle10g,weblogic,weblogic12c,Oracle,Oracle10g,Weblogic,Weblogic12c,这会导致问题,因为我们的过程使用基于会话的全局临时表;有充分的理由需要它。一个web客户端的操作会干扰另一个web客户端的操作。为什么同一个Oracle会话由单独的客户端重复使用 存在连接池和Web逻辑。我已经打印了以下内容,以确认确实有两个客户端被分配了相同的oracle会话 SELECT SYS_CONTEXT ('USERENV', 'INSTANCE'), SYS_CONTEXT ('USERENV', 'SID'), SYS_CONTEXT ('USEREN

这会导致问题,因为我们的过程使用基于会话的全局临时表;有充分的理由需要它。一个web客户端的操作会干扰另一个web客户端的操作。为什么同一个Oracle会话由单独的客户端重复使用

存在连接池和Web逻辑。我已经打印了以下内容,以确认确实有两个客户端被分配了相同的oracle会话

SELECT SYS_CONTEXT ('USERENV', 'INSTANCE'),
       SYS_CONTEXT ('USERENV', 'SID'),
       SYS_CONTEXT ('USERENV', 'SESSIONID')
  FROM DUAL;

如何确保每个客户端获得不同的会话(不是HTTP会话,而是Oracle会话)?这是WebLogic级别需要修改的东西吗?

< P>如果你在中间层使用连接池,那么一旦你的中间层代码关闭连接,它就返回到池中,并且可以被另一个中间层会话使用。如果您试图使用全局临时表来存储超过中间层关闭连接点的数据,那么您就做错了

您可以设计和构建中间层,使其不使用连接池,并使每个中间层会话打开一个仅由该用户使用的私有数据库连接。这通常是一个可怕的想法,但是,由于您通常会花费大量时间打开和关闭数据库连接,因此当应用程序用户只是离开站点而不是显式注销时,您最终会遇到数千个孤立的数据库连接,为了达到负载平衡的目的,让不同的应用服务器在不同的时间点为同一用户提供服务将变得非常困难


更好的方法是去掉全局临时表,将所需的任何数据存储在一个永久表中,该永久表包含作为密钥一部分的唯一会话ID。您需要编写代码在某个时刻清除数据,但这应该不会非常困难。

几个问题。首先感谢您的回复。(1) 您所指的唯一会话密钥是什么“一个包含唯一会话ID作为密钥一部分的永久表”。您指的是Java会话id吗?因为正如我在问题中提到的,整个问题是因为DB会话id为不同的用户/客户端显示相同的值。(2) 那么,您是否反对web应用程序上下文中基于会话的GTT?我的意思是,关于一个网站,还有什么其他的全局临时表的应用呢?例如,购物车是如何实现的?@user2275460-中间层分配的“唯一会话密钥”可以标识应用程序会话。是的,我很难想象在基于web的应用程序中使用GTT的情况。我无法想象使用GTT来构建购物车。我希望有一个永久表,很可能是我用来跟踪订单的表,购物车处于
shopping
状态。在这种情况下,您可能希望将购物车键入用户,而不仅仅是应用程序会话。@user2275460-例如,我的Amazon购物车中有一些已经存在数月的项目。我可以保证Amazon并没有为我打开一个专用的数据库连接,将该数据库连接与我在此期间从几十台机器打开的每个应用程序会话相关联,并将GTT中的数据与保存的项目一起呈现给我。