次のリリースの一部として数百万行を更新する必要がありますが、更新するとトランザクションログがいっぱいになり、失敗します。私にはいくつかのアイデアがありますが、私はSQLの専門家ではないので、私が気付いていない落とし穴があると確信しています。
関連するポイント:
- スクリプトを運用チームに渡す必要があるため、手動で介入しないT-SQLメソッドが必要です。
- どうやら、トランザクションログは15分ごとにリサイクルされます。
WAITFOR DELAY '00:15:00'
(以下のようにcatchブロックでtry-catchを使用してループを作成することを考えました) - (編集)データ以外は変更できません。
- (編集)これは、外部キー列を別の既存のキーに変更する単純な更新です。
ありがとう、
フィル
DECLARE
@AffectedRows int
SET @AffectedRows = 0
WHILE @AffectedRows < @RowsToUpdate
BEGIN
BEGIN TRY
BEGIN TRAN
-- Do some updates
SET @AffectedRows = @AffectedRows + @@RowCount
COMMIT TRAN
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
WAITFOR DELAY '00:15:00'
END CATCH
END
PRINT @AffectedRows