我正在使用的公司有一些大型的日志/日记表,这些日志表正在使用事务每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
这是伟大的除了你有什么计划删除旧记录?如果没有发生某种锁定,不是真正的方法。 – JNK 2012-02-13 21:04:04
是的,我稍微澄清了这个问题,那么在不妨碍正常数据库操作的情况下删除旧记录的最佳方法是什么? – 2012-02-13 21:11:00