La empresa para la que trabajo tiene algunas tablas enormes de registro/diario que se escriben cada 10 segundos más o menos con transacciones. Me gustaría copiar muchos de los datos en esta tabla y eliminarlos de esa tabla porque aproximadamente el 75% de los datos anteriores podrían colocarse en una tabla de archivo o algo así, pero si lo hago mal y la tabla se bloquea hasta sería un desastre.copia de datos de una gran tabla de producción
En una pregunta anterior a un chico se le ocurrió algo así, me gustaría saber que esto no lo arruinaría todo, ¿es la pista de nolock suficiente para mantenerme a salvo y todas las escrituras funcionan bien? Si no, ¿qué debería hacer?
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
Esto es genial, excepto ¿cuál es su plan para ELIMINAR los registros anteriores? No es realmente una forma de hacer eso sin que ocurra algún tipo de bloqueo. – JNK
Sí, aclaré un poco la pregunta, entonces, ¿cuál es la mejor manera de eliminar los registros anteriores sin interferir con las operaciones normales de DB? –