關(guān)于sqlserver日志變得超大的刪除解決辦法

    首先說(shuō)說(shuō),這個(gè)sql server的日志,就是*log.ldf結(jié)尾的日志文件,他的日志體系結(jié)構(gòu)其實(shí)挺嚴(yán)謹(jǐn),原意是---如果你不做日志備份,就不給你刪日志,然后也有腳本給你回收日志空間,算是挺安全也方便實(shí)用了.

成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計(jì)制作的公司,為廣大用戶提供了網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站,成都網(wǎng)站設(shè)計(jì),廣告投放,成都做網(wǎng)站選成都創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價(jià)比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。

    看起來(lái)是挺合理的,但是碰到缺心眼的開發(fā)或使用者,日志一天天的脹大,而又忘記回收的話,那就悲催了,這個(gè)時(shí)候你就不可能備份了,然后就清空不了log.ldf日志,因?yàn)橛脖P空間不夠用啊,不能備份也就不能刪日志,就成了個(gè)死循環(huán)了.

    我這邊就遇到這種事,日志被撐到170G了,硬盤總共才200G空間,怎么搞好呢?

    最后經(jīng)過(guò)百度和google兩位幕后大師傅的指點(diǎn),得到了下面的方法,僅供參考,因?yàn)橐部赡苡行┣闆r不太一致.

我們平常用的方法是直接收縮:

–SQL   Server收縮方法

最直接就是在sql server控制界面操作:

右鍵數(shù)據(jù)庫(kù)→任務(wù)→收縮數(shù)據(jù)庫(kù)→確定;

如果還是不理想,又或者試試這樣:

1、右鍵數(shù)據(jù)庫(kù)→屬性→選項(xiàng)→故障還原模型→設(shè)為簡(jiǎn)單→確定;
2、右鍵數(shù)據(jù)庫(kù)→任務(wù)→收縮數(shù)據(jù)庫(kù)→確定;
3、右鍵數(shù)據(jù)庫(kù)→屬性→選項(xiàng)→故障還原模型→設(shè)為大容量日志記錄→確定。

再不行,就要用下面的方法了:

首先我們看看日志當(dāng)前的狀態(tài),

DBCC LOGINFO(test9572)

可以看到status=0的日志,代表已經(jīng)備份到磁盤的日志文件;而status=2的日志還沒有備份。當(dāng)收縮日志文件時(shí),收縮掉的空間其實(shí)就是 status=0的空間,如果日志物理文件無(wú)法減小,這里一定能看到非常多status=2的記錄。

然后我們看看日志截?cái)嘌舆t原因,

SELECT [name] ,[database_id] ,[log_reuse_wait] ,[log_reuse_wait_desc] FROM [sys].[databases];

各種原因及解釋如下:

log_reuse_wait_desc 值

NOTHING    當(dāng)前有一個(gè)或多個(gè)可重復(fù)使用的虛擬日志文件。

CHECKPOINT    自上次日志截?cái)嘀螅形闯霈F(xiàn)檢查點(diǎn),或者日志頭部尚未跨一個(gè)虛擬日志文件移動(dòng)(所有恢復(fù)模式)。

這是日志截?cái)嘌舆t的常見原因。

LOG_BACKUP    需要日志備份,以將日志的頭部前移(僅適用于完整恢復(fù)模式或大容量日志恢復(fù)模式)。

注意:日志備份不會(huì)妨礙截?cái)唷?/p>

完成日志備份后,日志的頭部將前移,一些日志空間可能變?yōu)榭芍貜?fù)使用。

ACTIVE_BACKUP_OR_RESTORE    數(shù)據(jù)備份或還原正在進(jìn)行(所有恢復(fù)模式)。數(shù)據(jù)備份與活動(dòng)事務(wù)的運(yùn)行方式相同。數(shù)據(jù)備份在運(yùn)行時(shí),將阻止截?cái)唷?/p>

ACTIVE_TRANSACTION    事務(wù)處于活動(dòng)狀態(tài)(所有恢復(fù)模式)。一個(gè)長(zhǎng)時(shí)間運(yùn)行的事務(wù)可能存在于日志備份的開頭。在這種情況下,可能需要進(jìn)行另一個(gè)日志備份才能釋放空間。

看完了狀態(tài),我的問題也是這個(gè)LOG_BACKUP,日志沒備份導(dǎo)致,也就是開頭說(shuō)的死循環(huán),因?yàn)橛脖P空間不夠用啊,不能備份也就不能刪日志,就成了個(gè)死循環(huán)了

總有解決辦法,辦法的原理是在簡(jiǎn)單模式下進(jìn)行,等清除動(dòng)作完畢再調(diào)回到完全模式,下面來(lái)看:

首先,我們要確認(rèn)日志的文件名,因?yàn)橛脖P上的文件名不一定是數(shù)據(jù)字典里面的文件名,所以要確認(rèn)下

USE test9572
GO
SELECT file_id,name FROM sys.database_files;
GO

然后就可以準(zhǔn)備刪了:

USE [test9572]
GO
ALTER DATABASE test9572 SET RECOVERY SIMPLE WITH NO_WAIT
GO
--簡(jiǎn)單模式
ALTER DATABASE test9572 SET RECOVERY SIMPLE 
GO
USE test9572
GO
DBCC SHRINKFILE (N'test9572_log' , 11, TRUNCATEONLY) 
GO
USE [test9572]
GO
ALTER DATABASE test9572 SET RECOVERY FULL WITH NO_WAIT
GO
--還原為完全模式
ALTER DATABASE test9572 SET RECOVERY FULL 
GO

刪完可以看看硬盤空間,一切都變好了,

當(dāng)前題目:關(guān)于sqlserver日志變得超大的刪除解決辦法
文章鏈接:http://bm7419.com/article10/gejjdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、搜索引擎優(yōu)化、域名注冊(cè)、外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)