SQL?Server日志文件無法收縮的解決方法
前言
正常情況下,不要輕易的收縮日志文件,但是日積月累,日志文件太大,造成硬盤空間不足,不得已去收縮時,卻發(fā)現(xiàn)收縮不了,那是因為在還原的完整模式下活動事務(wù)一直使用日志,所以無法收縮。
可以通過以下步驟:
第一步,查詢?nèi)罩拘畔?可省略)
SELECT
name AS 日志文件邏輯名, --這個就是邏輯名,有的時候邏輯名和我們看到的文件名不一樣
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ù)庫名稱),會顯示最早的活動事務(wù)、未分發(fā)的事務(wù)等信息 DBCC OPENTRAN (databaseName); -- 執(zhí)行檢查點操作,強(qiáng)制將內(nèi)存中已提交的事務(wù)日志從緩存寫入磁盤 -- 作用:減少日志文件中的活躍內(nèi)容,為后續(xù)收縮做準(zhǔn)備(確保已提交數(shù)據(jù)持久化) CHECKPOINT; -- 將數(shù)據(jù)庫恢復(fù)模式臨時改為簡單恢復(fù)模式(SIMPLE) -- 簡單模式下,事務(wù)日志會自動截斷(在檢查點后清除不再需要的日志記錄),便于收縮日志文件 -- WITH NO_WAIT:表示如果無法立即執(zhí)行(如存在鎖定),不等待直接返回錯誤(避免長時間阻塞) 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 -- 僅截斷未使用的日志空間(不移動數(shù)據(jù)頁,效率高,僅適用于日志文件)
);
-- 收縮整個數(shù)據(jù)庫的數(shù)據(jù)文件和日志文件(通常在收縮日志后補(bǔ)充,進(jìn)一步釋放空間)
-- 語法:DBCC SHRINKDATABASE (數(shù)據(jù)庫名稱),會嘗試收縮所有文件至最小可能大小(受數(shù)據(jù)分布影響)
DBCC SHRINKDATABASE(N'數(shù)據(jù)庫名稱');
GO -- 批處理分隔符,分隔前后語句的執(zhí)行批次
第四步,恢復(fù)數(shù)據(jù)庫的 完整恢復(fù)模式
-- 將數(shù)據(jù)庫恢復(fù)模式改回完整恢復(fù)模式(FULL) -- 完整模式下,日志會記錄所有事務(wù)細(xì)節(jié),支持時間點恢復(fù)(生產(chǎn)環(huán)境通常需要此模式) -- WITH NO_WAIT:同上,不等待直接執(zhí)行或返回錯誤 ALTER DATABASE databaseName SET RECOVERY FULL WITH NO_WAIT;
SQL server數(shù)據(jù)庫日志文件收縮方法
1、首先打開數(shù)據(jù)庫,選擇需要收縮日志文件的數(shù)據(jù)庫右鍵選擇屬性點擊選項將恢復(fù)模式完整改為簡單點擊確定。

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

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

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

此時數(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日志文件無法收縮的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Sql Server 2000刪除數(shù)據(jù)庫備份文件
Sql Server 2000刪除數(shù)據(jù)庫備份文件的語句。2009-09-09
數(shù)據(jù)庫高并發(fā)情況下重復(fù)值寫入的避免 字段組合約束
10線程同時操作,頻繁出現(xiàn)插入同樣數(shù)據(jù)的問題的解決方法。大家可以參考下。2009-08-08
SQL Server中的RAND函數(shù)的介紹和區(qū)間隨機(jī)數(shù)值函數(shù)的實現(xiàn)
這篇文章主要介紹了SQL Server中的RAND函數(shù)的介紹和區(qū)間隨機(jī)數(shù)值函數(shù)的實現(xiàn) 的相關(guān)資料,需要的朋友可以參考下2015-12-12
數(shù)據(jù)庫日常練習(xí)題,每天進(jìn)步一點點(1)
下面小編就為大家?guī)硪黄獢?shù)據(jù)庫基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07
SqlServer強(qiáng)制斷開數(shù)據(jù)庫已有連接的方法
在執(zhí)行建庫腳本時,往往會先將原有的數(shù)據(jù)庫drop掉,由于SqlServer檢測到有數(shù)據(jù)連接時禁止執(zhí)行drop database操作,所以建庫腳本經(jīng)常執(zhí)行失敗,為此我們需要一種能強(qiáng)制斷開數(shù)據(jù)庫已有連接的方法,需要的朋友可以參考下2012-12-12
教你輕松恢復(fù)/修復(fù)SQL Server的MDF文件
下面將主要討論一下后者的備份與恢復(fù)。本文假定您 能熟練使用SQL Server Enterprise Manager(SQL Server企業(yè)管理器)和SQL Server Quwey Analyser(SQL Server查詢分析器)2013-11-11

