ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Beitrag von Tom »

Huhu.

In einer Topologie, die (u.a.) auf einem Terminal Server läuft, haben alle Nutzer, die sich auf den ADS verbinden, unter den meisten Installationsumständen den gleichen Nutzernamen. Wenn man mit sp_mgGetConnectedUsers() weitere Informationen hierzu abruft, bekommt man z.B. den tatsächlichen Benutzernamen, mit dem die Windows-Anmeldung erfolgt ist, außerdem die IP und noch ein paar Infos. Leider ist zumindest bei mir die "ConnNumber" immer und in allen Fällen 0 (Null), und das ist leider auch die einzige andere Möglichkeit, über sp_mgGetUserTables() herauszufinden, wer welche Tabellen geöffnet hält. Also: Ich habe "TERMINAL SERVER USER" dreimal als ADS-Benutzer, und alle drei haben Connection Number 0. Ich sehe zwar drei unterschiedliche Verbindungen, aber über sp_mgGetUserTables() mit "TERMINAL SERVER USER" bekomme ich immer dieselben Tabellen - nämlich die, die alle drei Benutzer geöffnet haben. Alternativ mit der Connection Number (0) ist es dasselbe.

Jemand eine Idee dazu?
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Beitrag von Marcus Herz »

Das Feld TSAddress ist eigentlich genau dafür da. Hab nur keinen Terminalserver um das zu verifizieren.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Beitrag von Tom »

Ja, TSAddress wechselt (es enthält Infos wie "IPC Connection <n>", wobei "n" tatsächlich eine iterierende Verbindungsnummer zu sein scheint), aber ich kann es nicht als Abrufparameter für sp_mgGetUserTables() verwenden. Das kennt, wenn ich das richtig sehe, nur UserName und ConnNumber, und die sind für alle TS-User in dieser Situation gleich.
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Beitrag von Marcus Herz »

Das scheint nicht vorgesehen zu sein, über eine IP ADresse die geöffneten Tabelle abzufragen.
Ein Workaround könnte sein:
sp_mgGetAllTables => alle geöffneten Tabellen ermitteln, und dann je Tabelle

sp_mgGetTableUsers abfragen, hier kommt die TSAddress wieder ins Spiel
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Beitrag von Tom »

Hallo, Marcus.

Ja, das ist der Weg. sp_mgGetTableUsers() liefert u.a. TSAddress und OSLoginUserName zu jeder Tabelle mit, und damit liegt die benötigte Information vor, wenn ich rückwärts gehe. Danke!
adsopentables.png
adsopentables.png (32.21 KiB) 1639 mal betrachtet
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Beitrag von Marcus Herz »

ConnNumber (O)
NetWare connection number. (Deprecated)
um das abzuschliessen
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Beitrag von Tom »

um das abzuschliessen
Danke für den Hinweis, flog gestern irgendwann auch an mir vorbei, aber in meiner gefühlten Erinnerung habe ich gelegentlich noch Connection Numbers > 0 gesehen, obwohl seit Jahrhunderten definitiv nirgendwo mehr NetWare im Einsatz ist. :wink:

Die aufeinander aufbauende Nutzung der Stored Procedures funktioniert einwandfrei, allerdings stieß ich dann ziemlich schnell auf ADS Error 7216, was mir vorher, bei der direkten Nutzung der API-Funktionen nie passiert ist. Abhilfe schaffte es, mit sp_SetStatementLimit(0) die Anzahl der Statements je Connection vom Limit auf 50 zu befreien.

Danke nochmals! :)
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Beitrag von Marcus Herz »

Der Fehler 7216 macht mich stutzig. Ich kenn zwar deine Schleife nicht, aber bist du dir sicher, alle Handles wieder zu schliessen? Mehr als 50 aktive SQL Abfragen gleichzeitig je User?
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Beitrag von Tom »

Du könntest recht haben, da stimmt möglicherweise was nicht. Danke für den Hinweis.

Edit: Stimmt, es fehlte das Schließen des Statements. Auch die Anzahl der genutzten Workareas ist vorher explodiert, jetzt ist alles fein.
Herzlich,
Tom
Antworten