最近公司的數據庫隨著業務量的增多,日志文件巨大(超過300G),造成磁盤空間不夠用,進而后來的訪問數據庫請求無法訪問。
網上類似的方法也很多,但不可行,如下是我實踐過,可行的,將日志文件收縮至任意指定大小的方法:
第一步: 在SQL SERVER Management Studio 中右擊數據庫選擇“屬性”---》“選項”,將恢復模式由默認的“完整”改為“簡單”。

第二步:再次右鍵選擇數據庫的“任務”--》“收縮”---》“文件”菜單,進入收縮文件頁面,將(要收縮的)文件類型選定為“日志”, 將頁面下面的“收縮操作”單選框里選擇“在釋放未使用的空間前重新組織頁,將文件收縮到:”,然后填寫合適的收縮后的日志文件大小。
最后點擊這個頁面下面的“確定”按鈕,以執行收縮文件(日志)操作。
執行完畢后,用戶可以查到到的確該日志文件收縮到指定的大小了。


將文件收縮到 0 即可。瞬間就ok了,比用命令快多了,對于36g的日志也很快。
第三步:在SQL SERVER Management Studio 中右擊數據庫選擇“屬性”---》“選項”,將恢復模式由默認的“簡單”改為“完整”。
下面是最常用的方法一
USE [master]
GO
ALTER DATABASE 庫名 SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE 庫名 SET RECOVERY SIMPLE --簡單模式
GO
USE 庫名
GO
DBCC SHRINKFILE (N'庫名_log' , 11, TRUNCATEONLY)
GO
--這里的DNName_Log 如果不知道在sys.database_files里是什么名字的話,可以用以下注釋的語句進行查詢
--USE 庫名
--GO
--SELECT file_id,name FROM sys.database_files;
--GO
USE [master]
GO
ALTER DATABASE SCDMS SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE SCDMS SET RECOVERY FULL --還原為完全模式
GO
一般來說上面的sql對于日志2個G內速度還可以,如果不行請參考下面的步驟
1:然后在網上查找命令,找到日志文件類型為 REPLICATION 即發布狀態
2:又查找到執行命令 ,該命令顯示很多status為2的日志,即沒有提交的。
DBCC LOGINFO('數據庫名稱')
3:直接選擇我之前創建的發布,提示以下錯誤:
sqlserver無法作為數據庫主體執行,因為主體 "dbo" 不存在...
查找到以下命令,為用戶添加數據庫角色時提示已經存在此帳號請查看數據庫下是否已經存在該帳號并刪除重新授權
USE 庫名
EXEC sp_changedbowner 'sa'
4:然后再刪除發布和訂閱即成功。最后再執行第一步的SQL命令,日志文件縮小成功。
方法二、先設置恢復模式為“簡單恢復”模式,再收縮:
USE BigData ;
GO
ALTER DATABASE BigData
SET RECOVERY SIMPLE;--設置簡單恢復模式
GO
DBCC SHRINKFILE (BigData_Log, 1);
GO
ALTER DATABASE BigData
SET RECOVERY FULL;--恢復為原模式
GO
方法三、
USE BigData;
GO
BACKUP LOG DATABASENAME TO DISK='d:\test.bak'
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (Bigdata_Log, 1);
GO
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- SQL SERVER日志進行收縮的圖文教程
- SQL Server 2000/2005/2008刪除或壓縮數據庫日志的方法
- sql server中錯誤日志errorlog的深入講解
- SQL Server 2008 清空刪除日志文件(瞬間縮小日志到幾M)
- SQLServer數據庫中開啟CDC導致事務日志空間被占滿的原因
- Sqlserver2005日志文件太大如何減小
- SQL Server無日志恢復數據庫(2種方法)
- SqlServer數據庫提示 “tempdb” 的日志已滿 問題解決方案
- MYSQL SERVER收縮日志文件實現方法