SQL Ошибка заполнения журнала транзакций с большой вставкой - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь вставить почти 1,75,00,000 в 8 таблиц. Я сохранил процедуру для этого. В начале и конце этой процедуры я написал Transaction.

Ошибка: журнал транзакций для базы данных 'Database' переполнен из-за 'ACTIVE_TRANSACTION'.

Примечание: я хочу сохранить все в транзакции, в ее автоматизированном процессе. Этот процесс будет выполняться в базе данных каждый месяц

CREATE OR ALTER PROCEDURE [dbo].[InsertInMainTbls]
AS
BEGIN
PRINT('STARTED [InsertInMainTbls]')

DECLARE @NoRows INT
DECLARE @maxLoop INT
DECLARE @isSuccess BIT=1
BEGIN TRY

    BEGIN TRAN
        --1st table
        SET @NoRows = 1
        SELECT @maxLoop=(MAX([col1])/1000)+1 FROM ProcessTbl
        SELECT 'loop=='+ CAST(@maxLoop as Varchar)
        WHILE (@NoRows <= @maxLoop)
        BEGIN
                INSERT INTO MainTbl WITH(TABLOCK)
                ( col1,col2,col3....col40)
                SELECT
                ( val1,val2,val3....val40)FROM
                ProcessTbl
                WHERE [col1] BETWEEN (@NoRows*1000)-1000 
                AND (@NoRows*1000)-1
            SET @NoRows = @NoRows+1;
        END 
    --2nd table
    .
    .
    .
    --8th table
    SET @isSuccess=1;  
    COMMIT TRAN

END TRY
BEGIN CATCH

        PRINT ERROR_MESSAGE();
        SELECT  ERROR_MESSAGE() 'ErrorMsg'  ;
        SET @isSuccess=0;
    ROLLBACK TRAN

END CATCH

1 Ответ

0 голосов
/ 27 марта 2020

Несмотря на то, что бессмысленно иметь такую ​​огромную транзакцию, в то время как вы можете выполнить откат вручную, пометив строки чем-то вроде метки времени или GUID, для этого вам нужно иметь необходимое пространство в файл журнала транзакций, в котором хранятся все строки всех ваших вставок от первой до последней, плюс все транзакции, которые другой пользователь выполнит одновременно. Множество решений для решения вашей проблемы: 1) увеличить файл журнала транзакций 2) добавить несколько дополнительных файлов журнала 3) удалить или уменьшить область транзакции

...