Orcale:Locks auf referenzierte Tabellen beim Löschen

31/10/2009 - 14:07 von Stefan Graf | Report spam
Hallo,

ich habe ein DB-Modell unter Oracle 11.1g mit Tabellen, bei denen Felder auf andere Tabellen referenzieren (3ten Grades).
Die Referenzierung erfolgt immer über den Primàrschlüssel, für alle referenzierenden Felder gibt es einen passenden Index. Das
funktioniert alles auch soweit gut.

Was mich etwas verwirrt ist die Tatsache, dass wenn ich eine Row aus der Tabelle lösche, für allen referenzierten Tabellen ein Lock
gesetzt wird.

Kann mir jemand sagen warum, und ob man dies irgendwie verhindern kann.
Hintergrund ist, im Normalbetrieb ca. 250 User arbeiten und in gewissen Tabellen sehr oft etwas gelöscht wird. Dadurch ist das
Risiko eines Deadlocks recht hoch.

Stefan Graf
 

Lesen sie die antworten

#1 lothar.armbruester
02/11/2009 - 18:21 | Warnen spam
"Stefan Graf" writes:

Hallo,

ich habe ein DB-Modell unter Oracle 11.1g mit Tabellen, bei denen Felder auf andere Tabellen referenzieren (3ten Grades).
Die Referenzierung erfolgt immer über den Primàrschlüssel, für alle
referenzierenden Felder gibt es einen passenden Index. Das funktioniert alles
auch soweit gut.

Was mich etwas verwirrt ist die Tatsache, dass wenn ich eine Row aus der
Tabelle lösche, für allen referenzierten Tabellen ein Lock gesetzt wird.

Kann mir jemand sagen warum, und ob man dies irgendwie verhindern kann.
Hintergrund ist, im Normalbetrieb ca. 250 User arbeiten und in gewissen
Tabellen sehr oft etwas gelöscht wird. Dadurch ist das Risiko eines Deadlocks
recht hoch.

Stefan Graf



Oracle muss prüfen, ob durch die Löschung evtl. eine Fremdschlüsselbedingung
verletzt wird. Normalerweise werden in den referenzierten Tabellen aber nur
Leselocks gesetzt. In Oracle blockieren lesende Locks keine schreibenden Locks
und umgekehrt. Deadlocks duch Löschungen sollten also nicht auftreten.
Wenn alle Fremdschlüssel indiziert sind, wird auch nur ein
Datensatz und nicht die gesamte Tabelle gelockt.

HTH,
Lothar

Lothar Armbrüster |
Hauptstr. 26 |
65346 Eltville |

Ähnliche fragen