제가 일하고있는 회사는 트랜잭션으로 매 10 초마다 기록되는 거대한 로그/저널 테이블을 가지고 있습니다. 이 테이블에있는 많은 데이터를 복사하고 그 테이블에서 삭제하고 싶습니다. 이전 데이터의 약 75 %가 아카이브 테이블이나 기타 테이블에 저장 될 수 있기 때문입니다. 그러나이 작업을 잘못 수행하면 테이블이 잠길 수 있습니다. 그것은 재앙이 될 것입니다.거대한 생산 테이블에서 데이터 복사하기
이전 질문에서 한 남자가 이와 비슷한 것을 생각해 냈습니다.이 모든 것이 엉망이되지는 않을 것이라는 것을 알고 싶습니다. 놀럭은 나를 안전하게 지키기에 충분하고 모든 글은 잘 작동합니까? 그렇지 않다면 어떻게해야합니까?
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
기존 레코드를 삭제하려는 계획을 제외하고 이것은 굉장합니다. 일종의 잠금없이 일을 처리하는 방법이 아닙니다. – JNK
그래, 나는 조금 질문을 분명히했다. 그래서 일반적인 DB 작업의 방해가되지 않으면 서 오래된 레코드를 삭제하는 가장 좋은 방법은 무엇일까요? –