私が働いている会社には、トランザクションで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操作の方法ではなく、古いレコードを削除する最良の方法は何ですか? –