다음 릴리스의 일부로 수백만 행을 업데이트해야하지만 그렇게하면 트랜잭션 로그가 채워지고 실패합니다. 몇 가지 아이디어가 있지만 저는 SQL 전문가가 아니므로 잘 모르는 문제가있을 것이라고 확신합니다.수백만 행의 업데이트 쿼리가 트랜잭션 로그를 채움
타당한 점 :
- 나는 그래서 아무 수동 개입과 T-SQL 방법을 필요로하는 운영 팀에 스크립트를 넘겨해야합니다.
- 분명히 트랜잭션 로그는 15 분마다 재활용됩니다. (나는 아래처럼 catch 블록에
WAITFOR DELAY '00:15:00'
으로 try-catch를 사용하여 루프를 작성하는 것에 대해 생각해 보았습니다) - (EDIT) 데이터 이외에는 수정할 수 없습니다.
- (EDIT) 외래 키 열을 다른 기존 키로 변경하는 간단한 업데이트입니다.
감사합니다,
필
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
트랜잭션을 사용하지 않습니까? –