[gelöst] Trennen von inaktiven Datenbanksessions

18. September 2008 14:49

Hallo zusammen,

gibt es irgendeine Möglichkeit, User aus der Datenbank zu werfen,
wenn z.B. eine Stunde lang keine Benutzereingabe mehr registriert wird?
Am Besten wäre eine Lösung seitens NAV, da eine Trennung über den SQL Server
in Bezug auf Transaktionen ja gefährlich werden könnte
Zuletzt geändert von Gollum83 am 18. September 2008 15:50, insgesamt 1-mal geändert.

Re: Trennen von inaktiven Datenbanksessions

18. September 2008 15:00

Auf mibuso.com gibt es zahlreiche Beiträge zu diesem Thema, jedoch glaube ich, dass sie alle ein externes Tool benötigen.

Prinzipiell müsste es aber auch von NAV selbst möglich sein, die Sessions zu überwachen:
Eine festgelegte Session, welche sowieso durchgehend läuft (z. B. eine Session für Objektaufrufplaner oder ein NAS, ...) lässt gleichzeitig eine Codeunit mitlaufen, welche (mittels Navision-Timer) in regelmäßigen Abständen die Leerlaufzeit der anderen User prüft.
Überschreitet ein User diese Leerlaufzeit, so löscht diese "Überwachungs-Session" einfach den Eintrag aus der Session-Tabelle (am Besten mit Session.DELETE(TRUE);).

Dies habe ich noch nie ausprobiert, es müsste aber so ungefähr funktionieren.

Wichtig: Es darf nur in einer einzigen Session diese "Überwachungs-Codeunit" gestartet sein, da es sonst keine inaktiven Sessions mehr gäbe.
(Logisch, denn dann wären ja alle Sessions ständig aktiv, weil sie permanent inaktive Sessions suchen.)

Re: Trennen von inaktiven Datenbanksessions

18. September 2008 15:49

Hallo Timo

Vielen Dank für die Hinweise.
Ich habe auf mibuso folgendes gefunden:
Code:
OBJECT Codeunit 50025 NAS session monitor
{
  OBJECT-PROPERTIES
  {
    Date=10/21/07;
    Time=[ 8:15:10 PM];
    Modified=Yes;
    Version List=Mibuso,ara3n;
  }
  PROPERTIES
  {
    SingleInstance=Yes;
    OnRun=BEGIN
            IF ISCLEAR(Timer) THEN
              CREATE(Timer);

            Timer.StartTimer(6000);
          END;

  }
  CODE
  {
    VAR
      Timer@1004 : Automation "{DDADD7CC-AD56-4CA6-9C85-22AE76BF21A1} 3.0:{E7414D60-2D83-44C7-826A-FD14557299F0}:'CP Timer'.cTimer" WITHEVENTS;
      Session@1000000000 : Record 2000000009;

    EVENT Timer@1004::TimerEvent@1();
    BEGIN
      Session.SETRANGE("My Session",FALSE);
      Session.SETFILTER("Idle Time",'>15 min');
      IF Session.FINDSET THEN REPEAT
        Session.DELETE;
        COMMIT;
      UNTIL Session.NEXT = 0;
    END;

    BEGIN
    END.
  }
}


Hab zum Test die CU im Client laufen lassen, und Session.SETFILTER("Idle Time",'>2 min'); festgesetzt.
Mein zweiter Testuser wurde nach 2 Minuten nichts tun tatsächlich rausgeschmissen.
Also sollte das ganze über den NAS wunderbar funktionieren.

Das mit den externen Tools habe ich nicht geprüft. Ich muss ganz ehrlich sagen,
diese Lösung scheint echt gut zu sein.

Vielen Dank

Re: Trennen von inaktiven Datenbanksessions

18. September 2008 16:02

Gollum83 hat geschrieben:Das mit den externen Tools habe ich nicht geprüft. Ich muss ganz ehrlich sagen,
diese Lösung scheint echt gut zu sein.

Ich bevorzuge immer die "interne Lösung" und greife nur auf externe Tools zurück, wenn es definitiv nicht mit NAV-Boardmitteln abbildbar ist.
Bei einfachen DLLs/OCX bediene ich mich der
:greenarrow: [Navision24.de] Automatische Dateiregistrierung
Dieses kleine Tool hilft bei der automatischen Verteilung solcher Dateien.

Re: [gelöst] Trennen von inaktiven Datenbanksessions

18. September 2008 16:40

Da bin ich komplett der gleichen Meinung. Man schafft sich sonst nur unnötig Probleme.
Danke für den Link mit dem File Registration Tool

Re: [gelöst] Trennen von inaktiven Datenbanksessions

18. September 2008 18:12

Gollum83 hat geschrieben:Danke für den Link mit dem File Registration Tool
Den Dank reiche ich dann mal an Marc Teuber weiter, denn er hat das Tool geschrieben.
(Wobei ich die Tabellen bei mir mandantenübergreifend definiert habe, da die Dateien nur einmal pro Arbeitsplatz (und nicht noch zusätzlich pro Mandant) registriert werden brauchen.)

