操作方法

操作方法:在 Oracle 中报告会话已空闲的时长

Last Published: November 4, 2020

摘要

提供的说明介绍了如何列出所有连接的会话并报告会话已空闲的时间(自会话上次执行了 SQL 语句以来的时长)。

注: ArcSDE 软件(包括应用程序服务器、命令工具以及带有 C 和 Java API 的 SDK)在 ArcGIS 10.2.2 中已弃用,不再进行分发。 ArcGIS 软件功能已弃用,但是不会立即将其移除,以便为客户提供向后兼容性,并且尽可能多地提前通知以采用更新的技术。

过程

以下匿名 PL/SQL 过程将报告每个会话以及该会话已空闲的时长(如果报告的时间大于 0)。
执行该过程需要 V$SESSION 表上的 SELECT 权限。 可以在 SQL*Plus 中以 SYS 或 SYSTEM 用户身份执行匿名 PL/SQL 过程。
  1. 在 SQL*Plus 中以 SYS 或 SYSTEM 用户身份进行连接,然后执行匿名 PL/SQL 过程。
代码: SQL> DECLARE 2 3 CURSOR session_cursor IS 4 SELECT username, sid, last_call_et 5 FROM v$session 6 WHERE username IS NOT NULL AND username NOT IN ('SYS','SYSTEM') 7 ORDER BY last_call_et; 8 9 num_mins NUMBER; 10 num_mins_sec NUMBER; 11 wait_secs NUMBER; 12 num_hours NUMBER; 13 num_hours_min NUMBER; 14 wait_mins NUMBER; 15 num_days NUMBER; 16 num_days_hours NUMBER; 17 wait_hours NUMBER; 18 wait_char_mins VARCHAR2(4); 19 wait_char_secs VARCHAR2(4); 20 21 BEGIN 22 23 DBMS_OUTPUT.PUT_LINE(chr(10)); 24 25 FOR idle_time IN session_cursor LOOP 26 27 -- 已等待的总秒数... 28 29 num_mins := trunc(idle_time.last_call_et/60); 30 num_mins_sec := num_mins * 60; 31 wait_secs := idle_time.last_call_et - num_mins_sec; 32 33 -- 已等待的总分钟数... 34 35 num_hours := trunc(num_mins/60); 36 num_hours_min := num_hours * 60; 37 wait_mins := num_mins - num_hours_min; 38 39 -- 已等待的总小时数... 40 41 num_days := trunc(num_hours/24); 42 num_days_hours := num_days * 24; 43 wait_hours := num_hours - num_days_hours; 44 45 DBMS_OUTPUT.PUT('User '||idle_time.USERNAME||'('||idle_time.SID||') has been idle for '||num_days||' day(s) '||wait_hours||':'); 46 47 IF wait_mins < 10 THEN 48 wait_char_mins := '0'||wait_mins||''; 49 DBMS_OUTPUT.PUT(''||wait_char_mins||':'); 50 ELSE 51 DBMS_OUTPUT.PUT(''||wait_mins||':'); 52 END IF; 53 54 IF wait_secs < 10 THEN 55 wait_char_secs := '0'||wait_secs||''; 56 DBMS_OUTPUT.PUT(''||wait_char_secs||''); 57 ELSE 58 DBMS_OUTPUT.PUT(''||wait_secs||''); 59 END IF; 60 61 DBMS_OUTPUT.NEW_LINE; 62 63 END LOOP; 64 65 END; 66 / User usdomain\tb(145) has been idle for 0 day(s) 0:54:46 User AGSSERVER(152) has been idle for 0 day(s) 0:54:46 User SNOOPY(151) has been idle for 1 day(s) 8:56:03 User SDE(137) has been idle for 3 day(s) 3:17:16 PL/SQL procedure successfully completed.
输出显示用户 usdomain\tb(Oracle sid (145))已空闲 0 天 54 分钟 46 秒,而 SDE 用户(Oracle sid (137))已空闲 3 天 3 小时 17 分钟 16 秒。
了解会话已空闲的时长可能有助于确定是否需要结束会话,或者用户的工作效率是否较低。

文章 ID:000010312

从 ArcGIS 专家处获得帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项

发现关于本主题的更多内容