2017-11-12 1 views
0

Ich habe eine Oracle DB-Tabelle, wo ich einige Datensätze habe, die von 2 Instanzen der Anwendung abgerufen werden sollten, um einige Aktionen auf den Daten auszuführen. Beide Instanzen werden dieselbe Tabelle gleichzeitig abfragen. Wie kann ich sicherstellen, dass die 2 Instanzen nicht dieselben Datensätze abrufen.Abrufen von Datensätzen aus derselben Tabelle durch 2 Anwendungen

ich versuche, Hochverfügbarkeitslösung dadurch zu erreichen, so in Fall 1 fehlgeschlagen wird andere weiter funktionieren.

+1

SELECT FÜR SKIP UPDATE LOCKED könnte eine gute Option sein. – user2672165

Antwort

0

Geben Sie Informationen darüber an, was Sie mit dem Abrufen von Zeilen machen möchten. Sie können z. B. Zeilen zwischen einigen Prozessen mit update zuweisen (legen Sie die Prozessnummer fest, bevor Daten bei jedem Prozess abgerufen werden). Sie können auch für die Update-Klausel eine Bedingung verwenden.

+0

lässt annehmen, dass die Master-Tabelle 1000 Anforderungen hat, und 3 Instanzen von 1 Anwendung, die auf die Tabelle zugreift, um die Datensätze abzurufen, verschieben sie in eine andere Tabelle als bereits verarbeitete Datensätze. das Problem hier, dass Sperre kann passieren, wenn alle Zugriff auf die gleichen Daten –

+0

@MohammadAlnaimat Was sollte mit den Daten jedes Prozesses tun? Löschen? Aktualisieren? Wie brauchen Prozessdaten? Sie können Daten für jede Anwendung in einer Cursoranweisung mit FOR UPDATE-Klausel auswählen. Wenn Sie für jede Anwendung den gleichen Anteil verarbeiten müssen, können Sie Daten vorher teilen. Fügen Sie zum Beispiel das Feld ProcNo hinzu und aktualisieren Sie es irgendwo, bevor Sie Daten an einige Prozesse übergeben. –

0

Ich muss zugeben, dass ich (noch) nicht diese getestet, aber wie wäre es so etwas wie tun:

select blah.. 
from table 
for update of ... 
skip locked rows 
+0

Danke, ich habe das ausprobiert. das Problem in Unternehmensanwendungen. Ein Prozess wird die Datensätze für das Update sperren, der zweite und der dritte versuchen, auf dieselben Datensätze zuzugreifen und warten weiter auf die Freigabe der Sperre. und das ist Zeitverschwendung. –

+0

Es sollte nicht die gleichen Zeilen sperren. Können Sie Beweise dafür erbringen? – BobC

Verwandte Themen