[ adopilot @ 10.03.2009. 15:43 ] @
Poštovani !

Radim neke noćne servise koji trebaju da prekopaju baze od početka do kraja i da to normalizuju podatke.
Kada pustim komletnu bazu on to vrti oko sat vremena i ona mu najvjerovatnije nestane prostora za log te pukne.
Poruka izgleda ovako

Code:

The transaction log for database 'Robot_REPL' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases


Skripta za punjenje izgleda ovako

Code:

    insert into PoDanima
        SELECT
            s.art_id
            ,d.datum    
            ,d.par_id
            ,d.mot_id
            ,d.skl_id
            ,dk.Mal_Vel
            ,SUM(dk.ap_sign*s.kol) kol
            ,sum(AP_sign*s.kol*s.nc) nci
            ,sum(
                AP_sign*(((s.kol*s.vpc)-iz_rbi1-iz_rbi2-iz_rbi3)-(s.kol*s.nc))
                 ) Netto_mari
            ,sum(AP_sign*((s.kol*s.vpc)-iz_rbi1-iz_rbi2-iz_rbi3)) pr_vr
            ,d.kom_ob
        FROM
            DOC d
            inner join SDO s on (d.id = s.doc_id)
            inner join dokumenti dk on (d.tip=dk.tip)
        WHERE
            (dk.prodaja=1) 
            
        GROUP BY
            s.art_id, d.datum, d.par_id, d.mot_id, d.skl_id, dk.Mal_Vel, d.kom_ob;


Postoji li šansa da ovu transakciju izvršim bez loga kako bi prošla od jednom.

Za početak sam napravio ograničenje po mijesecima pa ću napraviti SP koji će ise izvršavati u vremenskom periodu a njega će vrtiti neki Cursor.

Da li ima neko elegantnije riješenje kada su ovakva greška javlja, ili je moj prostor za LOG mal jer kada uradim smanjenje baze na particiji za log mi ostane slobodnih 18 GB.

Unaprijed zahvalan Admir.

[ Koce @ 12.03.2009. 15:06 ] @
Ukoliko je moguce, mozes da stavis bazu u simple recovery mod, i radis, kao sto si rekao, dio po dio, u mjesecima npr. U tom slucaju log bi se sam praznio nakon sto uradi upit po upit...
[ adopilot @ 13.03.2009. 16:07 ] @
Stavio sam recovery_model_desc na 'SIMPLE'
I napravio kursor koji okida mjesec po mijesec, i sada je prošlo.




Malo sam čeprkao po ovim drugim noćnim režimima i data rudarenju pa vidm da se negdije koristi bcp.exe
Konzolna aplikacija za bulk insert podataka.
Znači hodogram je slijedeći
Prvo Vrte Query koji izbaci podatke iz SQL-a u jednu txt datoteku na disk
a onda kroz command prompt zovu ovu konzolnu aplikaciju da iste podatke vrate u SQL tablicu BLUK insertom.
Eh sada mi je nekako glup hodogram
Da podtke izbacujem iz SQL-ove baze u neki CSV pa onda da te iste podatke vraćam u istu BAZU.
Šta vi mislite o tome ?

Da li se ovo može riješiti kroz Integration Services da ne maltretiram log svaku bnoć

Jer kako smo mi firma kao koja radi u PDV sistemu gdije se podatci vrte u rasponu jedne PDV-prijave (mjesec + 10 dana) onda ja svaku noć moram
da se vračam do zadnjeg datuma podnesene PDV prijave pa na novo da generišem podatke.Jer je moguće da je u tom vremenskom raspnu nešto
nakandno ispravljeno dodano ili prepravljeno. A dao Bog da prosječno u mijesecu imamo oko 1,5 milijona rekorda koji se moraju posložiti.
Sada je pitanje koliko je to zamorno za SQL i sam server da radi svaku noć.


[ Koce @ 16.03.2009. 09:43 ] @
pa meni nije jasno zasto to uopste izbacujes u txt fajl?
ako vec ne mozes da, iz bilo kog razloga, to stavis u tu istu bazu ili #tabelu, ti kreiraj sam pomocnu bazu u koju ces smijestati te podatke. Naravno da je mnogo brze raditi u okviru sql neko txt-sql, pa makar i kao bulk copy? I uz to mozes da i indexiras tu pom tabelu, bazu i koristis brojne prednosti koje txt nema....
[ mmix @ 16.03.2009. 10:03 ] @
Da, uopste nema logike u tome sto radite. Cak ti ni integration services ne treba za to jer bulk selet + bulk insert moze da se spoji u jedan SQL statement koji mozes da automatizujes. Kakvo je obrazlozenje kljucnih ljudi koji su to osmislili?
[ adopilot @ 16.03.2009. 12:13 ] @
Na početku sam spomenuo da se u tim ogromnim transakcijama Transction Log
prepuni na particiji diska i da on jednostavno neće da ide dalje.

Onda smo te tranaskcije pokušali izvesti bez transakciskog LOG-a
I tako je sva ta priča krenula.
[ adopilot @ 16.03.2009. 12:19 ] @
E evo sada kada sam opet pročitao kompletan post:

Moje suštinsko pitanje na postu je glasilo
Citat:

Postoji li šansa da ovu transakciju izvršim bez loga kako bi prošla od jednom.


Vi ste se dohvatili toga ali nažalost nisam dobio odgovor:
Citat:

bulk selet + bulk insert moze da se spoji u jedan SQL statement koji mozes da automatizujes


Ili možda i jesam ?

Da li treba samo dodati rezervisanu rtiječ BLUK ispred selecta i i inserta da bi zaobišli transakcije sa logom.

Ili su upiti još koplikovaniji.

Kada smo kod transakciski logaova
Postoji li šansa brisanja bez podatak bez istih
ali da ne radim truncate table jer hoću da izbrišem samo podatke tekućeg mijeseca.

U svakom slučaju najiskrenije Hvala vam
na po kozna koji put ukazanoj pomoći i strpljenu u mojim glupim problemima
Admir
[ mmix @ 16.03.2009. 13:16 ] @
Ja sam vise odgovorio na tvoje pitanje dal mozes da iskoristis integration services da zaobidjes export u txt i import nazad, a odgovor je da ti ne treba ni IS ako su baze direktno vidljive i samo pretaces iz jedne u drugu, to moze i distribuirani select/insert

sto se tice samog transaction loga, njegov rast za insert/update/delete ne mozes da izbegnes u okviru implicitne ili eksplicitne transakcije (osim ako nema neki set za koji ne znam), tako da je odgovor na to pitanje NE. Ono sto simple recovery radi je da jednostavno truncuje log posle svake transakcije pa kad podelis operaciju na vise segmenata/transakcija svaki segment iskoristi isti deo log fila umesto da ga dalje naduva, na sto vise segmenata podelis za toliko ces smanjiti neophodan prostor za log file.
[ sallle @ 23.03.2009. 22:10 ] @
a jel bi moglo hipoteticki da se umesto nekog normalnog fajla, podmetne neki device ili neki fajl koji bi prosto gutao binarne podatke. pretpostavljam da windows ima neki entitet, u koji se mogu upisivati podaci, al da taj entitet bude memorijski ogranicen ( i da prilikom overflow-a ne izbacuje exception-e)... kolko se secam, linux ima neke fore da se sa odredjenim portovima radi kao sa fajlovima...

Kako uopste sql server radi, jel mu transakcioni log sluzi i za commit, ili samo za rollback?