#DBMS_APPLICATION_INFO
DBMS_APPLICATION_INFO高级包用于注册应用程序的名称和操作,便于审核、性能跟踪以及资源使用情况观测。应用程序的名称和操作信息将记录在V$SESSION、V$SQL和V$SQLAREA视图中。
Note:
- DBMS_APPLICATION_INFO高级包仅适用于单机部署。
- 通过调用DBMS_APPLICATION_INFO相关过程所设置的模块名(module_name)和操作名(action_name)不会因当前会话退出而删除,在任意会话中再次执行同一模块/操作时会直接复用对应的名称,您也可以再次调用相关过程设置新的名称。
# READ_CLIENT_INFO
DBMS_APPLICATION_INFO.READ_CLIENT_INFO (
client_info OUT VARCHAR2);
READ_CLIENT_INFO用于获取当前会话的client_info字段的值。此外,可以通过查询V$SESSION视图获取客户端信息。
参数 | 描述 |
---|---|
client_info | 截至目前最后一次调用SET_CLIENT_INFO所设置的客户端信息。 |
# READ_MODULE
DBMS_APPLICATION_INFO.READ_MODULE (
module_name OUT VARCHAR2,
action_name OUT VARCHAR2);
READ_MODULE用于获取当前会话的模块和操作字段的值。此外,可以通过查询V$SQL视图或V$SQLAREA视图获取已注册的应用程序的模块和操作名称。
参数 | 描述 |
---|---|
module_name | 截至目前最后一次调用SET_MODULE所设置的模块名称。 |
action_name | 截至目前最后一次调用SET_ACTION或SET_MODULE所设置的操作名称。 |
# SET_MODULE
DBMS_APPLICATION_INFO.SET_MODULE (
module_name IN VARCHAR2,
action_name IN VARCHAR2);
SET_MODULE用于设置当前模块及模块中操作的名称。
名称是模块/操作(实际动作)的描述性文本,建议在开始执行某个模块/操作前先调用此过程设置模块和操作的名称并在模块/操作执行完后再次调用此过程将名称更新为下一模块/操作的名称或置为NULL(若结束时不及时更新名称或置NULL会继续使用前一名称记录后续的模块/操作),从而保障名称(描述文本)与模块/操作(实际动作)的关联关系,正确记录事务更便于审核或性能跟踪。
参数 | 描述 |
---|---|
module_name | 当前正在运行的模块的名称,长度为[1,48]字节,超出部分将被截断。允许为NULL,表示不设置模块名称。 |
action_name | 当前模块中当前正执行的操作的名称,长度为[1,32]字节,超出部分将被截断。允许为NULL,表示不设置操作的名称。 |
# SET_ACTION
DBMS_APPLICATION_INFO.SET_ACTION (
action_name IN VARCHAR2);
SET_ACTION用于设置当前模块中当前操作的名称。
参数 | 描述 |
---|---|
action_name | 当前模块中当前正执行的操作的名称,长度为[1,32]字节,超出部分将被截断。允许为NULL,表示不设置操作的名称。 |
# SET_CLIENT_INFO
DBMS_APPLICATION_INFO.SET_CLIENT_INFO (
client_info IN VARCHAR2);
SET_CLIENT_INFO用于设置当前客户端信息的名称。
参数 | 描述 |
---|---|
client_info | 当前会话的客户端信息的名称,长度为[1,64]字节,超出部分将被截断。允许为NULL,表示不设置客户端信息。 |
示例(单机部署)
-- 设置客户端信息和模块信息
BEGIN
DBMS_APPLICATION_INFO.SET_CLIENT_INFO('Web Application');
DBMS_APPLICATION_INFO.SET_MODULE('Data Access', 'Querying Employees');
END;
/
-- 读取客户端信息和模块信息
DECLARE
client_info VARCHAR2(64);
module_name VARCHAR2(64);
action_name VARCHAR2(64);
BEGIN
DBMS_APPLICATION_INFO.READ_CLIENT_INFO(client_info);
DBMS_OUTPUT.PUT_LINE('Client Info: ' || client_info);
DBMS_APPLICATION_INFO.READ_MODULE(module_name, action_name);
DBMS_OUTPUT.PUT_LINE('Module Name: ' || module_name);
DBMS_OUTPUT.PUT_LINE('Module Name: ' || action_name);
END;
/