Zum Inhalt springen

Transaktionen (mal wieder)


HolzOnkel

Empfohlene Beiträge

Hallo zusammen,

gleich zu Anfang: die Frage ist bewusst allgemein gestellt, besonders interesant für mich ist aber die Antwort beim MS-SQL-Server 2k.

Also, Transaktionen... niedliches Feature für jeden, der öfters damit kämpfen muss, dass ganze Befehlsbatches wieder rückgängig gemacht werden müssen.

Jetzt habe ich folgende Verstädnisfrage(n):

Wenn ich eine Befehlsfolge, die auf mehrere Tabellen geht, auf den Server absetze, während Manuelle Transaktionen AN sind - sperre ich dann diese Tabellen für die Zeit, bis ich entweder einen Rollback oder einen Commit absetze?

Ich denke zwar "ja", bin mir hierbei aber nicht sicher.

Wie ich zu meinem "ja" komme:

1) Wenn ich auf eine durch eine Transaktion gesperrte Tabelle einen Insert durchführe, müsste ich den id-Wert der Tabelle erhöhen.

2) Das würde aber dazu führen, dass, wenn man diese ID-Nummer selbst innerhalb einer Transaktion erhöht hat und nun seine eigene Transaktion rückgängig macht, der Insert auf die Tabelle aber durchgeführt wurde, eine Lücke in der Folge der ID-Nummern entstehen würde. (Was z.B. bei einer Rechnungsnummer besch... eiden wäre.)

3) Um diese Lücke zu vermeiden, muss also die Tabelle gesperrt werden, bis eine endgültige Entscheidung über Commit oder Rollback bestätigt wurde.

Seh ich das so richtig oder habe ich einen Knick in der logischen Optik?

Gruss,

der Onkel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

Normaler kann eine vernünftige Datenbank: table locking, row locking und vielleicht auch noch column locking. Was jetzt beim SQL Server Standard ist, weiss ich nicht.

Wenn die Rechnungsnummer 100%ig durchnummeriert werden soll (Warum eigentlich, ist das gesetzlich vorgeschrieben.) und die Transaktion zu lange dauert bzw. zu viele Tabellen sperrt, würde ich erst die komplette Transaktion durchführen, eine andere interne ID setzen, und wenn das alles geklappt hat, holst du dir dann eine Rechnungsnummer.

Um ganz sicher zu gehen, kannst du ich beim abschließenden Rechnungsnummer holen und setzen die Tabelle komplett sperren. Geht ja schnell.

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

das Problem dabei ist, dass ich mir die Rechnungsnummer eben nicht später holen kann.

Der ganze Vorgang umfasst neben des "Holens" der Rechnungsnummer auch die Umsetzung von diversen anderen Tabellen.

Das Problem dabei ist, dass ich den ganzen Vorgang auf "Transaktion stehen lassen muss", bis der Anwender den Ausdruck der Rechnung bestätigt hat.

Da ein verbohrter Buchhalter das aber erst tut, nachdem er/sie/es die Rechnung überprüft hat, kann das bei einer grossen Rechnung länger dauern. In dieser Zeit ist die Rechnungsstellung für andere Leute nicht machbar, da Blockade durch Transaktion (sagt zumindest der Enterprise-Manager).

Aber von den Rechnungsnummern weg, meine Frage war ja allgemein als Interessenfrage bez. Transaktionen gestellt. Wird nun die ganze Tabelle gesperrt?

Dass table/row/column-lock in einer DB möglich sind, weiss ich selbst ;) , nur was halt bei Transactions davon angewandt wird...

Gruss,

der Onkel

PS: Bez. der durchlaufenden Rechnungsnummern: nein, das ist keine gesetzliche Vorschrift. Man muss aber im Zweifelsfall bei der Steuerprüfung auch jede fehlende Nummer erklären können, weil, sonst kommt der Steuerprüfer auf die Idee, dass Du vielleicht diese Rechnungen unterschlagen willst... :mod: und ausserdem geht es jedem mir bekannten Finanzbuchhalter auf den Keks, wenn ihm eine Rechungsnummer fehlt, egal, ob er sie erklären kann oder nicht. Das sieht nicht aus. :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

nun das mit Transaktionen ist immer so eine leidige Sache. :) Ich frage mich in dem Zusammenhang, warum ihr keinen Transaction Server (MTS) dazwischen haengt. Der muesste/sollte die Transaktionen eigentlich so managen wie du dir das vorstellst. Wurde auf jeden Fall mal in einem Projekt in dem ich gearbeitet habe so gemacht da dort aehnlich Probleme aufgetreten sind.

Hoffe das helfen konnte.

Gruss

smokie

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja, was heisst hier, "managen, wie ich mir das vorstelle". Ich stelle mir gar nix vor, ich frage nach ;)

Um ehrlich zu sein, "vorstellen" kann ich mir eigentlich nix anderes, als ich im ersten Posting gefragt habe. Ich wollte nur wissen, wie der Server das mit den Transaktionen intern so abhandelt... wofür ich bisher (nix gegen Euch zwei ;) ) noch keine genaue Antwort bekommen habe.

Weiss da vielleicht jemand anders bescheid?

Gruss,

der Onkel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...