In MS SQL Server nolock
kann zu diesem Zweck verwendet werden.
Warum können wir es nicht in Oracle und plsql verwenden?
quelle
In MS SQL Server nolock
kann zu diesem Zweck verwendet werden.
Warum können wir es nicht in Oracle und plsql verwenden?
SQL Server verwendet normalerweise eine andere Sperrstrategie als Oracle. Die von SQL Server verwendete Standardstrategie bedeutet, dass bei der Auswahl von Zeilen Lesesperren (für Zeilen, Seiten oder die gesamte Tabelle) auf diese angewendet werden *. Daher NOLOCK
ist die Klausel manchmal nützlich - obwohl der allgemeine Ratschlag lautet, sie niemals zu verwenden, da sie die Semantik der Isolationsstufen ändert und zu inkonsistenten Ergebnissen in der Ausgabe der Abfragen führen kann.
* (Hinweis: Dies ist die Standardeinstellung. Wenn die SNAPSHOT
Isolation ausgewählt ist, ist das Verhalten anders und Leser blockieren keine Schreiber.)
In Oracle blockiert ein Lesevorgang niemals einen Schreibvorgang. Das Folgende ist ein Auszug aus ' Oracle Database Concepts 11g Release 2 '. Ich empfehle Ihnen einen Blick darauf zu werfen, ob Sie daran interessiert sind, wie dies von Oracle gehandhabt wird.
Datengleichzeitigkeit und -konsistenz
Zusammenfassung des Sperrverhaltens
In der Datenbank werden abhängig von der Operation, die die Sperre erworben hat, verschiedene Arten von Sperren verwaltet. Im Allgemeinen verwendet die Datenbank zwei Arten von Sperren: exklusive Sperren und Freigabesperren. Für eine Ressource, z. B. eine Zeile oder eine Tabelle, kann nur eine exklusive Sperre abgerufen werden, für eine einzelne Ressource können jedoch viele Freigabesperren abgerufen werden.
Sperren beeinflussen die Interaktion von Lesern und Schreibern. Ein Reader ist eine Abfrage einer Ressource, während ein Writer eine Anweisung ist, die eine Ressource ändert. Die folgenden Regeln fassen das Sperrverhalten von Oracle Database für Leser und Schreiber zusammen:
• Eine Zeile ist nur gesperrt, wenn sie von einem Schreiber geändert wurde.
Wenn eine Anweisung eine Zeile aktualisiert, erhält die Transaktion eine Sperre nur für diese Zeile. Durch das Sperren von Tabellendaten auf Zeilenebene minimiert die Datenbank Konflikte um dieselben Daten. Unter normalen Umständen 1 eskaliert die Datenbank keine Zeilensperre auf die Block- oder Tabellenebene.
• Ein Schreiber einer Zeile blockiert einen gleichzeitigen Schreiber derselben Zeile.
Wenn eine Transaktion eine Zeile ändert, verhindert eine Zeilensperre, dass eine andere Transaktion dieselbe Zeile gleichzeitig ändert.
• Ein Leser blockiert niemals einen Schreiber.
Da ein Leser einer Zeile diese nicht sperrt, kann ein Schreiber diese Zeile ändern. Die einzige Ausnahme ist eine SELECT ... FOR UPDATE-Anweisung, eine spezielle SELECT-Anweisung, die die gelesene Zeile sperrt.
• Ein Autor blockiert niemals einen Leser.
Wenn eine Zeile von einem Schreiber geändert wird, verwendet die Datenbank Undo-Daten, um Lesern eine konsistente Ansicht der Zeile zu bieten.