SQL?Server日志文件無法收縮的解決方法
前言
正常情況下,不要輕易的收縮日志文件,但是日積月累,日志文件太大,造成硬盤空間不足,不得已去收縮時(shí),卻發(fā)現(xiàn)收縮不了,那是因?yàn)樵谶€原的完整模式下活動(dòng)事務(wù)一直使用日志,所以無法收縮。
可以通過以下步驟:
第一步,查詢?nèi)罩拘畔?可省略)
SELECT
name AS 日志文件邏輯名, --這個(gè)就是邏輯名,有的時(shí)候邏輯名和我們看到的文件名不一樣
physical_name AS 物理路徑,
size * 8.0 / 1024 AS 當(dāng)前大小MB
FROM sys.database_files
WHERE type_desc = 'LOG';
第二步,強(qiáng)制提交事務(wù),并將 恢復(fù)模式 改為簡單模式
-- 查看數(shù)據(jù)庫中活躍的事務(wù)信息,用于檢查是否有未提交的事務(wù)(可能阻止日志收縮) -- 語法:DBCC OPENTRAN (數(shù)據(jù)庫名稱),會(huì)顯示最早的活動(dòng)事務(wù)、未分發(fā)的事務(wù)等信息 DBCC OPENTRAN (databaseName); -- 執(zhí)行檢查點(diǎn)操作,強(qiáng)制將內(nèi)存中已提交的事務(wù)日志從緩存寫入磁盤 -- 作用:減少日志文件中的活躍內(nèi)容,為后續(xù)收縮做準(zhǔn)備(確保已提交數(shù)據(jù)持久化) CHECKPOINT; -- 將數(shù)據(jù)庫恢復(fù)模式臨時(shí)改為簡單恢復(fù)模式(SIMPLE) -- 簡單模式下,事務(wù)日志會(huì)自動(dòng)截?cái)啵ㄔ跈z查點(diǎn)后清除不再需要的日志記錄),便于收縮日志文件 -- WITH NO_WAIT:表示如果無法立即執(zhí)行(如存在鎖定),不等待直接返回錯(cuò)誤(避免長時(shí)間阻塞) ALTER DATABASE databaseName SET RECOVERY SIMPLE WITH NO_WAIT;
第三步,開始收縮
-- 收縮指定的數(shù)據(jù)庫日志文件
-- 語法:DBCC SHRINKFILE (日志文件邏輯名, 目標(biāo)大小, 收縮方式)
DBCC SHRINKFILE (
N'database_log', -- 日志文件的邏輯名稱(需與數(shù)據(jù)庫中定義的一致,可通過sys.database_files查詢)
200, -- 收縮后的目標(biāo)大?。▎挝唬篗B)
TRUNCATEONLY -- 僅截?cái)辔词褂玫娜罩究臻g(不移動(dòng)數(shù)據(jù)頁,效率高,僅適用于日志文件)
);
-- 收縮整個(gè)數(shù)據(jù)庫的數(shù)據(jù)文件和日志文件(通常在收縮日志后補(bǔ)充,進(jìn)一步釋放空間)
-- 語法:DBCC SHRINKDATABASE (數(shù)據(jù)庫名稱),會(huì)嘗試收縮所有文件至最小可能大?。ㄊ軘?shù)據(jù)分布影響)
DBCC SHRINKDATABASE(N'數(shù)據(jù)庫名稱');
GO -- 批處理分隔符,分隔前后語句的執(zhí)行批次
第四步,恢復(fù)數(shù)據(jù)庫的 完整恢復(fù)模式
-- 將數(shù)據(jù)庫恢復(fù)模式改回完整恢復(fù)模式(FULL) -- 完整模式下,日志會(huì)記錄所有事務(wù)細(xì)節(jié),支持時(shí)間點(diǎn)恢復(fù)(生產(chǎn)環(huán)境通常需要此模式) -- WITH NO_WAIT:同上,不等待直接執(zhí)行或返回錯(cuò)誤 ALTER DATABASE databaseName SET RECOVERY FULL WITH NO_WAIT;
SQL server數(shù)據(jù)庫日志文件收縮方法
1、首先打開數(shù)據(jù)庫,選擇需要收縮日志文件的數(shù)據(jù)庫右鍵選擇屬性點(diǎn)擊選項(xiàng)將恢復(fù)模式完整改為簡單點(diǎn)擊確定。

