Firma, dla której pracuję, ma kilka ogromnych tabel dziennika/dziennika, które są zapisywane co 10 sekund przy transakcjach. Chciałbym skopiować wiele danych z tej tabeli i usunąć ją z tej tabeli, ponieważ około 75% starych danych można umieścić w tabeli archiwum lub coś podobnego, ale jeśli zrobię to źle, a tabela zostanie zablokowana to byłaby katastrofa.kopiowanie danych z ogromnego stołu produkcyjnego
W poprzednim pytaniu facet wymyślił coś takiego, chciałbym wiedzieć, że to nie wszystko zepsuje, czy wskazówka nolock wystarczy, aby zachować bezpieczeństwo, a wszystkie pisma działają dobrze? Jeśli nie, co powinienem zrobić?
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
To jest świetne, z wyjątkiem tego, jaki jest twój plan usuwania starych zapisów? Naprawdę nie jest to możliwe bez jakiegoś blokowania. – JNK
Tak, trochę wyjaśniłem pytanie, więc jaki jest najlepszy sposób na usunięcie starych rekordów, a jednocześnie nie przeszkadza w normalnych operacjach db? –