问题:
你想要跟踪属于单个用户的多个会话。
方法:
你可以通过使用dbms_monitor包的client_id_trace_enable过程跟踪属于某个用户的多个会话。在执行dbms_monitor.client_id_trace_enable过程之前,你必须通过使用dbms_session包设置该会话的client_identifier,如下所示:
SQL> execute dbms_session.set_identifier('SH');
一旦你设置好,v$session视图中client_identifier列就填充了值。你可以通过执行以下语句确认v$session视图中client_identifier列的值:
SQL> select id, serial#, username from v$session where client_identifier = 'SH';
现在你就可以执行dbms_monitor.client_id_trace_enable过程了:
SQL> execute dbms_monitor.client_id_trace_enable(client_id=>'SH',waits=>true,binds=>false);
你也可以用以下命令禁止跟踪:
SQL> execute dbms_monitor.client_id_trace_disable(client_id='SH');
工作原理:
当多个用户使用相同的Oracle账号连接时,设置client_identifier列使得可以跟踪多个会话,特别是使用连接池的应用程序。client_id_trace_enable过程收集指定客户ID的所有会话的统计信息。你必须指定的client_id不必属于当前活动的会话。默认情况下,waits和binds参数设置为false,你可以在执行client_id_trace_enable过程时添加这两个参数以跟踪它们的信息:
SQL> execute dbms_monitor.client_id_trace_enable('SH',true,true);
PL/SQL procedure successfully completed.
你可以查询dba_enabled_traces视图查找使用client identifier执行过的跟踪状态。在该视图中,trace_type列显示出client_id的值,primary_id显示出client identifier的值。
SQL> select trace_type, primary_id, waits, binds from dba_enabled_traces;
TRACE_TYPE PRIMARY_ID WAITS BINDS
------------------- ----------------- --------- ---------
CLIENT_ID SH TRUE TRUE
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27795363/viewspace-745202/
,如需转载,请注明出处,否则将追究法律责任。