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
语法: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 );
Parameter | Description |
---|---|
|
要设置的应用程序上下文的名称空间,限制为30个字节 |
|
要设置的应用程序上下文的属性,限制为30字节 |
|
要设置的应用程序上下文的值,限制为4 kb。 |
|
应用程序上下文的数据库用户名属性。 默认值:空 |
|
应用程序上下文的特定于应用程序的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
语法: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个字节。
完毕。