Blokowanie danych do edycji
=?ISO-8859-2?Q?Adam_K=B3obukowski?= - 29-12-2005 14:59
Blokowanie danych do edycji
Witam
Mam nastepujacy problem: jest aplikacja oparta rzecz jasna o DBMS, gdzie jesli jeden uzytkownik edytuje jakies dane, to jesli inny chcialby akurat wyedytowac te same dane to dostaje komunikat "Uzytkownik X akurat edytuje te dane" i musi poczekac. Realizacja tego jest dosc prosta, realizujemy to poprzez tabele gdzie zapisywane jest co kto akurat edytuje. Problem jest wowczas gdy komus sie wylaczy komputer - tablica z blokadami nie zostanie odpowiednio odswiezona, a rekord zostanie zablokowany "na zawsze".
Jak to lepiej zrealizowac? Takl aby bylo to odporne na tego typu awarie? Dodam ze uzywamy MSSQL.
-- Semper Fidelis
Adam Klobukowski atari@gabo.pl
Grzesiek G. - 29-12-2005 14:59
Adam Kłobukowski napisał(a): > Witam > > Mam nastepujacy problem: jest aplikacja oparta rzecz jasna o DBMS, gdzie > jesli jeden uzytkownik edytuje jakies dane, to jesli inny chcialby > akurat wyedytowac te same dane to dostaje komunikat "Uzytkownik X akurat > edytuje te dane" i musi poczekac. Realizacja tego jest dosc prosta, > realizujemy to poprzez tabele gdzie zapisywane jest co kto akurat > edytuje. Problem jest wowczas gdy komus sie wylaczy komputer - tablica z > blokadami nie zostanie odpowiednio odswiezona, a rekord zostanie > zablokowany "na zawsze". > > Jak to lepiej zrealizowac? Takl aby bylo to odporne na tego typu awarie? > Dodam ze uzywamy MSSQL. > Aplikacja powinna aktualizować co jakiś czas (nazwijmy go X), że nadal blokuje jakiś rekord. Dodatkowo powinien być proces usuwający blokady nie aktualizowane przez X czasu.
Pozdrawiam
-- Grzegorz Gruza Odpowiadając usuń "spamerom_nie." z adresu!!!
szaman - 31-12-2005 11:08
>realizujemy to poprzez tabele gdzie zapisywane jest co kto akurat >edytuje. Problem jest wowczas gdy komus sie wylaczy komputer - tablica z >blokadami nie zostanie odpowiednio odswiezona, a rekord zostanie >zablokowany "na zawsze". > >Jak to lepiej zrealizowac? Takl aby bylo to odporne na tego typu awarie? np. zapisać czas blokowania i stosować jakiś czas przedawnienia.
Czy na pewno nie możesz zastosować jakiegoś z wariantów blokowania optymistycznego?
-- {67B14976-ABB4-4A3B-869B-84B5CCA1F569}
Zenon Karol Bednarz - 31-12-2005 11:08
Adam Kłobukowski wrote:
> Witam > > Mam nastepujacy problem: jest aplikacja oparta rzecz jasna o DBMS, gdzie > jesli jeden uzytkownik edytuje jakies dane, to jesli inny chcialby > akurat wyedytowac te same dane to dostaje komunikat "Uzytkownik X akurat > edytuje te dane" i musi poczekac. Realizacja tego jest dosc prosta, > realizujemy to poprzez tabele gdzie zapisywane jest co kto akurat > edytuje. Problem jest wowczas gdy komus sie wylaczy komputer - tablica z > blokadami nie zostanie odpowiednio odswiezona, a rekord zostanie > zablokowany "na zawsze". > > Jak to lepiej zrealizowac? Takl aby bylo to odporne na tego typu awarie? > Dodam ze uzywamy MSSQL. > Używałem do blokowania danych globalnych tablic tymczsowych. Jeżeli edytowałem jakiś dokument to tworzyłem dynamicznie globalną tablicę tymczsową o nazwie pochodzącej z dokumentu tam wstawiałem jeden wiersz z opisem dla innych użytkowników.Po zwolnieniu dokumentu kasowałem tablicę tymczasową. Jeżeli ktoś inny chciał edytować dokument to procedura sprawdzła czy istnieje tablica tymczsowa o określonej nazwie.Jeżeli tak to komunikat odczytany z tej tablicy. Zaletą tej metody jest to że jeżeli komus sie wylaczy komputer lub utraci połączenie z serwerem to MSSQL automatycznie sam skasuje taką tabelę która utraciła właściciela. Nie ma więc problemu z pozostawianymi blokadami.
Zenon Karol
Krzysztof Raczkowski - 31-12-2005 11:08
Zenon Karol Bednarz wrote: > > > Używałem do blokowania danych globalnych tablic tymczsowych. > Jeżeli edytowałem jakiś dokument to tworzyłem dynamicznie globalną tablicę > tymczsową o nazwie pochodzącej z dokumentu tam wstawiałem jeden wiersz z > opisem dla innych użytkowników.Po zwolnieniu dokumentu kasowałem tablicę > tymczasową. > Jeżeli ktoś inny chciał edytować dokument to procedura sprawdzła czy > istnieje tablica tymczsowa o określonej nazwie.Jeżeli tak to komunikat > odczytany z tej tablicy. > Zaletą tej metody jest to że jeżeli komus sie wylaczy komputer lub utraci > połączenie z serwerem to MSSQL automatycznie sam skasuje taką tabelę która > utraciła właściciela. > Nie ma więc problemu z pozostawianymi blokadami.
To chyba lepsze od sp_getapplock - ten sposób teoretycznie zapewnia sprzątanie po sobie, ale czasem trwa to długo ... Czy wiesz może czy tablice tymczasowe mogą być usunięte z innej sesji ??
-- Pozdrawiam Krzysztof Raczkowski
Zenon Karol Bednarz - 31-12-2005 11:08
Krzysztof Raczkowski wrote:
> Zenon Karol Bednarz wrote: >> >> >> Używałem do blokowania danych globalnych tablic tymczsowych. >> Jeżeli edytowałem jakiś dokument to tworzyłem dynamicznie globalną >> tablicę tymczsową o nazwie pochodzącej z dokumentu tam wstawiałem jeden >> wiersz z opisem dla innych użytkowników.Po zwolnieniu dokumentu kasowałem >> tablicę tymczasową. >> Jeżeli ktoś inny chciał edytować dokument to procedura sprawdzła czy >> istnieje tablica tymczsowa o określonej nazwie.Jeżeli tak to komunikat >> odczytany z tej tablicy. >> Zaletą tej metody jest to że jeżeli komus sie wylaczy komputer lub utraci >> połączenie z serwerem to MSSQL automatycznie sam skasuje taką tabelę >> która utraciła właściciela. >> Nie ma więc problemu z pozostawianymi blokadami. > > To chyba lepsze od sp_getapplock - ten sposób teoretycznie zapewnia > sprzątanie po sobie, ale czasem trwa to długo ... Czy wiesz może czy > tablice tymczasowe mogą być usunięte z innej sesji ?? >
Globalne tablice tymczasowe widoczne są przez wszystkich użytkowników w danej bazie. Ale czy mogą być kasowane nie pamiętam jako że dosyć dawno temu porzuciłem w swoich aplikacjach MSSQL na rzecz POSTGRESA. Najlepiej poprostu sprawdzić samemu.
Zenon Karol
Artur S. - 05-01-2006 08:04
Adam Kłobukowski napisał(a): > Witam > > Mam nastepujacy problem: jest aplikacja oparta rzecz jasna o DBMS, gdzie > jesli jeden uzytkownik edytuje jakies dane, to jesli inny chcialby > akurat wyedytowac te same dane to dostaje komunikat "Uzytkownik X akurat > edytuje te dane" i musi poczekac. Realizacja tego jest dosc prosta, > realizujemy to poprzez tabele gdzie zapisywane jest co kto akurat > edytuje. Problem jest wowczas gdy komus sie wylaczy komputer - tablica z > blokadami nie zostanie odpowiednio odswiezona, a rekord zostanie > zablokowany "na zawsze". > > Jak to lepiej zrealizowac? Takl aby bylo to odporne na tego typu awarie? > Dodam ze uzywamy MSSQL. > Pod rozwagę: Wpisy do tabeli BLOKADY, na osobnym connection z transakcją, która zawsze kończy się rollback (po zwolnieniu zasobu). A jakie zasoby są blokowane, to trzeba użyć select z with (nolock). Tabela powinna być w osobnej bazie z powodu wiszących długich transakcji.
Pozdrawiam Artur S.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
=?iso-8859-2?Q?=5BMySQL=5D_Wy=B6wietlenie_wszystkich_rekordow _zawierajacy?==?iso-8859-2?Q?ch_duplikat_a__moze_inna_struktura_bazy_danych ?=
Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8
[laik]Jak =?ISO-8859-2?Q?stworzy=E6/zaczac_tworzyc__ma=B3=B1?==?ISO-8859-2?Q?__baz=EA_danych_na_potrzeby_www=3F?=
[mysql] przenoszenie danych =?ISO-8859-2?Q?mi=EAdzy_tabelami_?==?ISO-8859-2?Q?w_r=F3=BFnych_bazach?=
Ksiazka - "Podstawowy =?ISO-8859-2?Q?wyk=B3ad_z_system=F3w_?==?ISO-8859-2?Q?baz_danych=22?=
Zrywanie =?ISO-8859-2?Q?po=B3aczen_z_baza_danych_-_pos?==?ISO-8859-2?Q?tgresql_=3C-=3E_odbc?=
Połączenie bazy danych z wykonaniem polaczenia telefonicznego
[mssql] insert do tabeli na podstawie danych z innej tabeli
[oracle] Baza danych do kursy Introduction to Oracle9i:PL/SQL ? Skąd ją pobrać ?
zanotowane.pldoc.pisz.plpdf.pisz.plbajkomoda.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|