PLSQL专项学习之DBMS_SESSION包

11 篇文章 0 订阅

DBMS_SESSION

这个包提供了从PL/SQL访问SQL ALTER SESSION和SET ROLE语句,以及其他会话信息。可以使用DBMS_SESSION设置首选项和安全级别。

本章包括以下主题:

               安全模型  

              操作记录 

  • DBMS_SESSION用法 
  • 数据结构
  • DBMS_SESSION子程序的摘要

 安全模型:

这个包使用调用用户的特权运行,而不是包所有者SYS。

操作记录:

您不应该试图打开或关闭close_cached_open_cursor。

数据结构:
DBMS_SESSION包定义表类型。

Table Types

  • INTEGER_ARRAY Table Type
  • LNAME_ARRAY Table Type

INTEGER_ARRAY Table Type

 BINARY_INTEGER表类型,一种PLSQL类型,plsql类型是不能在sql环境中使用的,比如建表时。 

语法:

TYPE integer_array IS TABLE OF BINARY_INTEGER INDEX BY BINARY_INTEGER;


LNAME_ARRAY Table Type

 VARCHAR2表类型,一种字符串类型。

Syntax

TYPE lname_array IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;

 

DBMS_SESSION子程序的摘要

1.  CLEAR_ALL_CONTEXT

说明:清除所有上下文信息。

语法:DBMS_SESSION.CLEAR_ALL_CONTEXT(namespace VARCHAR2);

其中,namespace指应用程序上下文信息的名称空间。

注意事项:a. 此过程必须由受信任的包直接或间接调用。

                  b. 上下文值中的任何更改都会立即反映出来,随后通过SYS_CONTEXT访问该值的调用会返回最近的值。

2. CLEAR_CONTEXT

说明:用于清除应用上下文的属性设置
语法:dbms_session.clear_context(namespace varchar2,client_identifier varchar2,attribute varchar2);
其中client_identifier只适用于全局上下文。

3. CLEAR_IDENTIFIER

说明:用于删除会话的set_client_id.
语法:dbms_session.clear_identifier();

4. CLOSE_DATABASE_LINK

说明:此过程关闭一个打开的DATABASE  LINK。相当于下面的SQL语句:

ALTER SESSION CLOSE DATABASE LINK <name>

语法:DBMS_SESSION.CLOSE_DATABASE_LINK ( dblink VARCHAR2);

5. FREE_UNUSED_USER_MEMORY

此过程在执行需要大量内存(超过100K)的操作后 回收未使用的内存。

使用大量内存的操作示例包括:

a. 使用整个sort_area_size和sort_area_size为数百KB的大型排序。

b. 编译大型PL/SQL包、过程或函数。

c. 在PL/SQL索引表中存储数百KB的数据。

语法:dbms_session.pree_unused_user_memory; 这个过程应该只在内存不足的情况下使用。

6. GET_PACKAGE_MEMORY_UTILIZATION 

说明:此过程描述静态包内存使用情况。

语法:

DBMS_SESSION.GET_PACKAGE_MEMORY_UTILIZATION (
   owner_names     OUT NOCOPY LNAME_ARRAY,
   unit_names      OUT NOCOPY LNAME_ARRAY,
   unit_types      OUT NOCOPY INTEGER_ARRAY,
   used_amounts    OUT NOCOPY INTEGER_ARRAY,
   free_amounts    OUT NOCOPY INTEGER_ARRAY);

7. IS_ROLE_ENABLED

说明:此函数确定是否为此会话启用了指定的角色。

语法:dbms_session.is_role_enabled(rolename varchar2) return boolean;
其中rolename指定角色名。返回true表示已激活,false表示未激活。
例子:set serveroutput on
begin
if dbms_session.is_role_enabled('DBA') then
dbms_output.put_line('激活了');
else dbms_output.put_line('没激活');
end if;
end;

8. IS_SESSION_ALIVE

说明:此函数确定指定的会话是否处于活动状态。

语法:dbms_session.is_session_alive(uniqueid varchar2) return boolean;
其中uniqueid指定会话ID号,处于活动返回true,否则false。

9. LIST_CONTEXT

说明:此过程返回当前会话的活动名称空间和上下文列表。

语法:

TYPE AppCtxRecTyp IS RECORD ( 
   namespace VARCHAR2(30), 
   attribute VARCHAR2(30),
   value     VARCHAR2(256)); 

TYPE AppCtxTabTyp IS TABLE OF AppCtxRecTyp INDEX BY BINARY_INTEGER; 

DBMS_SESSION.LIST_CONTEXT ( 
   list OUT AppCtxTabTyp, 
   size OUT NUMBER);

其中list用于取得当前会话的列表集,size用于返回列表个数。

10. MODIFY_PACKAGE_STATE

