增加"定时删除数据库S1270一年以上数据"
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,103 @@
|
||||
|
||||
/*定期删除数据存储过程*/
|
||||
CREATE PROCEDURE sp_DeleteOldData_Batch
|
||||
@BatchSize INT = 10000, -- 每批删除的行数
|
||||
@DelayMs INT = 100 -- 每批之间的延迟(毫秒)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @TotalDeleted INT;
|
||||
DECLARE @BatchDeleted INT;
|
||||
DECLARE @CutoffDate DATETIME;
|
||||
DECLARE @StartTime DATETIME;
|
||||
DECLARE @DelayTime VARCHAR(12);
|
||||
|
||||
SET @CutoffDate = DATEADD(YEAR, -1, GETDATE());
|
||||
SET @StartTime = GETDATE();
|
||||
|
||||
PRINT '开始删除一年前的数据,截止时间:' + CONVERT(VARCHAR, @CutoffDate, 120);
|
||||
|
||||
BEGIN TRY
|
||||
-- ============ 删除 BlankingData ============
|
||||
SET @TotalDeleted = 0;
|
||||
SET @BatchDeleted = 1;
|
||||
|
||||
PRINT '开始删除 BlankingData 表数据...';
|
||||
|
||||
WHILE @BatchDeleted > 0
|
||||
BEGIN
|
||||
DELETE TOP (@BatchSize) FROM dbo.BlankingData
|
||||
WHERE OutTime < @CutoffDate;
|
||||
|
||||
SET @BatchDeleted = @@ROWCOUNT;
|
||||
SET @TotalDeleted = @TotalDeleted + @BatchDeleted;
|
||||
|
||||
-- 每批之间短暂延迟,减少锁争用
|
||||
IF @BatchDeleted > 0 AND @DelayMs > 0
|
||||
BEGIN
|
||||
SET @DelayTime = '00:00:00.' + RIGHT('000' + CAST(@DelayMs AS VARCHAR(3)), 3);
|
||||
WAITFOR DELAY @DelayTime;
|
||||
END
|
||||
END
|
||||
|
||||
PRINT 'BlankingData 表删除完成,共删除 ' + CAST(@TotalDeleted AS VARCHAR) + ' 行。';
|
||||
|
||||
|
||||
-- ============ 删除 FeedingData ============
|
||||
SET @TotalDeleted = 0;
|
||||
SET @BatchDeleted = 1;
|
||||
|
||||
PRINT '开始删除 FeedingData 表数据...';
|
||||
|
||||
WHILE @BatchDeleted > 0
|
||||
BEGIN
|
||||
DELETE TOP (@BatchSize) FROM dbo.FeedingData
|
||||
WHERE CreateTime < @CutoffDate;
|
||||
|
||||
SET @BatchDeleted = @@ROWCOUNT;
|
||||
SET @TotalDeleted = @TotalDeleted + @BatchDeleted;
|
||||
|
||||
IF @BatchDeleted > 0 AND @DelayMs > 0
|
||||
BEGIN
|
||||
SET @DelayTime = '00:00:00.' + RIGHT('000' + CAST(@DelayMs AS VARCHAR(3)), 3);
|
||||
WAITFOR DELAY @DelayTime;
|
||||
END
|
||||
END
|
||||
|
||||
PRINT 'FeedingData 表删除完成,共删除 ' + CAST(@TotalDeleted AS VARCHAR) + ' 行。';
|
||||
|
||||
|
||||
-- ============ 删除 tb_alarm ============
|
||||
SET @TotalDeleted = 0;
|
||||
SET @BatchDeleted = 1;
|
||||
|
||||
PRINT '开始删除 tb_alarm 表数据...';
|
||||
|
||||
WHILE @BatchDeleted > 0
|
||||
BEGIN
|
||||
DELETE TOP (@BatchSize) FROM dbo.tb_alarm
|
||||
WHERE EndTime < @CutoffDate;
|
||||
|
||||
SET @BatchDeleted = @@ROWCOUNT;
|
||||
SET @TotalDeleted = @TotalDeleted + @BatchDeleted;
|
||||
|
||||
IF @BatchDeleted > 0 AND @DelayMs > 0
|
||||
BEGIN
|
||||
SET @DelayTime = '00:00:00.' + RIGHT('000' + CAST(@DelayMs AS VARCHAR(3)), 3);
|
||||
WAITFOR DELAY @DelayTime;
|
||||
END
|
||||
END
|
||||
|
||||
PRINT 'tb_alarm 表删除完成,共删除 ' + CAST(@TotalDeleted AS VARCHAR) + ' 行。';
|
||||
|
||||
PRINT '所有表数据删除完成,总耗时:' +
|
||||
CAST(DATEDIFF(SECOND, @StartTime, GETDATE()) AS VARCHAR) + ' 秒。';
|
||||
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
PRINT '数据删除失败:' + ERROR_MESSAGE();
|
||||
THROW;
|
||||
END CATCH
|
||||
END
|
||||
GO
|
||||
@@ -0,0 +1,14 @@
|
||||
@echo off
|
||||
|
||||
:: 设置日志文件路径
|
||||
set LOGFILE=D:\BatLogs\DeleteOldData_%date:~0,4%%date:~5,2%%date:~8,2%.log
|
||||
|
||||
:: 如果 D:\BatLogs 目录不存在,则创建
|
||||
if not exist "D:\BatLogs" mkdir "D:\BatLogs"
|
||||
|
||||
sqlcmd -S .\SQLEXPRESS -d S1270 -E -Q "EXEC sp_DeleteOldData_Batch" >> "%LOGFILE%"
|
||||
|
||||
echo. >> "%LOGFILE%"
|
||||
exit /b %ERRORLEVEL%
|
||||
|
||||
pause
|
||||
Reference in New Issue
Block a user