MS Access utrzymuje zamki w rzędach stołu na czas nieokreślony

Używamy MS Access jako GUI dla jednego z naszych systemów, ale natrafiliśmy na problem, w którym Access trzyma blokady podstawowych tabel lub wierszy, co uniemożliwia serwerowi SQL uruchamianie jakichkolwiek zapytań o aktualizację tych danych. Jest to problematyczne, ponieważ chociaż nasz frontend Access wymaga tylko dostępu do tych danych tylko do odczytu, mamy systemy, które odświeżają dane w regularnych odstępach czasu. Te operacje odświeżania kończą się niepowodzeniem (lub są opóźnione w nieskończoność) ze względu na to, że Access już blokuje dane.

Ten problem jest zilustrowany przez otwarcie nakładki Access i użycie sys.dm_tran_locks DMV do pokazania blokad danych. Kroki, które podejmuję w celu odtworzenia problemu:

Otwórz nakładkę Access. To pokazuje przewijalną formę z kilkoma tysiącami rekordówUżyj DMV serwera SQL, aby wyświetlić blokady danych. Pokazuje to 5 blokad typu „obiektowego” z trybem żądania „IS” (Intent shared). Korzystanie z sys.dm_exec_requests pokazuje status polecenia jako „zawieszony” i typ oczekiwania jako „ASYNC_NETWORK_IO”. Blokady te są utrzymywane tak długo, jak długo użytkownik ma otwartą nakładkę Access i uniemożliwiają jakiekolwiek operacje aktualizacji / usuwania / obcinania tabel. Teraz, jeśli użytkownikprzewija do końca rekordu w Accessie, blokady są zwolnione!

Drugi problem występuje, gdy użytkownik kliknie, aby wyświetlić pojedynczy rekord w interfejsie. Gdy na ekranie wyświetlany jest pojedynczy rekord, DMV serwera SQL pokazują te blokady: 3x obiekt, 1x klucz, 1x strona. Kluczem jest wspólna blokada, inne są udostępniane. Ponownie status polecenia jest zawieszony, a typ oczekiwania to ASYNC_NETWORK_IO. I te blokady są utrzymywane tak długo, jak użytkownik przegląda rekord

Musimy powstrzymać dostęp od posiadania tych zamków na czas nieokreślony. Niestety MS Access nie jest częścią mojego zestawu umiejętności, więc nie wiem, co należy zrobić, aby to naprawić.

questionAnswers(2)

yourAnswerToTheQuestion