我已經看到一些存儲過程包含事務中的所有內容。SQL Server事務日誌截斷/收縮
begin transaction
update
table
set
column c = (column a * column b)
commit
這是管理事務日誌的正確方法嗎?我已經嘗試了一些存儲過程,但它看起來像日誌剛剛失控。在運行具有多個更新/插入/更改語句的存儲過程時管理事務日誌的最佳方式是什麼?
任何幫助,非常感謝。
我已經看到一些存儲過程包含事務中的所有內容。SQL Server事務日誌截斷/收縮
begin transaction
update
table
set
column c = (column a * column b)
commit
這是管理事務日誌的正確方法嗎?我已經嘗試了一些存儲過程,但它看起來像日誌剛剛失控。在運行具有多個更新/插入/更改語句的存儲過程時管理事務日誌的最佳方式是什麼?
任何幫助,非常感謝。
無論查詢是隱式包裝在事務語句還是恢復模型中,都會記錄SQL事務。根據恢復模式,事務將保留在日誌中(完全恢復模式)或被截斷(簡單恢復模式)。無論截斷日誌的模式如何,都不會縮小文件大小。
管理日誌通常不是在您的應用程序中的SQL查詢中處理的,而是通常在DBA任務中處理的。
交易被存儲以允許在失敗的情況下恢復。自上次備份以來,您可以逐步完成事務以在該時間點重新創建數據。簡單恢復模式不允許這樣做,因爲事務在成功執行後立即被截斷(COMMIT)。
備份後,日誌通常會被截斷和收縮。您可以創建SQL維護作業來管理它。
該日誌與您在查詢中有多少顯式TRANSACTION
沒有直接關係。 It's related to your recovery model.明確的TRANSACTION
語句只是使用日誌來回滾或根據請求提交。
此外,如果沒有COMMIT
或ROLLBACK
,您的代碼將會出現BEGIN TRANSACTION
錯誤。
你不需要在事務中包裝這個。它正在運行一個語句,以便它成功或失敗。
如果您正在更新第二個表,並且需要同時保持數據一致,那麼您可能需要考慮這種方法。
但是..事務日誌文件的大小將增長,直到備份爲止。如果數據庫很小,您可能希望將數據庫恢復選項設置爲簡單,並且每晚只備份整個數據庫,這也會截斷事務日誌文件。
謝謝,我只注意到我輸入'結束'而不是'提交'。 – divided 2011-03-07 19:42:00