SQLServer日志收縮的兩種方法實(shí)現(xiàn)
在日常運(yùn)維中,有時(shí)會(huì)遇到“The transaction log for database ‘xxxx’ is full due to ‘ACTIVE_TRANSACTION’.”這樣的報(bào)錯(cuò)信息。
此錯(cuò)誤消息表明:數(shù)據(jù)庫(kù)的事務(wù)日志文件空間耗盡,log 文件不能再存儲(chǔ)新的transaction log。
這個(gè)時(shí)候我們需要進(jìn)行日志收縮。本文將介紹日志收縮的兩種方法。
通過圖形界面進(jìn)行日志收縮
第一步:右鍵數(shù)據(jù)庫(kù)屬性
第二步:更改數(shù)據(jù)庫(kù)恢復(fù)模式,將模式改為Simple。
第三步:右鍵數(shù)據(jù)庫(kù),Tasks→Shrink→Files 。
第四步:收縮數(shù)據(jù)庫(kù)日志,選擇文件類型Log,并在Shrink action 中將文件收縮到給出的Minimum 值,這里的數(shù)據(jù)庫(kù)因?yàn)槭切陆ǖ臎]有數(shù)據(jù),所以提供的Minimum 值為0MB,可以將紅框3中的數(shù)字修改為0。
- File type:選擇所要收縮的是“數(shù)據(jù)庫(kù)文件”還是“日志文件”。
- Currebtly allocated space:數(shù)據(jù)庫(kù)為該文件分配的大小,就是在磁盤上看到的文件大小。
- Available free space:就是“當(dāng)前分配的空間” 減去“實(shí)際使用的空間”。
Shrink action:
① Release unused space:將該文件中未使用的空間釋放出來,數(shù)據(jù)在文件中不移動(dòng);
② Reorganize pages before releasing unused space:此選項(xiàng)可以將文件收縮到“指定大小”,并將數(shù)據(jù)重新組織。其最小值為數(shù)據(jù)庫(kù)“實(shí)際使用的空間”;
③ Empty file by migrating the data to other files in the same filegroup:該選項(xiàng)很少用。
上述操作也可以使用T-SQL替代:
DBCC ShrinkFile(‘?dāng)?shù)據(jù)庫(kù)名', targetsize); /* 收縮數(shù)據(jù)庫(kù)文件 */ DBCC ShrinkFile(‘?dāng)?shù)據(jù)庫(kù)名_log', targetsize); /* 收縮日志文件 */
Targetsize:?jiǎn)挝粸檎祝仨殲檎麛?shù),DBCC SHRINKFILE 嘗試將文件收縮到指定大小。
DBCC SHRINKFILE 不會(huì)將文件收縮到小于“實(shí)際使用的空間”大小,例如“分配空間”為10M,“實(shí)際使用空間”為6M,當(dāng)制定targetsize為1時(shí),則將該文件收縮到6M,不會(huì)將文件收縮到1M。
用本例中的數(shù)據(jù)庫(kù)替換后如下:
DBCC ShrinkFile(‘TEST01', 1); /* 收縮數(shù)據(jù)庫(kù)文件 */ DBCC ShrinkFile(‘TEST01_log', 1); /* 收縮日志文件 */
注意:如若磁盤空間已滿,無法進(jìn)行收縮數(shù)據(jù)庫(kù)事務(wù)日志文件,可采取先分離出部分暫未使用的數(shù)據(jù)庫(kù),然后將MDF文件及LDF文件進(jìn)行拷貝到其他空余盤,進(jìn)行釋放磁盤空間,待日志收縮后,再次將分離出的數(shù)據(jù)庫(kù)文件進(jìn)行附加。
分離數(shù)據(jù)庫(kù)操作如下:
右擊數(shù)據(jù)庫(kù),Task→Detach
點(diǎn)擊OK
此時(shí)發(fā)現(xiàn)數(shù)據(jù)庫(kù)列表中已經(jīng)沒有TEST01,說明數(shù)據(jù)庫(kù)分離成功了。
附加數(shù)據(jù)庫(kù)操作如下:
右擊Databases,單擊Attach
點(diǎn)擊Add,添加數(shù)據(jù)庫(kù)文件
選擇需要添加的文件后點(diǎn)擊OK
檢查添加的文件無誤后,點(diǎn)擊OK
此時(shí)在數(shù)據(jù)庫(kù)列表中可看到剛附件上去的數(shù)據(jù)庫(kù)TEST01
若未顯示TEST01,請(qǐng)刷新數(shù)據(jù)庫(kù)列表
通過 Transact-Sql 進(jìn)行日志收縮
執(zhí)行如下命令:
USE [數(shù)據(jù)庫(kù)名] GO ALTER DATABASE [數(shù)據(jù)庫(kù)名] SET RECOVERY SIMPLE WITH NO_WAIT GO --設(shè)為簡(jiǎn)單模式 ALTER DATABASE [數(shù)據(jù)庫(kù)名] SET RECOVERY SIMPLE GO USE [數(shù)據(jù)庫(kù)名] GO DBCC SHRINKFILE (N'[log文件名]', [ targetsize], TRUNCATEONLY) GO USE [數(shù)據(jù)庫(kù)名] GO ALTER DATABASE [數(shù)據(jù)庫(kù)名] SET RECOVERY FULL WITH NO_WAIT GO --還原為完全模式 ALTER DATABASE [數(shù)據(jù)庫(kù)名] SET RECOVERY FULL GO
[數(shù)據(jù)庫(kù)名]替換為具體數(shù)據(jù)庫(kù), [ targetsize]替換為收縮目標(biāo)值。
替換為本例中的數(shù)據(jù)庫(kù)修改如下:
USE TEST01 GO ALTER DATABASE TEST01 SET RECOVERY SIMPLE WITH NO_WAIT GO --設(shè)為簡(jiǎn)單模式 ALTER DATABASE TEST01 SET RECOVERY SIMPLE GO USE TEST01 GO DBCC SHRINKFILE (N'TEST01_log', 1, TRUNCATEONLY) GO USE TEST01 GO ALTER DATABASE TEST01 SET RECOVERY FULL WITH NO_WAIT GO --還原為完全模式 ALTER DATABASE TEST01 SET RECOVERY FULL GO
到此這篇關(guān)于SQLServer日志收縮方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SQL 日志收縮內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sqlserver數(shù)據(jù)庫(kù)優(yōu)化解析(圖文剖析)
這篇文章主要介紹了sql數(shù)據(jù)庫(kù)查詢數(shù)據(jù)慢,針對(duì)如何優(yōu)化sqlserver數(shù)據(jù)庫(kù)做介紹,需要的朋友可以參考下2015-07-07SQL?Server查詢結(jié)果導(dǎo)出到EXCEL表格的圖文教程
相信大家常常會(huì)遇到將SqlServer查詢結(jié)果導(dǎo)出到Excel的問題,下面這篇文章主要給大家給大家介紹了SQL?Server查詢結(jié)果導(dǎo)出到EXCEL表格的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08SQL Server 2005數(shù)據(jù)庫(kù)還原錯(cuò)誤的經(jīng)典解決方案
本文主要介紹了一個(gè)SQL Server 2005數(shù)據(jù)庫(kù)還原過程中的錯(cuò)誤的解決方案,需要的朋友可以參考下2015-08-08Sql Server使用cursor處理重復(fù)數(shù)據(jù)過程詳解
本節(jié)主要介紹了Sql Server cursor的使用,以處理重復(fù)數(shù)據(jù)為例,需要的朋友可以參考下2014-08-08SQL Server使用游標(biāo)處理Tempdb究極競(jìng)爭(zhēng)-DBA問題-程序員必知
這篇文章主要介紹了SQL Server使用游標(biāo)處理Tempdb究極競(jìng)爭(zhēng)-DBA問題-程序員必知的相關(guān)資料,需要的朋友可以參考下2015-11-11SQL Server 2012 身份驗(yàn)證(Authentication)
這篇SQL Server安全文章,我們學(xué)習(xí)了SQL Server里的多個(gè)驗(yàn)證選項(xiàng)。Windows集成身份驗(yàn)證是最安全的,但并不是都是可行的,微軟多年來已經(jīng)讓SQL Server驗(yàn)證更加安全。2016-04-04SQL Server數(shù)據(jù)庫(kù)錯(cuò)誤829的修復(fù)辦法
SQL Server 錯(cuò)誤 829 是與 SQL Server 頁面相關(guān)的錯(cuò)誤,當(dāng)用戶嘗試自動(dòng)修復(fù)主數(shù)據(jù)庫(kù)中的頁面,但由于某種原因而失敗時(shí),可能會(huì)發(fā)生 SQL Server 錯(cuò)誤 829,所以本文給大家介紹了如何修復(fù) SQL Server 數(shù)據(jù)庫(kù)錯(cuò)誤 829,需要的朋友可以參考下2024-08-08SQL?server數(shù)據(jù)庫(kù)declare和set用法技巧小結(jié)
這篇文章主要給大家介紹了關(guān)于SQL?server數(shù)據(jù)庫(kù)declare和set用法技巧的相關(guān)資料,在SQL Server中,DECLARE用于聲明變量和存儲(chǔ)過程中的參數(shù),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08