31. juli 2009 - 17:38Der er
9 kommentarer og 1 løsning
Transaction ... hvad mangler jeg ?
Hej,
Jeg har en stor table som jeg gerne vil gøre mindre ... det er også lykkedes gangske fint ... men der er nogen ting som driller lidt ...
declare @DD date = getdate(); set @DD = dateadd(D, -30, @DD); declare @SID smallint = 1; WHILE @SID != 450 BEGIN PRINT @SID; BEGIN TRANSACTION DELETE VS FROM VillageStats VS INNER JOIN Villages V ON VS.SID = V.SID AND VS.VID = V.VID WHERE V.SID = @SID AND V.Active = 0 AND VS.Added <= @DD COMMIT TRANSACTION set @SID = @SID + 1; END
Overstående kører fra SID 1 til 449 og sletter en masse data
Men ... inden den er færdig så er min SQL LOG fyldt ... 210 GB ... og der er ikke mere plads på disken ... fint nok, så må jeg jo antage at det hele også bliver kørt i en ydre LOG, og derfor den til sidste fylder de 210 GB ... hvilket jeg troede min BEGIN TRANSACTION/COMMIT TRANSACTION ville løse ...
Når det så er fejlen ved SID 300 ... så kan jeg jo køre samme query igen ... og så de 300 første SID er blevet kørt igennem og pladsen i min LOG er frigivet, vil den så køre igennem anden gang ... men hvordan løses det så ting bliver COMMITED med det samme ... så fejlen ikke sker igen ?
Jeg skal bare kunne slette de rows uden min Log bliver udvidet til 200 GB ... for når den er færdig, så de de mange DB jo igen frigivet i log filen, og jeg kan så lave en shrink på den ... og alt er tilbage til det normale igen ...
lige efter min commit ... og så siger den følgende ...
"One or more of the options (no_log) are not supported for this statement. Review the documentation for supported options."
Så er jeg lost igen ...
Men som Arne_v så skriver i sin sidste post ... er det så en måde at force et check point ind ? sådan jeg kan få frigivet min log før end hele min operation er færdig ?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.