我在數據庫中解決問題期間遇到問題。我試圖尋找答案,但我發現了兩個模棱兩可的決議。在羣中刪除 - 自動提交與開始/提交事務
問題: 在刪除大量數據期間,我收到一個錯誤:'數據庫事務日誌'[TableName]'已滿。'我被建議刪除部分數據。
我發現了兩個不同的方式進行管理這一問題:
1)
DECLARE @Count INT
Declare @for_delete INT
Declare @chunk_size INT
SELECT @chunk_size=100000
SELECT @Count = 0
select @for_delete=count(*) from [Your big table] where [Your Where Clause]
While (@Count < @for_delete)
BEGIN
SELECT @Count = @Count + @chunk_size
BEGIN TRAN
DELETE top(@chunk_size) FROM [Your big table] where [Your Where Clause]
COMMIT TRAN
END
2)
WHILE EXISTS(SELECT TOP 1 1 FROM Table)
BEGIN
DELETE TOP (10000) FROM Table
END
我的問題是,爲什麼在第一個例子,有一個開始/提交單一操作(刪除頂部(x)....)?我認爲單個操作是自動提交 - 因此開始/提交不是必需的? 能否請你解釋一下哪個選項最適合避免關於完整事務日誌的錯誤?單次操作是否需要開始/執行轉換? 非常感謝您的幫助。
這是您只需要一次的東西,還是您需要更頻繁或作爲某個業務流程的一部分? – Shnugo
這是業務流程的一部分。我需要調整所有程序(負責刪除數據)以刪除部分數據。 – Anakhin
這些刪除操作會在用戶在表格中工作時運行嗎?或者這會是「夜間清理」嗎? – Shnugo