Article View: pl.comp.bazy-danych
Article #183306Re: Transakcje
From: Sebastian Kolski
Date: Tue, 07 Jul 2009 07:09
Date: Tue, 07 Jul 2009 07:09
69 lines
3922 bytes
3922 bytes
Adam K. wrote: > Witam, > Użytkownik "Sławomir Szyszło" <slaszysz@CIACHTOlist.pl> napisał w > wiadomości news:h2tt2q.2lk.1@slaszyszCIACHTO.list.pl... >> Dnia Mon, 6 Jul 2009 21:51:01 +0200, "Adam K." <akobylin@nospam.op.pl> >> wklepał(-a): >> >>> Chyba jednak nie, gdy rozpoczne transakcje w trybie read commited, >>> wykonam >>> insert do bazy (nie wiem czy to ma znaczenie, ale dodawanie przy pomocy >>> procedury skladowanej), to póki nie zrobie COMMIT/ROLLBACK inny >>> proces nie >>> moze odczytac zadnych rekordów z tabelki. >> >> Odczytać może, ale nie te wstawione. ;) > >> >> Napisz może co masz na myśli tu: >> "Podczas tego importu chciałbym aby baza w zakresie danych przed >> rozpoczęciem >> importu była dostępna dla pozostałych użytkowników." >> >> Import oznacza dodanie danych, aktualizacje czy usuwanie? A może mix tego >> wszystkiego? >> > > Import danych oznacza: > 1. Usunięcie części danych > 2. Dodanie brakujących > 2. Modyfikacji (aktualizacji) części rekordów już istniejących. > > Chciałbym osiągnąć taki efekt, że jeśli przed rozpoczęciem importu > tabelka Produkty miała np. 10 rekordów, to do zakończenia importu (czyli > wykonania COMMIT) pozostali użytkownicy widzą te rekordy niezmienione. > Import część z tych rekordów usunie, część zmieni a część zmodyfikuje, w > rezultacie czego np. w tabeli pozostanie 5 rekordów niezmienionych, 3 > zostaną skasowane, 2 zmodyfikowane, a 5 zostanie dodanych całkiem > nowych. Tak przygotowane rekordy wystarczy jeśli będą dostępne po > wykonaniu COMMIT. > > Problem w tym, że jeśli mam READ_COMMITED, to do czasu wykonania COMMIT, > jakikolwiek SELECT z tabelki Produkty "zawiesza" się. Jeśli w określonym > czasie dotrze do serwera COMMIT, SELECT innego usera się wykona (zobaczy > on tabelkę już po zmianach), jeśli natomiast nie zdąży - klient > wykonujący SELECT z tej tabeli otrzyma wyjątek "Limit czasu > przekroczony" zamiast pobrać rekordy, które były dostępne przed > rozpoczęciem transakcji. > Oczekiwany efekt do tej pory udało mi się osiągnąć tylko przy poziomie > izolacji transakcji typu SNAPSHOT... > > Mam nadzieję, że teraz jest już jasne z czym mam problem :) > > Pozdrawiam > > Adam > Jedyne wyjaśnienie dlaczego tak się dzieje, jakie przychodzi mi do głowy, to takie, że aplikacja używa pojedynczego połączenia do bazy danych, zarówno dla importu jak i dla użytkowników. Wtedy rzeczywiście jeśli połączenie jest zajęte przez transakcję importową inne polecenia wydane na tym połączeniu "zwisną". Jeśli tak nie jest to nie wydaje mi się, aby opisane zachowanie było możliwe. Podstawą w bazach danych jest możliwość jednoczesnego dostępu do danych przez wielu użytkowników. A takie zachowanie oznaczało by to, że na raz z bazą może pracować dokładnie jedna osoba. Pozdrawiam Sebastian
Technical Details
Message-ID:
<h2usc5$9ct$1@achot.icm.edu.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!not-for-mailReferences:
<h2ti2l$1vo$1@news.onet.pl> <4ba0026d-5f7f-4fe5-8669-103dd4c3fa7d@s31g2000yqs.googlegroups.com> <h2tkja$8tr$1@news.onet.pl> <h2tt2q.2lk.1@slaszyszCIACHTO.list.pl> <h2ul9o$lg$1@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!not-for-mail From: Sebastian Kolski <sebastian.kolski@gmail.com> Newsgroups: pl.comp.bazy-danych Subject: Re: Transakcje Date: Tue, 07 Jul 2009 09:09:55 +0200 Organization: http://news.icm.edu.pl/ Lines: 69 Message-ID: <h2usc5$9ct$1@achot.icm.edu.pl> References: <h2ti2l$1vo$1@news.onet.pl> <4ba0026d-5f7f-4fe5-8669-103dd4c3fa7d@s31g2000yqs.googlegroups.com> <h2tkja$8tr$1@news.onet.pl> <h2tt2q.2lk.1@slaszyszCIACHTO.list.pl> <h2ul9o$lg$1@news.onet.pl> NNTP-Posting-Host: chello089074100231.chello.pl Mime-Version: 1.0 X-Trace: achot.icm.edu.pl 1246950597 9629 89.74.100.231 (7 Jul 2009 07:09:57 GMT) X-Complaints-To: abuse@icm.edu.pl NNTP-Posting-Date: Tue, 7 Jul 2009 07:09:57 +0000 (UTC) In-Reply-To: <h2ul9o$lg$1@news.onet.pl> User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit