暂无图片
Oracle Context(上下文)
最近更新:2023-03-27 11:16:12

一、上下文(Context)

上下文是在数据库实例内存中保存的一组"属性名称"-"属性值"对(name-value pairs),用户应用可以通过上下文中名称找到相对应的值。上下文组有一个标签(namespace)做为标识,用于区分不同的上下文组。上下文可以理解为一组全局变量,可用于细粒度的数据访问控制和审计;上下文的参数值都存放在缓存中,重复访问无需读取数据表,能提高访问效率。

image.png

系统预置上下文

这是数据库内部已经预设好了的上下文(如:USERENV),通过USERENV 上下文可以用户环境的相关变量参数。

函数USERENV 和SYS_CONTEXT 都可用来返回当前session 的信息,USERENV 是为了保持向下兼容而保留的函数,Oracle 推荐使用SYS_CONTEXT 函数调用系统内置的USERENV 上下文来获取相关信息。

例如:

  • USERENV 函数
select userenv('sessionid') from dual;
select userenv('language') from dual;
  • SYS_CONTEXT 函数
select sys_context('userenv','sessionid') sessionid from dual;
select sys_context('userenv','language') language from dual;

应用上下文(Application Context)

Application Context 是由用户应用建立的上下文。先用一个存储过程(procedure)来创建上下文标签(namespace),再用PL/SQL DBMS_SESSION 程序包中SET_CONTEXT 子程序为标签(namespace)建立上下文的"属性名称"-"属性值"对。

image.png

  1. 会话应用上下文:上下文数据保存在数据库的用户会话缓存。
  2. 全局应用上下文:上下文数据保存在SGA,能让非会话型的应用访问,也可为会话之间共享数据。
  3. 客户端会话应用上下文:在客户端以OCI(Oracle Call Interface)函数建立的用户会话上下文数据。
......