Oracle a zamky(Re: Multiuzivatelsky SQL server)

Jan Serak sherry na pikebo.cz
Středa Říjen 6 12:02:23 CEST 1999


Honza Pazdziora wrote:
> No, on fakt, ze se zamyka cela tabulka, je IMHO naprosto normalni,
> pokud chcete zajistit alespon nejakou konzistenci. Samozrejme, jak je
> mozno docist se v dokumentaci, tak pokud tabulku explicitne
> nezamnknete, tak pristupy k jednotlivym zaznamum jsou interne
> atomicke, cili to zamykani dela server za Vas. Nema to
> s multiuzivatelskosti nic spolecneho, rpotoze pokud pustim treba na
> Oraclu transakci, tak mi to taky samozrejme zamkne celou tabulku.
Uchylujeme se od puvodniho tematu, ale FLEK.

Oracle nema explicitni zahajeni transakce, takze transakce
zacina jakoukoli zmenou stavu databaze v ramci session (tedy i
INSERTem).
INSERT nezamyka nic, DELETE a UPDATE zamyka pouze zaznamy.
Explicitne lze zaznam zamknout SELECT ... FROM ... WHERE ... FOR UPDATE.
Cela tabulka se musi zamcit pomoci LOCK TABLE ...;
Vsechny zamky trvaji do provedeni COMMITu nebo ROLLBACKu.

Jednoduchy dukaz:
Ze dvou session lze spustit napr. UPDATE disjunktni mnoziny zaznamu,
aniz by nektery z procesu zustal cekat na uvolneni zamku nad tabulkou
druhym z nich (tj. az provede commit nebo rollback).

Je mozne, ze existuje nastaveni, pri kterem Oracle zamkne celou tabulku
pri zahajeni transakce. Ale bezne se nepouziva a rozhodne neni
defaultni.

-- 
						Jan Šerák


Další informace o konferenci Databases