Компания, в которой я работаю, имеет несколько огромных таблиц журналов / журналов, которые записываются каждые 10 секунд или около того с транзакциями. . Я хотел бы скопировать много данных в этой таблице и удалить их из этой таблицы, потому что около 75% старых данных могут быть помещены в архивную таблицу или что-то в этом роде, но если я сделаю это неправильно, и таблица будет заблокирована вверх это было бы катастрофой.
В предыдущем вопросе один парень придумал что-то вроде этого, я хотел бы знать, что это не испортит все, достаточно ли намеков nolock, чтобы обезопасить меня и все записи работают нормально? Если нет, что мне делать?
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