Laden...

Parallele Transaktionen

Erstellt von Ishildur vor 18 Jahren Letzter Beitrag vor 16 Jahren 8.608 Views
I
Ishildur Themenstarter:in
431 Beiträge seit 2005
vor 18 Jahren
Parallele Transaktionen

Hallo zusammen, weiss jemand von euch, wie ich erreichen kann, dass parallele Transaktionen zugelassen werden?

Ich muss bspw. eine Transaktion starten, um einen Kunden zu bearbeiten, und schliesslich eine weitere (Unter) - Transaktion, um dessen Zahlungen zu bearbeiten...

Lg Ishildur

F
10.010 Beiträge seit 2004
vor 18 Jahren

Bei .NET ist das nicht vorgesehen, da Du nur von der Connection
ein Transactions-Objekt bekommst.

Ist auch nicht wirklich etwas was man braucht, denn im alg. wird
genau eine Aktion komplett von einer Transaktion eingerahmt.

Und der Sql-Server unterstützt auch keine Nested-Transactions.

P
939 Beiträge seit 2003
vor 18 Jahren

Na fürs Logging kann man sowas auf jeden Fall gebrauchen. Innerhalb einer Transaktion werden werden viele kleine Transaktionen für Log-Ausgaben durchgeführt. Wenn jetzt die grosse Transaktion schiefläuft, bleiben die Log-Einträge trotzdem erhalten. Wie kann man das anders nachbilden?

In Java ist sowas kein Problem. Dort gibt man der Logging-Methode eine Annotation (ein Attribut) mit, dass sie in einer eigenen Transaktion laufen soll. Eine schon laufende Transaktion wird in der Zeit ausgesetzt und im Anschluss normal fortgesetzt. Beide Transaktionen laufen unabhängig von einander.

Ich hab aber keine Ahnung wie das auf Datenbank-Ebene gelöst ist, also welche Befehle an die Datenbank gesendet werden. Das ist das Problem mit Attributen/Annotationen. Man weiss nicht mehr genau was da eigentlich passiert. Auf jeden Fall soll es auch mit dem MS SQL-Server funktionieren.

Hier steht was davon, dass es deklarative Transaktionen ab Version 2.0 auch in .Net gibt:
http://www.trivadis.ch/Images/basta_transactions_tcm16-12671.pdf

Gruss
Pulpapex

S
8.746 Beiträge seit 2005
vor 18 Jahren

Schlagt mich tot, aber wofür gibt es Isolationslevel und benannte Transaktionen, wenn Transaktionen nicht parallel laufen können?

Dass der MSSQL keine nested transactions unterstützt hat ja nun mit Parallelität erstmal wenig zu tun, oder?

F
10.010 Beiträge seit 2004
vor 18 Jahren

Svenson, nur weil Ishildur Parallel schreibt, heisst das nicht, das er das auch meinte.

Könntest Du bitte den Text durchlesen, dann siehst Du das er "nested Transaction"
meint, und die werden vom Framework nicht unterstützt.

Man kann immer vieles anders machen, aber das war ja nicht seine Frage.

I
Ishildur Themenstarter:in
431 Beiträge seit 2005
vor 18 Jahren

Nein, ich meine nicht "nested transactions" sondern parallele Transaktionen, genauso wie ichs geschrieben habe... 😁

Ich habe bspw. eine Tabelle mit Ländern und eine Tabelle mit Kunden, welche auf die Ländertabelle zeigt. Nun bin ich bspw. gerade dabei, die Kundentabelle zu bearbeiten und habe hierfür eine Transaktion gestartet. Nun möchte ich in der Ländertabelle noch schnell in einer "parallelen" Transaktion einen Entrag hinzufügen, ohne dass ich vorher die Transaktion der Usertabelle beenden muss!


this.sqlCon.BeginTransaction();
this.sqlCon.BeginTransaction();

SqlConnection does not support parallel transactions.

Lg Ishildur

F
10.010 Beiträge seit 2004
vor 18 Jahren

Und was sagt die Fehlermeldung?

Ist doch wohl eindeutig.

I
Ishildur Themenstarter:in
431 Beiträge seit 2005
vor 18 Jahren

Und wieso gibts dann benannte Transaktionen?

F
10.010 Beiträge seit 2004
vor 18 Jahren

Der SqlServer versteht das, die SqlConnection aber nicht.

Deshalb steht da ja auch "SqlConnection does not support parallel transactions."

Du musst das dann selber machen, mit ein paar SqlCommands.
Aber vergiss kein "finally", sonst kannst Du u.U. die gesammte DB sperren.

S
8.746 Beiträge seit 2005
vor 18 Jahren

Will meinen, dass du für jede Transaction eine neue Connection holen musst, dann funzt es auch mit der Parallelität. Alternativ könnte man Transaktions-Kommandos direkt ins SQL einbauen.

286 Beiträge seit 2006
vor 16 Jahren

Hallo,
ich grabe diesen alten Beitrag mal heraus, weil ich ebenfalls das Problem habe, dass ich mehrere parallele Transaktionen ausführen möchte.

Allerdings führe ich sie von verschiedenen Clients aus und habe demnach auch unterschiedliche Connections über die ich die Transaktionen ausführe.

Muss ich bei den Transaktionen etwas angeben, was ich noch nicht kenne?

Weiß jemand, wo ich mich da einlesen kann oder kennt jemand eine Lösung?

Die Query Wait option bringt nicht viel, da ich in meiner Applikation Transaktionen habe die auch mal sehr lange sein können.

Danke für eure Mühe.

Gruß, maYer

286 Beiträge seit 2006
vor 16 Jahren

Vielleicht sind das noch zu wenige Infos über die Inhalte der Transaktionen.
Ich skizziere hier einmal die Schnittstellen.

Transaktion A:
Schreibt zig Datensätze in Tabelle TAB_A, TAB_B und TAB_C.

Transaktion B:
Schreibt einen Datensatz in TAB_A und ändert einen vor Transaktion A vorhandenen Datensatz in TAB_B.

Das bedeutet für mich, dass die Transaktionen nicht auf die selben Datensätz zugreifen.

In der Versionsunterscheidung der MS SQL Server MSSQL 2005 Versionen steht, dass nur die Enterprise Version Parallele Index Operationen unterstützt. Ist damit gemeint, dass in parallelen keine Indizes generiert werden können?

In den Tabellen A, B und C haben jeweil ein AutoInkrement als Index.

Wenn noch mehr Informationen benötigt werden, trage ich sie gerne nach.

Gruß, maYer

286 Beiträge seit 2006
vor 16 Jahren

Auch das herunterstellen des TransaktionsIsolationslevel auf READ UNCOMMITTED hat leider keine Besserung bewirkt.

Ich wusel mal weiter und hoffe, dass jemand hier mir in der Thematik weiter helfen kann.

Gruß, maYer

286 Beiträge seit 2006
vor 16 Jahren

Soo,
nun habe ich meine Lösung gefunden und möchte sie auch allen anderen zur Verfügung stellen.

Ich mußte die Datenbank umstellen mit:

ALTER DATABASE MY_DATABASE
SET ALLOW_SNAPSHOT_ISOLATION ON

und anschließend beim beginnen der Connection das Transaktions - Isolations - Level wie folgt setzen:

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

Schöne Grüße,

maYer