[英]SQL Large Insert Transaction log full Error
我試圖在 8 個表中插入近 1,75,00,000。 我有存儲過程。 在該過程的開始和結束時,我已經編寫了 Transaction。
錯誤:由於“ACTIVE_TRANSACTION”,數據庫“Database”的事務日志已滿。
注意:我想保留交易中的所有內容,其自動化過程。 這個過程每個月都會在數據庫上運行
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
盡管擁有如此龐大的事務是無稽之談,雖然您可以通過使用時間戳或 GUID 標記行來手動回滾,但要這樣做,您需要在事務日志文件中有必要的空間存儲從第一個插入到最后一個插入的所有行,以及其他用戶同時執行的所有事務。 許多解決方案可以解決您的問題:1) 擴大您的事務日志文件 2) 添加一些補充日志文件 3) 刪除或減少事務范圍
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.