Я пытался обновить столбец в таблице, и я получаю сообщение об ошибке ниже:
The transaction log for database 'STAGING' is full due to 'ACTIVE_TRANSACTION'.
Я пытаюсь выполнить следующее утверждение:
UPDATE [STAGING].[dbo].[Stg_Encounter_Alias]
SET
[valid_flag] = 1
FROM [Stg_Encounter_Alias] Stg_ea
where [ACTIVE_IND] = 1
and [END_EFFECTIVE_DT_TM] > convert(date,GETDATE())
В моей таблице около 18 миллионов строк. И вышеприведенное обновление изменит все строки. Размер таблицы составляет 2,5 ГБ. Также БД находится в простом режиме восстановления
Это то, что я буду делать очень часто на разных столах. Как я могу справиться с этим?
Размер моей базы данных указан ниже
Ниже приведены свойства базы данных !!! Я попытался изменить размер журнала на неограниченный, но он возвращается к значению по умолчанию.
Может кто-нибудь сказать мне эффективный способ справиться с этим сценарием?
Если я запускаю партиями:
begin
DECLARE @COUNT INT
SET @COUNT = 0
SET NOCOUNT ON;
DECLARE @Rows INT,
@BatchSize INT; -- keep below 5000 to be safe
SET @BatchSize = 2000;
SET @Rows = @BatchSize; -- initialize just to enter the loop
WHILE (@Rows = @BatchSize)
BEGIN
UPDATE TOP (@BatchSize) [STAGING].[dbo].[Stg_Encounter_Alias]
SET
[valid_flag] = 1
FROM [Stg_Encounter_Alias] Stg_ea
where [ACTIVE_IND] = 1
and [END_EFFECTIVE_DT_TM] > convert(date,GETDATE())
SET @Rows = @@ROWCOUNT;
END;
end