🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi.bazy-danych
Article #274

Re: Blokowanie rekordów

#274
From: Traptak
Date: Sat, 17 Apr 1999 13:33
40 lines
2900 bytes
Psujak <psujak@friko7.onet.pl> napisał(a) w artykule
<ujBR2.1955$O1.27094@news.tpnet.pl>...
> Ja tez sie z tym meczylem.Niby Interbase ma cos takiego jak dynamiczne
> blokowanie ,ale wlasnie objawia sie to jak powyzej. W tej chwili
rozwiazalem
> to w ten sposob, ze dodalem sobie pole typu bool (domena locked smallint
z
> check=0 or 1) i
> przed rozpoczeciem edycji sprawdzam, czy pole jest true.Jezeli tak, to
> message do usera, zeby poczekal , probowal za chwile.
> Jezeli masz na serwerze storedproc ,to tez to musisz uwzglednic.
> Jest to uciazliwe w chiwli, jezeli ktos np. zacznie edycje rekordu i
pojdzie
> np. do kibelka na 30 min.
> Mozna tez zrobic sobie view z opcja select * from x where polelocked=1,
ale
> wtedy tych zablokowanych nie bedzie widac.

W InterBase'ie zastosowano metody blokowania optymistycznego. Samo
otworzenie transakcji i przejście do edycji jednego z wierszy uzyskanego w
wyniku zapytania nie powoduje zablokowania rekordu. A dlaczego? Dlatego, że
serwer nie wie, że jest wykonywana edycja rekordu. Wszystkie operacje
dzieją się na stacji roboczej, która musi powiadomić serwer o chęci
zablokowania rekordu i uzyskać na to jego zgodę lub nie. To co stosuje
Psujak to właśnie jest wykorzystanie blokowania InterBase'a. Jeśli dodaje
on pole do tabeli, którą edytują użytkownicy, a następnie zmienia jego
wartość, to próba zablokowania tego samego rekordu przez inną transakcje
skończy się informacją o błędzie zakleszczenia transakcji (deadlock). Na
tym właśnie polega blokowanie rekordów, a nie na wpisywaniu wartości! Nawet
jeśli Psujak przy wchodzeniu do edycji nadpisywałby pole wartością 0, a nie
1 to i tak rekord będzie zablokowany dla innych transakcji (użytkowników).
Inaczej trzeba by tylko było obsłużyć sprawdzanie blokady. Blokadę sprawdza
się przez jej założenie! Jeśli się nie uda i wystąpi deadlock, to znaczy,
że rekord jest zablokowany, a jeśli założenie blokady się powiedzie, to
rekord można edytować. 
Mam nadzieję, że treść nie jest zbyt agresywna. Zapraszam do dyskusji na
ten temat.

Traptak
Technical Details
Message-ID: <01be88ce$1a0db8e0$037f8080@modem>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!cyfronet!security.net.pl!news.vogel.pl!cb21.szczecin.mtl.pl
References: <3715CA78.F35A7F92@kki.net.pl> <ujBR2.1955$O1.27094@news.tpnet.pl>

Show Full Headers
Complete Article Headers
From: "Traptak" <gidex@gryf.com.pl>
Subject: Re: Blokowanie rekordów
Newsgroups: pl.comp.lang.delphi.bazy-danych
References: <3715CA78.F35A7F92@kki.net.pl> <ujBR2.1955$O1.27094@news.tpnet.pl>
Message-ID: <01be88ce$1a0db8e0$037f8080@modem>
X-Newsreader: Microsoft Internet News 4.70.1155
NNTP-Posting-Host: cb21.szczecin.mtl.pl
X-NNTP-Posting-Host: cb21.szczecin.mtl.pl
Date: 17 Apr 1999 14:33:20 +0100
X-Trace: 17 Apr 1999 14:33:20 +0100, cb21.szczecin.mtl.pl
Lines: 40
X-Complaints-To: Usenet@vogel.pl
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!agh.edu.pl!cyfronet!security.net.pl!news.vogel.pl!cb21.szczecin.mtl.pl
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit