Toon posts:

[T-SQL] Update query zonder log

Pagina: 1
Acties:

Verwijderd

Topicstarter
Is het mogelijk om in t-sql een update query te schrijven die de update
rechtstreeks wegschrijft naar de database(mdf/ndf) zonder gebruik te maken van de logfile(ldf).

Ik moet namelijk een update doen van een tabel met 35.000.000 records en de logfile
word hier wel heel erg groot van.

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 09-05 09:06

pistole

Frutter

dat kan helaas niet. Het enige dat je kan doen is je logging op simpel zetten, maar hij zal sowieso de transacties eerst in het tlog wegschrijven.

Ik frut, dus ik epibreer


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Zoals pistole al zegt is dat inderdaad niet mogelijk. Ik los dat altijd op door met kleinere batches te werken. Vanuit de applicatie laat je dan steeds batches van bijv 1.000.000 recs bijwerken in een transactie. De ruimte in de logfile wordt dan 'hergebruikt', omdat er dan al transacties zijn die volledig zijn afgerond.

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 09-05 09:06

pistole

Frutter

zoals bee-es zegt dus.
E.e.a. zou je heel mooi in een sp kunnen doen, eventueel met BEGIN TRANS en COMMIT TRANS.

Mocht je bang zijn dat je log alsnog volloopt kan je je transactielog nog expliciet leeggooien als je wilt. (backup log ... bla)

Ik frut, dus ik epibreer


Verwijderd

pistole schreef op vrijdag 01 april 2005 @ 13:52:
Mocht je bang zijn dat je log alsnog volloopt kan je je transactielog nog expliciet leeggooien als je wilt. (backup log ... bla)
Bij MSSQL en Enterprise Manager moet je dat dan vaak nog een paar keer herhalen, en dan lukt 't zelfs nog niet altijd...

Onderstaand scriptje doet 't een stuk beter (runnen vanuit bv. de Query Analyzer)
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
declare @catalog     varchar(128),
        @logfile     varchar(128),
        @origSize    int,
        @currentSize int,
        @wantedSize  int

select @wantedSize = 5                 /* size in megabytes */
select @catalog  = db_name()
select @logfile  = rtrim(name),
       @origSize = size * 8 / 1024
       from sysfiles where fileid = 2

if @origSize > @wantedSize begin
  exec sp_dboption @catalog, 'trunc. log on chkpt.', 'false'
  checkpoint
  DBCC shrinkfile (@logfile, @wantedSize)
  exec sp_dboption @catalog, 'trunc. log on chkpt.', 'true'
  checkpoint
  select @currentSize = size * 8 / 1024
         from sysfiles where fileid = 2
  print 'Logfile shrunk from ' + convert(varchar(8), @origSize) + 
        ' to ' + convert(varchar(8), @currentSize) + ' MB.'
end else
  print 'The logfile is already smaller than ' +
        convert(varchar(8), @wantedSize) + ' MB, nothing to shrink.'

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Helaas? Gelukkig, bedoel je zeker. :P

Today's subliminal thought is:


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

Gelukkig wel? BULK INSERT

EDIT: 8) <- met stokje

[ Voor 47% gewijzigd door mulder op 01-04-2005 21:14 ]

oogjes open, snaveltjes dicht


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 07-05 22:49

curry684

left part of the evil twins

Verwijderd schreef op vrijdag 01 april 2005 @ 13:42:
Is het mogelijk om in t-sql een update query te schrijven die de update
rechtstreeks wegschrijft naar de database(mdf/ndf) zonder gebruik te maken van de logfile(ldf).

Ik moet namelijk een update doen van een tabel met 35.000.000 records en de logfile
word hier wel heel erg groot van.
Wat moet je dan zoal updaten eigenlijk en waarom is dat een ramp? Ik had laatst nog een transaction log van 6.5Gb op m'n laptop staan na een paar bulk operaties op een beetje lomp grote databases, tja dat gebeurt. Een update op 35 miljoen rows van een paar integers zal echt wellicht net een 0.5~1Gb aan log genereren, en die kun je na de bulk operatie met DBCC SHRINKDATABASE of DBCC_SHRINKFILE toch direct wegflikkeren (eerst even backuppen voor die DBCC kan slim zijn). * curry684 ziet het probleem niet eigenlijk.

Professionele website nodig?


Verwijderd

Was 't nou curry of mayonaise? :?

Sambal bij? :Y)
Pagina: 1