Wie geht Oracle mit mehreren gleichzeitigen INSERTs für eine Tabelle um?

8

Ich versuche, Oracle 11g etwas genauer zu verstehen. Meine Frage ist einfach: Wie geht Oracle mit zwei Sitzungen um, die gleichzeitig versuchen, Datensätze in eine einzelne Tabelle einzufügen?

Beispielsweise wird INSERT A um 13:00 Uhr gegen Tabelle 1 ausgeführt. Der Vorgang dauert 5 Minuten. INSERT B wird um 13:02 Uhr gegen Tabelle 1 ausgeführt. Der Vorgang dauert 1 Minute.

Was wird passieren? Wird die Oracle-Warteschlange INSERT B ausgeführt, nachdem INSERT A abgeschlossen ist? Wird INSERT B gleichzeitig mit INSERT A ausgeführt?

Vielen Dank!

Dustin
quelle
6
Es gibt nichts
Schöneres
Absolut. Ich bin mir jedoch nicht sicher, wie ich eine Abfrage erstellen soll, deren Fertigstellung absichtlich 5 Minuten dauert.
Dustin
3
viele Daten einfügen? insert into foo(id) select level from dual connect by level<1000000(Erhöhen der Anzahl der Nullen nacheinander, bis es langsam genug ist)
Jack sagt, versuchen Sie es mit topanswers.xyz

Antworten:

4

Die Einfügungen beeinflussen sich nicht gegenseitig, es sei denn, sie hätten einen Konflikt mit eindeutigen oder Primärschlüsseleinschränkungen. Sie sollten unabhängig sein. Ich glaube, dieses Problem der Parallelität ist einer der Gründe, warum die Sequenz von Oracle ein separates Objekt ist (zwischengespeicherte, von der Einfügung getrennte Ersatz-PK-Generierung).

In dieser Hinsicht arbeiten sie an dem nicht festgeschriebenen Tisch, wie es für ihre Sitzung ersichtlich ist. Dieses Verhalten wird im folgenden Stapelüberlaufbeitrag beschrieben.

/programming/3194999/dml-by-multiple-users-commit-scenarios-in-oracle

REW
quelle
2

Vielleicht ist es hilfreich, einen Blick auf Oracle Transaction Management (Konzepte) oder SQL-Verarbeitung für Anwendungsentwickler (Advanced Application Developer's Guide) zu werfen.

Sie können das Verhalten von Oracle untersuchen, indem Sie eine Sitzung mit sqlplus öffnen und die automatische Festschreibung durch Ausführen festlegen

Autocommit deaktivieren

und Ausführen einer Einfügung

in Tabelle A (...) Werte einfügen (...);

Lassen Sie diese Sitzung geöffnet und starten Sie eine sqlplus-Sitzung in einem anderen Fenster. Setzen Sie die automatische Festschreibung auf "Aus" und geben Sie eine weitere Einfügung aus. Beide Transaktionen sind aktiv, bis Sie sie mit Commit (oder Rollback) schließen.

In den meisten Situationen ist es nicht wirklich erforderlich, die automatische Festschreibung zu deaktivieren, da dies die Standardeinstellung für sqlplkus ist, wenn Sie dies nicht geändert haben.

Wunder173
quelle