Re: [gelöst] Trennen von inaktiven Datenbanksessions

19. September 2008 08:09

ok. einverstanden...

Re: [gelöst] Trennen von inaktiven Datenbanksessions

14. Januar 2009 15:07

Hi,

ich hatte selbige Anforderung, die inaktiven Sessions zu löschen. Habe dafür eine analoge Funktion geschrieben. Diese funktioniert auch sauber über den NAS, aber nur, wenn der NAS auf eine NATIVE-Datenbank geht.
Bei der NASSQL.EXE habe ich das Problem, dass die Session-Tabelle immer nur 1 Datensatz beinhaltet (nämlich die eigene Session).

Ich vermute, dies ist ein Bug in der NASSQL.EXE, da es mit der NAS.EXE funktioniert.
Ich verwende übrigens NAV 5.0 SP1 und SQL-Server 2005 bzw. 2008

Hat irgendjemand eine Idee, vielleicht ob es diesebezüglich bereits ein Hotfix seitens MS gibt?

Re: [gelöst] Trennen von inaktiven Datenbanksessions

14. Januar 2009 15:13

masch hat geschrieben:Bei der NASSQL.EXE habe ich das Problem, dass die Session-Tabelle immer nur 1 Datensatz beinhaltet (nämlich die eigene Session).


Hat der NAS User (also der Service Account) entsprechende Datenbank bzw. Systemrechte auf dem SQL Server bzw. der Datenbank? Ein kurzer Versuch mit db_owner oder sysadmin dürfte klären, ob es sich um fehlende Berechtigungen handelt.

Re: [gelöst] Trennen von inaktiven Datenbanksessions

14. Januar 2009 15:40

genau das war's. Vielen Dank für den Tipp.
Ich hatte bei meinem Datenbank-Login zwar sysadmin-Rechte, nicht aber mit meinem Window-Login.

Es ist schon echt was Wert, dass es so ein super Forum mit echt kompetenten Leuten gibt. Vielen Dank dafür

Re: [gelöst] Trennen von inaktiven Datenbanksessions

14. Januar 2009 16:42

Hi,
du könnest auch auf dem sql server dem benutzer die Permission "View server permissions” erteilen.
damit gehts auch

Re: [gelöst] Trennen von inaktiven Datenbanksessions

15. Juli 2009 13:00

Hallo zusammen,

ich stand jetzt auch vor der Aufgabe die inaktiven Sessions zu entfernen. Dabei ist mir aufgefallen, das Nutzer die mit Windowsauthentifizierung
angemeldet sind zwar aus der Tabelle Sessions entfernt werden. Sie erhalten aber keine Meldung das die Verbindung zum Server nicht mehr
existiert und können problemlos mit Navision weiterarbeiten. Scheinbar gibt es eine Reconnect sobald der Benutzer wieder im Navision arbeitet, sodaß die Session immer wieder neu in die
Sessiontabelle eingetragen wird. Jetzt weiß ich allerdings nicht was passiert wenn die Session aus der Tabelle entfernt wird, der Nutzer noch nicht wieder mit Navision
arbeitet und ein weiterer Nutzer sich anmelden will. Gibt es da irgendwelche Inkonsistenzen? Kann mir dazu jemand eine Auskunft geben?
Es ist eine 5.0 SP1 DB auf einem SQL-Server.

Viele Grüße

Frank

Re: [gelöst] Trennen von inaktiven Datenbanksessions

10. September 2009 10:43

Hallo,

ich bekommen folgende Fehlermeldung wenn ich Sessions über den NAS entfernen möchten(analog zu Codeunit 50025 NAS session monitor )
siehe Screenshot.
ist die Fehlermeldung jemandem bekannt?
Danke
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst] Trennen von inaktiven Datenbanksessions

22. Januar 2014 19:17

fragglet hat geschrieben:ich stand jetzt auch vor der Aufgabe die inaktiven Sessions zu entfernen. Dabei ist mir aufgefallen, das Nutzer die mit Windowsauthentifizierung
angemeldet sind zwar aus der Tabelle Sessions entfernt werden. Sie erhalten aber keine Meldung das die Verbindung zum Server nicht mehr
existiert und können problemlos mit Navision weiterarbeiten. Scheinbar gibt es eine Reconnect sobald der Benutzer wieder im Navision arbeitet, sodaß die Session immer wieder neu in die
Sessiontabelle eingetragen wird. Jetzt weiß ich allerdings nicht was passiert wenn die Session aus der Tabelle entfernt wird, der Nutzer noch nicht wieder mit Navision
arbeitet und ein weiterer Nutzer sich anmelden will. Gibt es da irgendwelche Inkonsistenzen? Kann mir dazu jemand eine Auskunft geben?
Es ist eine 5.0 SP1 DB auf einem SQL-Server.



Konnte diese Problem behoben werden? Bei mir geht es um NAV2009R2 mit SQL-Server.

Gruß t000bi