Oracle打包多个 session 的全局变量

标签 oracle session variables jdbc package

我有一个 Oracle 包,其中包含一些全局变量,这些全局变量已在该包的所有过程中初始化和使用。

当我调用过程(通过jdbc连接和调用)时,全局变量被正确初始化,并且它们的值在打开的数据库 session 上的所有过程中持续存在,但是当我有多个jdbc连接时,全局变量值似乎在调用之间混合。

Oracle session 不是根据包变量进行隔离的吗?我需要对数据库或用户配置文件进行一些配置来保证隔离吗?

我的数据库实例位于具有 2 个节点的 RAC 中。

最佳答案

每个数据库 session 都有自己的一组变量,是的。

我希望您的 Java 应用程序使用连接池,以便您的 Java 应用程序不断从池中获取连接并将它们返回到池中。如果是这种情况,那么 Java session 和 Oracle session 之间就没有关系。特定的 Java session 可能会使用 Oracle session A 进行第一次调用,使用 Oracle session B 进行第二次调用,使用 C 进行第三次调用,并再次使用 B 进行第四次调用。其他 session 也会做同样的事情,因此 session B 的状态可能在两次调用之间发生变化,因为其他一些 Java session 在此期间使用了它。

当 session 返回到池中时,某些连接池实现会显式清除包变量,以便数据不会从一个 session 泄漏到另一个 session 。其他实现将允许不同的 Java session 查看包变量,无论它们在先前的调用中处于何种状态。无论哪种情况,将包中的状态作为企业 Java 应用程序的一部分来维护都是一个坏主意。

您可能想要一个全局上下文,但很难确定这一点,因为我们不知道您试图用包变量解决什么问题。

关于Oracle打包多个 session 的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40595011/

相关文章:

php - 实时了解用户在我的站点中

java - java中的sql变量查询

Javascript - 变量值是另一个变量的名称

regex - 将变量传递给awk并在正则表达式中使用它

oracle - 如何获取oracle数据库中varchar2的声明大小

c# - 在使用 session 登录时记住我

sql - Oracle 11g - 使用 RegEx 检查约束

php - 丢失第二页上的数据库 session 数据

SQL - 查找两个表的行顺序差异

php - 在浏览器中连接oracle