我有一個23億行和76GB大小的大型數據庫。限制SQL Server日誌文件增長率
我的問題是,我想將列類型轉換爲smalldatetime
,但在此操作過程中,.ldf文件增長得如此之大,以至於它佔用了我的整個磁盤空間(它達到350gb),然後查詢退出時出現錯誤。
有什麼辦法讓.ldf變小嗎?
我從選項中縮小了我的.ldf。
數據庫恢復模式設置爲簡單。
我有一個23億行和76GB大小的大型數據庫。限制SQL Server日誌文件增長率
我的問題是,我想將列類型轉換爲smalldatetime
,但在此操作過程中,.ldf文件增長得如此之大,以至於它佔用了我的整個磁盤空間(它達到350gb),然後查詢退出時出現錯誤。
有什麼辦法讓.ldf變小嗎?
我從選項中縮小了我的.ldf。
數據庫恢復模式設置爲簡單。
添加smalldatetime類型的新的可空列。然後慢慢地(即,例如,批量10-100k行)通過基於舊列值設置其值而填充該列。一旦所有行在新列中都有值,請刪除舊列,並將新列重命名爲舊列名。
這將確保沒有交易變得足夠大,嚴重影響您的日誌文件。
這裏是最終代碼: 我運行它,所以我現在就會知道,如果它的100%好明天,但它似乎工作
WHILE (2 > 1)
BEGIN
BEGIN TRANSACTION
UPDATE TOP (10000) [ais].[dbo].[imis position report]
SET [time2] = convert(smalldatetime, left(date, 19))
IF @@ROWCOUNT = 0
BEGIN
COMMIT TRANSACTION
BREAK
END
COMMIT TRANSACTION
-- 1 second delay
WAITFOR DELAY '00:00:01'
END -- WHILE
GO
上面的代碼不起作用:(它仍填充日誌文件並丟失錯誤 –
腳本運行時sys.databases中的log_reuse_wait_desc值是什麼?(請在幾分鐘後檢查)嘗試在後面插入'CHECKPOINT'每個'COMMIT'。 – usr
你能提供一些代碼嗎? –
莫非[這](HTTP://dba.stackexchange。 com/questions/31838/how-to-disable-ldf-file-or-limit-its-size)對你有幫助嗎? (點2,將自動收縮設爲真) –
@Ricardo不,請不要打開自動收縮! –
不要啓用自動收縮;這會對你的數據庫造成嚴重破壞。此外,它不會影響LDF文件,因爲它是一個增長的單個事務。 –