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!
insert into foo(id) select level from dual connect by level<1000000
(Erhöhen der Anzahl der Nullen nacheinander, bis es langsam genug ist)Antworten:
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
quelle
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.
quelle