HOW TO

Bericht darüber, wie lange eine Sitzung in Oracle inaktiv war

Last Published: November 4, 2020

Zusammenfassung

In der folgenden Anleitung wird beschrieben, wie sich alle verbundenen Sitzungen mit der jeweiligen Dauer der Inaktivität (Zeitspanne seit im Rahmen der Sitzung zuletzt eine SQL-Anweisung ausgeführt wurde) anzeigen lassen.

Hinweis: Die ArcSDE-Software, einschließlich Anwendungsserver, Befehlswerkzeugen und SDK mit C- und Java-APIs, wird in ArcSDE 10.2.2 nicht mehr unterstützt und nicht mehr ausgeliefert. ArcGIS-Software-Features wurden zwar nicht mehr unterstützt, aber nicht sofort entfernt, um für die Kunden eine Abwärtskompatibilität bereitzustellen und einen möglichst langen Vorlauf für die Implementierung neuerer Technologien zu ermöglichen.

Vorgehensweise

Mit der folgenden anonymen PL/SQL-Prozedur lassen sich alle Sitzungen mit der jeweiligen Dauer der Inaktivität anzeigen (sofern die gemeldete Zeitspanne größer als 0 ist).
Zum Ausführen der Prozedur sind SELECT-Berechtigungen für die Tabelle "V$SESSION" erforderlich. Führen Sie daher die anonyme PL/SQL-Prozedur als SYS- oder SYSTEM-Benutzer in SQL*Plus aus.
  1. Rufen Sie SQL*Plus als SYS- oder SYSTEM-Benutzer auf, und führen Sie die anonyme PL/SQL-Prozedur aus.
Code: 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 -- Total number of seconds waited... 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 -- Total number of minutes waited... 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 -- Total number of hours waited... 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.
Anhand der Ausgabe ist zu sehen, dass der Benutzer "usdomain\tb" mit der Oracle-SID (145) 0 Tage, 54 Minuten und 46 Sekunden inaktiv war, während der SDE-Benutzer mit der Oracle-SID (137) 3 Tage, 3 Stunden, 17 Minuten und 16 Sekunden inaktiv war.
Zu wissen, wie lange eine Sitzung inaktiv war, hilft möglicherweise bei der Entscheidung, ob die Sitzung beendet werden soll oder ob der Benutzer nicht produktiv ist.

Artikel-ID:000010312

Hilfe von ArcGIS-Expert*innen erhalten

Technischen Support kontaktieren

Die Esri Support-App herunterladen

Zu den Download-Optionen

Weitere Informationen zu diesem Thema erkunden