Oracle a zamky(Re: Multiuzivatelsky SQL server)

radim.kubacki na rtscs.cz radim.kubacki na rtscs.cz
Čtvrtek Říjen 7 08:21:53 CEST 1999



> -----Původní zpráva-----
> Od:	Jan Serak 
> Odesláno:	6. října 1999 11:02
> Komu:	databases na linux.cz
> Předmět:	Oracle a zamky(Re: Multiuzivatelsky SQL server)
> 
> Honza Pazdziora wrote:
> > No, on fakt, ze se zamyka cela tabulka, je IMHO naprosto normalni,
> > pokud chcete zajistit alespon nejakou konzistenci. Samozrejme, jak je
> 
??? To nejak nechapu.

> > 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.
> 
Ja bych rekl, ze Oracle ma zretezene (chained) transakce. Tzn. ze nova
transakce zacina ve chvili, kdy predchazejici skoncila. A to at uz
rollbackem nebo commitem. Ad INSERT: az do skonceni transakce ten zaznam
stejne nikdo nevidi a tudiz ani k nemu menuze pristupovat (ACID vlastnosti
transakci).

Dale. Opravdu se v Oraclu defaultne nezamyka cela tabulka.

A jeste jedna vec. Teoreticky muzete zamykat na nekolika urovnich - cela
tabulka, blok s vice zaznamy, konkretni zaznamy. Dokonce to muzete napsat
tak, aby se rozhodovani provadelo automaticky. Cim mensi kus zamknete tim
mensi nebezpeci deadlocku anebo nutnost cekani na uvolneni neceho vam hrozi,
je to ovsem pracnejsi takze horsi vykon.

Radim



Další informace o konferenci Databases