Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi kleine Frage zu ADO und Datenbanksperren (https://www.delphipraxis.net/88574-kleine-frage-zu-ado-und-datenbanksperren.html)

NerdIII 17. Mär 2007 12:34

Datenbank: MS SQL Server • Version: 2005 • Zugriff über: TADOConnection

kleine Frage zu ADO und Datenbanksperren
 
Hallo alle miteinander,

Ich bin in Sachen Transaktionen nicht sehr bewandert. Mein Kollege und ich sollen eine Datenbankanwendung schreiben. Es gibt eine Client-Anwendung, die aus dem Web abgerufen wird und ihre Daten im Internet auf einer MS SQL DB speichert. Die Datenbank besteht - wie so oft :) - aus mehreren Tabellen, die nach und nach verändert werden. Änderungen erfolgen mal hier mal da. Wenn die Anwendung beendet wird, muss die DB wieder konsistent sein. Hier empfiehlt sich eine Transaktion zu starten und erst zum Schluss zu committen. Soweit klar.

Jetzt gibt es aber auch noch eine Serveranwendung die in regelmäßigen Abständen eine Art Snapshot von einer großen Menge Kundendaten braucht. Wie fange ich das am besten an? Sollte man die Transaktion auf 'serializable' stellen und dann in einem einzigen SELECT alle relevanten Daten laden?? Oder kann man mit ADO auch von vorne herein auf einem Snapshot arbeiten?

Hinweis: Für spätere Statistiken sollen nie Daten aus der Datenbank gelöscht werden, was bedeutet das es viele alte Daten gibt, die von meinen SELECTs eh herausgefiltert werden, jedoch können wir so keine Technologie verwenden, die eine Kopie der gesamten Datenbank voraussetzt. (Ich weiß nicht wie so ein Snapshot funktioniert)

Viele Dank im Vorraus,
Marco

btw. die Forensoftware rockt ;)

Jelly 17. Mär 2007 13:23

Re: kleine Frage zu ADO und Datenbanksperren
 
Zitat:

Zitat von NerdIII
Es gibt eine Client-Anwendung, die aus dem Web abgerufen wird und ihre Daten im Internet auf einer MS SQL DB speichert. Die Datenbank besteht - wie so oft :) - aus mehreren Tabellen, die nach und nach verändert werden. Änderungen erfolgen mal hier mal da. Wenn die Anwendung beendet wird, muss die DB wieder konsistent sein. Hier empfiehlt sich eine Transaktion zu starten und erst zum Schluss zu committen. Soweit klar.

Nee, nicht klar. Du kannst nicht in Webapplikationen eine Transaktion starten und diese erst wieder schliessen, wenn der Webuser seine Daten bestätigt. Macht er das nicht, bleibt deine Transaktion offen. Wie willst Du eigentlich unterschiedliche User und Transaktionen verwalten. Bei Webanwendungen ist nach Darstellung der html Seite im Browser die Connection verloren.

NerdIII 17. Mär 2007 14:13

Re: kleine Frage zu ADO und Datenbanksperren
 
Sorry, hab mich da undeutlich ausgedrückt. Also der Kunde bekommt seine Anwendung per Java-Webstart bereitgestellt (automatische Updates, Crossplatform, ...). Diese kommuniziert über 'Webservices' mit einem Tomcat-Server auf Server1. Dieser läuft ständig und trägt die Änderungen dann in die DB auf Server2 ein. Auf Server2 läuft schließlich auch die eigentliche Serveranwendung, die aus der DB einen großen Satz konsistenter Daten braucht.
Ich hab ein bisschen gelesen und folgende Möglichkeiten gefunden:
MS SQL 2005: SNAPSHOT-Isolationslevel:
+ Daten immer gleich während meiner Transaktion
+ Tomcat Server kann weiterhin in die DB schreiben
- MS SQL 2005-spezifisch, Datenbank kann nicht umgestellt werden, was aber auf lange Sicht von oben geplant ist.

SQL-92: SERIALIZABLE:
+ Daten immer gleich während meiner Transaktion
+ Funktioniert mit allen DBs, die den Standard unterstützen
- Tomcat-Server und Clients stehen vor verschlossenen Türen

Die SERIALIZABLE-Variante würde ich bevorzugen, weil die Serveranwendung ihre Arbeit durchaus Nachts innerhalb weniger Minuten erledigen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.

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