Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Anzahl lesen pro Tabelle (https://www.delphipraxis.net/197356-anzahl-lesen-pro-tabelle.html)

Pfaffe 1. Aug 2018 13:33

Datenbank: ADS • Version: 12 • Zugriff über: Delphi ADS direkt

Anzahl lesen pro Tabelle
 
Advantage Database Server V12 - Dictionary wird verwendet.
Gibt es eine Möglichkeit die Anzahl der Lesezugriffe auf eine Tabelle zu ermitteln?
Mit einem Trigger geht es scheinbar nicht.

joachimd 1. Aug 2018 14:26

AW: Anzahl lesen pro Tabelle
 
Zitat:

Zitat von Pfaffe (Beitrag 1409349)
Advantage Database Server V12 - Dictionary wird verwendet.
Gibt es eine Möglichkeit die Anzahl der Lesezugriffe auf eine Tabelle zu ermitteln?
Mit einem Trigger geht es scheinbar nicht.

Falls Du nur wissen willst, wer wann die Tabelle geöffnet hat, kannst Du database trigger verwenden. Das ist aus einem meiner Workshops:
Code:
CREATE TABLE logtable(ts timestamp, event memo);

CREATE TRIGGER trig_opentable ON DATABASE AFTER OPEN_TABLE
BEGIN
  DECLARE @info STRING;
  if __info.tablename <> 'logtable' then
    @info = trim(__info.UserName)+' opened table '+
    trim(__info.tablename);
    INSERT INTO logtable VALUES(now(), @info);
  end;
END;

CREATE TRIGGER trig_closetable ON DATABASE AFTER CLOSE_TABLE
BEGIN
  DECLARE @info STRING;
  if __info.tablename <> 'logtable' then
    @info = trim(__info.UserName)+' closed table '+
    trim(__info.tablename);
    INSERT INTO logtable VALUES(now(), @info);
    end;
  END;
Schreib für jedes Öffnen Timestamp, user, tablename mit und werte es entsprechend aus.

Frickler 1. Aug 2018 15:13

AW: Anzahl lesen pro Tabelle
 
Zitat:

Zitat von joachimd (Beitrag 1409357)
Falls Du nur wissen willst, wer wann die Tabelle geöffnet hat, kannst Du database trigger verwenden. Das ist aus einem meiner Workshops:

Schreib für jedes Öffnen Timestamp, user, tablename mit und werte es entsprechend aus.

Das Beispiel steht so ähnlich auch in der Onlinedoku. Aber da heißt es auch, wenn Caching aktiv ist und die Tabelle mehrfach nacheinander geöffnet wird, wie es SQL SELECT macht, dann bekommt man damit nur die erste Öffnung mit.

Da gäbs ja auch noch Management-SPs, die die gerade offenen Queries anzeigen mit einer Query-ID. Wenn man die jede Sekunde aufruft... ist aber auch doof. Die exakte Zahl der Aufrufe kann man vermutlich nur direkt im Programm lösen:
Per GRANT allen betroffenen Usern den direkten SELECT Zugriff auf die Tabelle verbieten.
Dann den Zugriff via SP machen und dort das Logging abhandeln.
Ist aber aufwendig.

joachimd 1. Aug 2018 15:25

AW: Anzahl lesen pro Tabelle
 
Zitat:

Zitat von Frickler (Beitrag 1409369)
Das Beispiel steht so ähnlich auch in der Onlinedoku. Aber da heißt es auch, wenn Caching aktiv ist und die Tabelle mehrfach nacheinander geöffnet wird, wie es SQL SELECT macht, dann bekommt man damit nur die erste Öffnung mit.

Habs gerade mit mehreren Benutzerzugängen und Tabellen mit aktiviertem Caching getestet. Jedes Öffnen und Schließen einer Tabelle wird geloggt - beim direkten Tabellenzugriff. Bei Static Cursorn (zB Joins) kann es vorkommen, dass die Tabellenoperation nicht mitgeschrieben wird.
Ohne SQL (direkter Tabellenzugriff über TAdsTable) wird immer mitgeschrieben.

Von einem Polling der Management API würde ich aus Performancegründen dringend abraten, ebenso vor der Verwendung von Stored Procedures.

Was hat der Initiator dieses Threads eigentlich genau vor?

Frickler 1. Aug 2018 15:38

AW: Anzahl lesen pro Tabelle
 
Zitat:

Zitat von joachimd (Beitrag 1409371)
Von einem Polling der Management API würde ich aus Performancegründen dringend abraten, ebenso vor der Verwendung von Stored Procedures.

Den Tipp mit der SP habe ich aus Deinem Buch(*) ;)

Zitat:

Zitat von joachimd (Beitrag 1409371)
Was hat der Initiator dieses Threads eigentlich genau vor?

Vielleicht eine Art Datenschutz-Auditing a la "wer schaut wann/wie oft in die Kundendaten".


---
(*) ok, da gings um UPDATE statt SELECT, aber der Mechanismus wäre gleich.

Pfaffe 1. Aug 2018 18:02

AW: Anzahl lesen pro Tabelle
 
Danke.
Habe mein Problem anders lösen können.
Das Öffnen und Schliessen hätte nicht gereicht.

p80286 1. Aug 2018 18:38

AW: Anzahl lesen pro Tabelle
 
Zitat:

Zitat von Pfaffe (Beitrag 1409397)
Danke.
Habe mein Problem anders lösen können.
Das Öffnen und Schliessen hätte nicht gereicht.

Das ist schön, so richtig wissen wir nicht was Dein Problem war, aber Du hast es gelöst.
Wie Du das gemacht hast, wissen wir auch nicht.

Das ist gut, weil, wenn demnächst jemand das gleiche Problem hat, können wir ihm nicht schreiben, da gibt es schon eine Lösung.

Gruß
K-H

Pfaffe 1. Aug 2018 22:24

AW: Anzahl lesen pro Tabelle
 
Oha, es handelte sich nicht um ein IT-Problem. Letztendlich konnte ich es auch ohne IT lösen. Auf Details möchte ich nicht eingehen.
In meiner Verzweiflung hatte ich gedacht, es wäre irgendwie möglich, meine Problemstellung durch Zählen von Lesezugriffe auf eine Datenbanktabelle zu lösen.
Wie an den Antworten schnell erkennbar war, ist diese nicht möglich.

KodeZwerg 1. Aug 2018 22:32

AW: Anzahl lesen pro Tabelle
 
Es gäbe auch Datei/Pfad-Monitoring zu erwähnen. Da ich leider nicht weiß um was es sich handelt kann das natürlich auch falsch sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz