我正在运行以下存储过程以删除大量记录。我知道DELETE语句写入事务日志并删除很多行会使日志增长。如何删除SQL 2005中保留事务日志的记录
我已经研究了创建表格和插入记录以保留然后截断源的其他选项,但此方法对我无效。
如何使我的存储过程更加高效,同时确保我不必要地增加事务日志?
CREATE PROCEDURE [dbo].[ClearLog]
(
@Age int = 30
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- DELETE ERRORLOG
WHILE EXISTS (SELECT [LogId] FROM [dbo].[Error_Log] WHERE DATEDIFF(dd, [TimeStamp], GETDATE()) > @Age)
BEGIN
SET ROWCOUNT 10000
DELETE [dbo].[Error_Log] WHERE DATEDIFF(dd, [TimeStamp], GETDATE()) > @Age
WAITFOR DELAY '00:00:01'
SET ROWCOUNT 0
END
END
“我已经研究了创建表和插入记录以保留然后截断源的其他选项,但此方法对我无效。”怎么来的?对此的答案影响可能的解决方案。 – 2009-09-09 19:32:50
如果我截断原始表,会不会有某种超时?这不会在试图写入日志表的应用程序中造成问题吗?这是我的担忧。 – Picflight 2009-09-09 19:35:47
什么是数据库恢复模式设置为? (Full,Bulk_Logged,Simple) – 2009-09-09 20:05:44