说明:用于修改当前会话的PL/SQL程序单元的状态
语法:dbms_session.modify_package_state(action_flags in pls_integer);
其中,action_flags指定pl/sql程序单元标记,当设置为1是,会释放plsql程序单元所占用的内存;2则会重新初始化pl/sql包。

11. SESSION_TRACE_DISABLE

说明:此过程为调用它的会话重置会话级SQL跟踪。客户端ID和服务/模块/操作跟踪不受影响。

语法:DBMS_SESSION.SESSION_TRACE_DISABLE;

12. SESSION _TRACE_ENABLE

说明:此过程支持调用会话的会话级SQL跟踪。调用此过程将导致对会话发出的每个SQL语句进行SQL跟踪。

语法:

DBMS_SESSION.SESSION_TRACE_ENABLE(
   waits     IN   BOOLEAN DEFAULT TRUE,
   binds     IN   BOOLEAN DEFAULT FALSE, 
   plan_stat IN   VARCHAR2 DEFAULT NULL);

waits,指定是否跟踪等待信息;binds,指定是否跟踪绑定信息;plan_stat,转储行源统计信息的频率。值应该是“NEVER”、“FIRST_EXECUTION”(相当于NULL)或“all_execution”。

13. reset_package
说明:此过程反实例化此会话中的所有包。它释放包状态。
语法:dbms_session.reset_package;

14. SET_CONTEXT

说明:

此过程设置上下文,其中有四种类型:本地会话、全局初始化、外部初始化和全局访问。

在它的五个参数中,只需要前三个参数;最后两个参数是可选的,仅在全局访问上下文中使用。

语法:

DBMS_SESSION.SET_CONTEXT (
   namespace VARCHAR2,
   attribute VARCHAR2,
   value     VARCHAR2,
   username  VARCHAR2,
   client_id VARCHAR2 );
ParameterDescription

namespace

要设置的应用程序上下文的名称空间,限制为30个字节

attribute

要设置的应用程序上下文的属性,限制为30字节

value

要设置的应用程序上下文的值,限制为4 kb。

username

应用程序上下文的数据库用户名属性。

默认值:空

client_id

应用程序上下文的特定于应用程序的client_id属性(最大64字节)。

默认值:空

15. SET_EDITION_DEFERRED

说明:此过程请求切换到指定版本。该开关在当前客户端调用结束时生效。

语法:DBMS_SESSION.SET_EDITION_DEFERRED ( edition IN VARCHAR2);

16. SET_IDENTIFIER

说明:用于设置会话的客户ID号。
语法:dbms_session.set_identifier(client_id varchar2);
其中client_id指定当前会话的应用标识符。

17. SET_NLS

说明:用于设置NLS特征,其作用与sql语句alter session set <nls_param>=<value>完全相同。
语法:dbms_session.set_nls(param varchar2,value varchar2);
其中param指定nls参数,value指定nls参数
例子:在sql*plus使用该过程
exec dbms_seesion.set_nls('nls_date_format','''YYYY-MM-DD''');
select sysdate from dual;

18. SET_ROLE

说明:用于激活或禁止会话角色,与sql语句set role作用完全相同。
语法:dbms_seesion.set_role(role_cmd varchar2);
例子:在sql*plus使用该过程激活或禁止角色如下
dbms_session.set_role('DBA')
dbms_session.set_role('none')

19. SET_SQL_TRACE

说明:用于激活或禁止当前会话的SQL跟踪,其作用与SQL语句alter session set sql_trace= 完全相同。
语法如下:dbms_session.set_sql_trace(sql_strace boolean);
其中sql_strace用于指定布尔值,true表示激活sql跟踪,false表示禁止。
例子:在sql*plus使用该过程
exec dbms_session.set_sql_trace(true);
exec dbms_session.set_sql_trace(false);

20. SWITCH_CURRENT_CONSUMER_GROUP

说明:用于改变当前会话的资源使用组

语法:

DBMS_SESSION.switch_current_consumer_group (
   new_consumer_group     IN  VARCHAR2, 
   old_consumer_group     OUT VARCHAR2, 
   initial_group_on_error IN  BOOLEAN); 

其中new_consumer_group指定新资源使用组;old_consumer_group指定原有资源实用组;initial_group_on_error指定布尔值,true表示出错后使用原有资源使用组。

21. UNIQUE_SESSION_ID

说明:此函数返回一个标识符,该标识符对于当前连接到此数据库的所有会话都是惟一的。在同一会话中对该函数的多次调用总是返回相同的结果。

语法:DBMS_SESSION.UNIQUE_SESSION_ID RETURN VARCHAR2;

例子:select dbms_session.unique_session_id from dual;

unique_session_id,返回最多24个字节。

完毕。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥真不错

您的鼓励,将是我最大的坚持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值