La società per cui lavoro ha alcune enormi tabelle di registro/giornale che vengono scritte ogni 10 secondi circa con le transazioni. Vorrei copiare un sacco di dati in questa tabella ed eliminarlo da quella tabella perché circa il 75% dei vecchi dati potrebbe essere messo in una tabella di archivio o qualcosa del genere, ma se faccio questo sbagliato e la tabella viene bloccata sarebbe un disastro.copia dei dati da un'enorme tabella di produzione
In una domanda precedente un tizio si avvicinò con una cosa del genere, mi piacerebbe sapere che questo non rovinerebbe tutto, è l'idea del nolock sufficiente per tenermi al sicuro e tutte le scritture funzionano bene? Se no, cosa dovrei fare?
set identity_insert newtable on
DECLARE @StartID bigint, @LastID bigint, @EndID bigint
select @StartID = max(id)+1
from newtable
select @LastID = max(ID)
from oldtable
while @StartID < @LastID
begin
set @EndID = @StartID + 1000000
insert into newtable (FIELDS,GO,HERE)
select FIELDS,GO,HERE from oldtable (NOLOCK)
where id BETWEEN @StartID AND @EndId
set @StartID = @EndID + 1
end
set identity_insert newtable off
go
Questo è fantastico eccetto qual è il piano per CANCELLARE i vecchi record? Non è davvero un modo per farlo senza una sorta di blocco. – JNK
Sì, ho chiarito la domanda un po ', quindi qual è il modo migliore per cancellare i vecchi record senza intralciare le normali operazioni db? –