Insert in Oracle sperrt die Tabelle; wenn Oracle DML-Anweisungen wie insert ausführt, wird eine Sperre für die Tabelle angewendet, die gleichzeitig ausgeführt wird blockiert und wartet. Andere Sitzungen werden festgeschrieben oder zurückgesetzt, was zu einem Deadlock führt.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, Oracle 11g-Version, Dell G3-Computer.
Wird durch Einfügen in Oracle die Tabelle gesperrt
Wenn ORACLE DML-Anweisungen wie „Einfügen“ ausführt, wird zunächst automatisch eine TM-Sperre auf die auszuführende Tabelle angewendet TM-Sperre erhalten wird, beantragen Sie dann automatisch eine TX-Sperre. Wenn zwei oder mehr Sitzungen die DML-Sprache für denselben Datensatz der Tabelle ausführen, sperrt die erste Sitzung den Datensatz, und die anderen Sitzungen befinden sich im Wartezustand, bis die TX-Sperre aufgehoben wird, nachdem die erste Sitzung festgeschrieben wurde, und die anderen Sitzungen sind nur Sitzungen abschließbar.
Die Überlegung besteht darin, dass zwei Einfügeanweisungen gleichzeitig versucht haben, Daten mit demselben PK oder eindeutigen Wert in eine Tabelle einzufügen, was dazu führte, dass die Sitzung blockiert wurde und auf das Festschreiben oder Zurücksetzen anderer Sitzungen gewartet wurde, was zu einem Deadlock führte.
Solange eine der Sitzungen übermittelt wird, meldet die andere ORA-00001: Eindeutigkeitsbeschränkung wird verletzt und der Deadlock wird beendet, oder eine der Sitzungen wird zurückgesetzt und die andere kann normal ausgeführt werden .
In Oracle besteht der Grund für das Sperren der Tabelle darin, dass, wenn ein Programm eine Einfügung für eine Tabelle ausführt und noch kein Commit durchgeführt wurde, ein anderes Programm ebenfalls eine Einfügung für dieselbe Tabelle ausführt, dann eine Ausnahme wegen Ressourcenauslastung auftritt , Tisch sperren.
Die Hauptgründe für das Sperren von Tabellen sind:
(1) Programm A führt die Einfügung von Tabelle A aus, und vor dem Festschreiben fügt Programm B auch Tabelle A ein. Zu diesem Zeitpunkt tritt eine Ausnahme wegen Ressourcenauslastung auf, bei der es sich um eine Sperre handelt .Table
(2) Tabellensperren erfolgen häufig im Parallelbetrieb und nicht im Parallelbetrieb (wenn ein Thread die Datenbank betreibt, kann der andere Thread das Datenbank-, CPU- und E/A-Zuteilungsprinzip nicht bedienen)
Methoden zur Reduzierung der Wahrscheinlichkeit der Tabellensperre:
(1) Reduzieren Sie die Zeit zwischen der Ausführung von Einfüge-, Aktualisierungs- und Löschanweisungen und dem Festschreiben. Insbesondere wird die Stapelausführung in Einzelausführung geändert und die Nichtausführungsgeschwindigkeit von SQL selbst optimiert
(2) Wenn die Transaktion abnormal zurückgesetzt wird
Der Grund für das Sperren der Tabelle kann sein, dass die Zeilendaten geändert wurden und vergessen zu senden, was ebenfalls dazu führt, dass die Tabelle gesperrt wird.
Wissen erweitern:
Es empfiehlt sich, vor einer Entscheidung den Grund zu prüfen.
1 Der Code für die Sperrtabellenabfrage hat die folgende Form:
select count(*) from v$locked_object; select * from v$locked_object;
2. Überprüfen Sie, welche Tabelle gesperrt ist
Das obige ist der detaillierte Inhalt vonWird das Einfügen in Oracle die Tabelle sperren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!