MaxLocksPerFile Error
MaxLocksPerFile Error in MS Access
1. Variante:
DB Exklusive öffnen (Kein Multiuser mehr möglich)
Ändere "Set db = CurrentDb" auf:
Set db = DBEngine.OpenDatabase("F:\Test\testBE.mdb", True)
2. Variante Dauerhaft MaxLocks hochsetzen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0
(Standard 9500)
3. Variante temporär für die aktuelle Sitzung
DBEngine.SetOption dbMaxLocksPerFile, 15000
1. Variante:
DB Exklusive öffnen (Kein Multiuser mehr möglich)
Ändere "Set db = CurrentDb" auf:
Set db = DBEngine.OpenDatabase("F:\Test\testBE.mdb", True)
2. Variante Dauerhaft MaxLocks hochsetzen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0
(Standard 9500)
3. Variante temporär für die aktuelle Sitzung
DBEngine.SetOption dbMaxLocksPerFile, 15000
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 120022
Url: https://administrator.de/knowledge/maxlocksperfile-error-120022.html
Ausgedruckt am: 22.12.2024 um 20:12 Uhr
3 Kommentare
Neuester Kommentar
Moin J0j0,
ja nee.... lass uns da noch ein bisschen dran feilen - das lass ich so nicht als Anleitung gelten.
[Als Tipp hätte ich ja nix gesagt...]
Was mir fehlt:
Ich weiss nicht, wo und bei was Dich diese MaxLocksPerFile-Grenze erwischt hat - bei einer Synchronisation, einem Massen-Update, einer Tabellenstrukturänderung oder einem Daten-Export.
In allen Fällen ist IMHO eher eine überlegte Portionierung der Transaktion (z.B. Commit nach je 5000 Datensätzen) sinnvoll oder, wenn es gar überhaupt nicht anders geht, eine Variante Deiner Variante 3
( aber nicht
Dennoch ganz klar - die Strategie der Redmonder PraktikantInnen (und diese Strategie können wir nicht unterlaufen) ist
Na ja, egal... was ich nur sagen wollte: nach dem Lesen einer Anleitung sollte die geneigte Leserin/der gramgebeugte Leser eigentlich besser verstehen und wissen, an welchen Stellschrauben er drehen sollte und warum und wann lieber nicht.
Von daher meine Bitte:
Natürlich würde mich Möglichkeit A mehr freuen... ich will ja auch was lernen hier.
Grüße
Biber
ja nee.... lass uns da noch ein bisschen dran feilen - das lass ich so nicht als Anleitung gelten.
[Als Tipp hätte ich ja nix gesagt...]
Was mir fehlt:
- Wer wo wann überhaupt diesen "Fehler 3072" ("Anzahl der maximalen Dateisperrungen überschritten") unter welchen Umständen zu sehen bekommen könnte
- Wer es sich denn überhaupt erlauben kann, eine MDB wie bei Variante 1 für sich ganz allein zu blocken
- Oder die umgedrehte Seite der Medaille: Welcher Access-Normal-User in einem handelsüblichen Firmennetz darf denn was-auch-immer im HKLM-Hive der Registry rumfuckeln?
- Welcher Fehler könnte mich nach zwei Minuten ereilen, wenn ich denn mal auf die Sahne haue und sage: "Hey, statt der vorgeschlagenen MaxLocksPerFile von 0x251c/9500dez stell ich mal 200000 ein, da bin ich dann auf der sicheren Seite."
Ich weiss nicht, wo und bei was Dich diese MaxLocksPerFile-Grenze erwischt hat - bei einer Synchronisation, einem Massen-Update, einer Tabellenstrukturänderung oder einem Daten-Export.
In allen Fällen ist IMHO eher eine überlegte Portionierung der Transaktion (z.B. Commit nach je 5000 Datensätzen) sinnvoll oder, wenn es gar überhaupt nicht anders geht, eine Variante Deiner Variante 3
( aber nicht
DBEngine.SetOption dbMaxLocksPerFile, 15000
..sondern explizitDAO.DBEngine.SetOption dbMaxBufferSize, nnnnn
DAO.DBEngine.SetOption dbMaxLocksPerFile, mmmmm
)DAO.DBEngine.SetOption dbMaxLocksPerFile, mmmmm
Dennoch ganz klar - die Strategie der Redmonder PraktikantInnen (und diese Strategie können wir nicht unterlaufen) ist
- ALLE innerhalb einer Transaktion warum-auch-immer-gesperrten Datensätze bis zum Ende der Transaktion in ihrer vollen Satzlänge zu sperren.
- dafür gibt es einerseits die 9500 (=ANZAHL der Sperrungen und deren Verwaltung).
- dazu kommt allerdings der Arbeitsspeicherbedarf platt gesagt 9500 mal Datensätzlänge
- wenn Du NICHT explizit das UseTransaction-Property geändert hast (z.B. mit KlickiBunti bei den "Abfrageeingeschaften" einer "Aktualisungsabfrage" mit Setzen der Eigenschaft "Transaktionen verwenden" auf "Nein"), dann wird die Gesamt-Aktion ohnehin portioniert/mit mehreren Commit-Punkten versehen.
- aber eine vollständige Freigabe der Ressourcen erfolgt erst, enn explizit das oberste aktive DB-Objekt (im Normalfall CurrentDB()) destroyed wird. Sonst wird "nur" nach einem Commit/EndTransaction diese Sperren-verwaltung freigegeben.
Na ja, egal... was ich nur sagen wollte: nach dem Lesen einer Anleitung sollte die geneigte Leserin/der gramgebeugte Leser eigentlich besser verstehen und wissen, an welchen Stellschrauben er drehen sollte und warum und wann lieber nicht.
Von daher meine Bitte:
- entweder "Anleitung" und dann aber noch etwas Butter bei die Fische mit dem Button "Editieren"
- oder umstufen als "Tipp".
Natürlich würde mich Möglichkeit A mehr freuen... ich will ja auch was lernen hier.
Grüße
Biber
Als Anleitung etwas mager um nicht zu schreiben total daneben.