2、右擊數(shù)據(jù)庫選擇收縮文件

3、選擇收縮日志,更改想要收縮到的大小點(diǎn)擊確定

4、收縮完成后將恢復(fù)模式改回完整

此時(shí)數(shù)據(jù)庫日志文件將收縮到規(guī)定大小
收縮命令:
-- 將數(shù)據(jù)庫恢復(fù)模式更改為簡單 ALTER DATABASE [ZiDanDataBase] SET RECOVERY SIMPLE; GO -- 收縮日志到1G DBCC SHRINKFILE (N'ZhiDan_log', 1024); GO -- 將數(shù)據(jù)庫恢復(fù)模式更改為完整 ALTER DATABASE [ZiDanDataBase] SET RECOVERY FULL; GO
以上就是SQL Server日志文件無法收縮的解決方法的詳細(xì)內(nèi)容,更多關(guān)于SQL Server日志文件無法收縮的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- sqlserver 實(shí)現(xiàn)收縮數(shù)據(jù)庫日志操作
- SQL SERVER日志進(jìn)行收縮的圖文教程
- SQL SERVER數(shù)據(jù)庫收縮日志的實(shí)現(xiàn)步驟
- SQLServer日志收縮的兩種方法實(shí)現(xiàn)
- SQL?server數(shù)據(jù)庫日志文件收縮操作方法
- MYSQL SERVER收縮日志文件實(shí)現(xiàn)方法
- SQL Server數(shù)據(jù)庫日志文件收縮的實(shí)現(xiàn)示例
- SQL Server定期收縮日志文件的詳細(xì)步驟
- SQL?SERVER數(shù)據(jù)庫日志文件收縮圖文詳解
相關(guān)文章
SQLserver2016鏡像備份不需要見證服務(wù)器(實(shí)戰(zhàn)親測(cè))
本文介紹了SQL2016鏡像備份的功能和優(yōu)勢(shì),包括數(shù)據(jù)保護(hù)、恢復(fù)和容災(zāi)等方面的應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
SQL SERVER 與ACCESS、EXCEL的數(shù)據(jù)轉(zhuǎn)換
SQL SERVER 與ACCESS、EXCEL的數(shù)據(jù)轉(zhuǎn)換...2006-07-07
SQLSERVER 臨時(shí)表和表變量的區(qū)別匯總
不管臨時(shí)表還是表變量都帶了表這個(gè)詞,既然提到表 ,按推理自然會(huì)落到某數(shù)據(jù)庫中,如果真在一個(gè)數(shù)據(jù)庫中,那自然就有它的存儲(chǔ)文件 .mdf和.ldf,那是不是如我推理的那樣呢,這篇文章主要介紹了SQLSERVER 臨時(shí)表和表變量到底有什么區(qū)別,需要的朋友可以參考下2023-02-02
查看本地sql server數(shù)據(jù)庫的ip地址的方法指南
程序連線SQL數(shù)據(jù)庫,需要SQL Server實(shí)例的名稱或網(wǎng)絡(luò)地址,故本文給大家介紹了查看本地sql server數(shù)據(jù)庫的ip地址的方法指南,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
SQL Server數(shù)據(jù)庫的死鎖詳細(xì)說明
死鎖是指在一組進(jìn)程中的各個(gè)進(jìn)程均占有不會(huì)釋放的資源,但因互相申請(qǐng)被其他進(jìn)程所站用不會(huì)釋放的資源而處于的一種永久等待,下面這篇文章主要給大家介紹了關(guān)于SQL Server死鎖的相關(guān)資料,需要的朋友可以參考下2024-07-07
SQL 多條件查詢幾種實(shí)現(xiàn)方法詳細(xì)介紹
這篇文章主要介紹了SQL 多條件查詢兩種實(shí)現(xiàn)方法詳細(xì)介紹的相關(guān)資料,一種是排列結(jié)合,另一種是動(dòng)態(tài)拼接SQL,需要的朋友可以參考下2016-12-12
SQL實(shí)現(xiàn)模糊查詢的四種方法小結(jié)
在SQL中,模糊查詢是一種通過匹配字符串中的一部分或關(guān)鍵字來查詢數(shù)據(jù)的方法,本文主要介紹了SQL實(shí)現(xiàn)模糊查詢的四種方法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作
這篇文章主要介紹了SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10

