Lade...
 

CX_TRANSACTION_MANAGER::SetDefaultLockMode

CX_TRANSACTION_MANAGER::SetDefaultLockMode

215064

Beschreibung:

Diese Methode setzt den globalen Default-Lock-Modus für alle zukünftig gestarteten Transaktionen. Nach dem Systemstart entspricht der Default-Modus (UPGRADABLE,PAGE). Für jeden der beiden Parameter kann NULL (oder ein Leerstring) übergeben werden, um den Systemdefault zu verwenden.

Das Verändern des Lock-Modus kann man sich so vorstellen, dass bei jedem Transaktionsbeginn implizit ein BeginLock mit dem neu gesetzten Modus ausgeführt wird.

Wird in einer Anwendung der Lock-Modus auf (WRITE,DATABASE) gesetzt, dann werden alle Datenbankzugriffe aller Clients serialisiert und es kann immer nur ein Client zur Zeit auf die Datenbank zugreifen (Ausnahme: BeginTXN(READ)) und dieser blockiert alle anderen Clients solange seine Transaktion läuft. Auf diese (sehr ineffiziente) Weise lassen sich Deadlocks in Systemen mit chaotischen Datenzugriffen und wenigen Nutzern zuverlässig verhindern.

 

Hinweis: Der gesetzte Lock-Modus hat keinen Einfluss auf Datenbanken, die im MVCC-Modus geöffnet sind, da ein Write-Lock innerhalb eine MVCC-Datenbank zu einem Fehler führen würde und ohnehin keinen synchronisierenden Effekt hätte.

Das betrifft also Transaktionen, die mit BeginTXN(READ) geöffnet wurden und reguläre Transaktionen in Datenbanken, die per "READ_ONLY" GetManager(TRANSACTION) Call(OpenDB) geöffnet wurden.

 

Code-Beispiel:
// Prevent deadlocks entirely by locking the whole database for each db access "WRITE" "DATABASE" GetManager(TRANSACTION) Call(SetDefaultLockMode) //... // Restore default mode NULL NULL GetManager(TRANSACTION) Call(SetDefaultLockMode)

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_TRANSACTION_MANAGER Der Transaktionsmanager
  Top-1 STRING | NULL Lock-Granularity: "PAGE" | "CLUSTER" | "SEGMENT" | "DATABASE"
  Top-2 STRING | NULL Lock-Access: "READ" | "UPGRADABLE" 
Stack(Out) Top - -
Funktionsaufruf: Call(SetDefaultLockMode)