Công ty tôi đang làm việc để có một số bảng nhật ký/nhật ký khổng lồ đang được viết cho mỗi 10 giây hoặc lâu hơn với các giao dịch. Tôi muốn sao chép rất nhiều dữ liệu trong bảng này và xóa nó khỏi bảng đó vì khoảng 75% dữ liệu cũ có thể được đặt trong bảng lưu trữ hoặc thứ gì đó, nhưng nếu tôi làm sai và bảng bị khóa nó sẽ là một thảm họa.sao chép dữ liệu ra khỏi một bảng sản xuất khổng lồ
Trong câu hỏi trước, một chàng trai nghĩ ra điều này, tôi muốn biết rằng điều này sẽ không làm hỏng mọi thứ, là gợi ý nolock đủ để giữ an toàn cho tôi và tất cả các bài viết đều hoạt động tốt? Nếu không, tôi nên làm gì?
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
Điều này thật tuyệt vời ngoại trừ kế hoạch xóa các bản ghi cũ của bạn là gì? Không thực sự là một cách để làm điều đó mà không có một số loại khóa xảy ra. – JNK
Vâng, tôi đã làm rõ câu hỏi một chút, vậy cách tốt nhất để xóa các bản ghi cũ trong khi không cản trở hoạt động db bình thường là gì? –