Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

'dvofazni' COMMIT?!?

[es] :: Baze podataka :: 'dvofazni' COMMIT?!?

[ Pregleda: 1533 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

lare

Član broj: 122678
Poruke: 70
*.team.ba.



+1 Profil

icon 'dvofazni' COMMIT?!?12.10.2010. u 14:05 - pre 164 meseci
Pozdrav. Imam dvije tabele koje su u Master-Detail vezi, odnosno iz prve imam strani ključ na drugu.
Što mi praktično znači da ne mogu insertovati slog u drugu tabelu
sa stranim ključem ako takav isti već ne postoji u prvoj tabeli.


Na primjer: Tabela_1(ID_t1, Opis)
Tabela_2(ID_t2, ID_t1, Opis)

Sada imam jednu stornu-proceduru, koju puštam da se izvrši kao transakcija, ZNAČI ILI ČITAVA ILI NIŠTA.

Code:

         početak transakcije
                  INSERT INTO Tabela_1(ID_t1, Opis)
                  VALUES(1,'nešto za tabelu 1')

                  INSERT INTO Tabela_2(ID_t2, ID_t1, Opis)
                  VALUES(1, 1, 'nešto za tebelu 2')
         commit transakcije ako je sve uspješno prošlo
         inače roolback


E problem nastaje kod izvršavanja ove procedure, zato što mi javi grešku o narušavanju
stranog ključa, tj da pokušavam u tabelu_2 upisati vrijednost u polje ID_t1 koja još
uvijek ne postoji u tabeli_1.
Što i jeste tačno jer prvi insert još uvijek nije commit-an. Mene sad interesuje jel' postoji
mogućnost da se riješi ovaj problem bez razvlašćivanja stranog ključa uz zadržavanje transakcije????



[Ovu poruku je menjao lare dana 12.10.2010. u 21:34 GMT+1]
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: 'dvofazni' COMMIT?!?13.10.2010. u 14:24 - pre 164 meseci
Zkaci konktretan kod, pseudo kod ne pomaze u ovom slucaju. Nije tacno da drugi insert ne vidi ID iz prevog inserta 'jer nije komitovan'. Prvi insert se zivrsava nezavisno od drugog i ide u tabelu T1 i stoji tamo. Onda drugi insert to vidi i pokusa da ubaci red u tabelu T2. Kad kazes 'COMMIT' sve ostaje kako jeste. Ako pak kazes ROLLBACK, onda se oba inserta fizicki brisu iz tabela. COMMIT samo znaci 'nema vise brisanja bez eksplicitnog DELETE'. ROLLBACK znaci 'oops, brisi ovo brze bolje' i brisanje se obavlaj bez da korisnik izda DELETE.

Kao sto rekoh, zkaci nam ceo konkretan kod. pre toga daj definiciju tabela (CREATE TABLE...) Greska moze biti negde drugo, a to mozemo da vidimo samo ako imamo konkretne tabele i konkretan kod. Znaci, prvo CREATE TABLE, onako kako je kod tebe, pa onda daj celu skriptu za proceduru, pa tek onda mozemo da vidimo sta i gde ne valja.
 
Odgovor na temu

lare

Član broj: 122678
Poruke: 70
92.36.235.*



+1 Profil

icon Re: 'dvofazni' COMMIT?!?13.10.2010. u 20:35 - pre 164 meseci
Citat:
Zidar: Zkaci konktretan kod, pseudo kod ne pomaze u ovom slucaju. Nije tacno da drugi insert ne vidi ID iz prevog inserta 'jer nije komitovan'. Prvi insert se zivrsava nezavisno od drugog i ide u tabelu T1 i stoji tamo. Onda drugi insert to vidi i pokusa da ubaci red u tabelu T2. Kad kazes 'COMMIT' sve ostaje kako jeste. Ako pak kazes ROLLBACK, onda se oba inserta fizicki brisu iz tabela. COMMIT samo znaci 'nema vise brisanja bez eksplicitnog DELETE'. ROLLBACK znaci 'oops, brisi ovo brze bolje' i brisanje se obavlaj bez da korisnik izda DELETE.

Kao sto rekoh, zkaci nam ceo konkretan kod. pre toga daj definiciju tabela (CREATE TABLE...) Greska moze biti negde drugo, a to mozemo da vidimo samo ako imamo konkretne tabele i konkretan kod. Znaci, prvo CREATE TABLE, onako kako je kod tebe, pa onda daj celu skriptu za proceduru, pa tek onda mozemo da vidimo sta i gde ne valja.


Problem riješen. Ustvari nije ni postoja:-) već ga je moja brzopletost napravila:-(
Potpuno je tačno ovo što ste mi odgovorili!!! Jer kada sam htio da repliciram
isti problem na novj bazi, praznim tabelam, istoj stored proceduri i snimim video
za pokaz:-)) sve je prošlo u najboljem redu. Onda sam pregledao podatke u orginalnoj
bazi i skontao da je problem u podacima.
Naime, pošto se transakcija odnosila na zaključivanje kase i u okviru nje, između ostalog i
ažuriranja tabela Prometa sintetike i analitike, koje su u Master-Detail odnosu,
dolazilo je do pucanja prilikom inserta. Razlog tome su bili podaci koji su se tu našli
od prije, zbog nekih raniji testiranja punjenja podacima iz faktura i otpremnica.
U svakom slučaju hvala na pomoći i izvinjavam Vam se na oduzetom vremenu.
Pozdrav
 
Odgovor na temu

[es] :: Baze podataka :: 'dvofazni' COMMIT?!?

[ Pregleda: 1533 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.