HolzOnkel Geschrieben 11. April 2003 Teilen Geschrieben 11. April 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 12. April 2003 Teilen Geschrieben 12. April 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HolzOnkel Geschrieben 12. April 2003 Autor Teilen Geschrieben 12. April 2003 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
smokie Geschrieben 12. April 2003 Teilen Geschrieben 12. April 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HolzOnkel Geschrieben 14. April 2003 Autor Teilen Geschrieben 14. April 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.