Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 2.720 pregleda

Najnovija ↓

Insert podataka bez transakciskog loga 10.03.2009. u 16:43 · pre 214 meseci #1
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.

Potpis
S poštovanjem
Re: Insert podataka bez transakciskog loga 12.03.2009. u 16:06 · pre 214 meseci #2
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...
Re: Insert podataka bez transakciskog loga 13.03.2009. u 17:07 · pre 214 meseci #3
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ć.


Potpis
S poštovanjem
Re: Insert podataka bez transakciskog loga 16.03.2009. u 10:43 · pre 214 meseci #4
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....
Re: Insert podataka bez transakciskog loga 16.03.2009. u 11:03 · pre 214 meseci #5
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?
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Insert podataka bez transakciskog loga 16.03.2009. u 13:13 · pre 214 meseci #6
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.
Potpis
S poštovanjem
Re: Insert podataka bez transakciskog loga 16.03.2009. u 13:19 · pre 214 meseci #7
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
Potpis
S poštovanjem
Re: Insert podataka bez transakciskog loga 16.03.2009. u 14:16 · pre 214 meseci #8
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.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Insert podataka bez transakciskog loga 23.03.2009. u 23:10 · pre 214 meseci #9
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?
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme