我正在使用的公司有一些大型的日誌/日記表,這些日誌表正在使用事務每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