SQL Server無(wú)法收縮日志文件的原因分析及解決辦法
最近服務(wù)器執(zhí)行收縮日志文件大小的job老是報(bào)錯(cuò)

我所用的一個(gè)批量收縮日志腳本
USE [master]
GO
/****** Object: StoredProcedure [dbo].[ShrinkUser_DATABASESLogFile] Script Date: 01/05/2016 09:52:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[ShrinkUser_DATABASESLogFile]
AS
BEGIN
DECLARE @DBNAME NVARCHAR(MAX)
DECLARE @SQL NVARCHAR(MAX)
--臨時(shí)表保存數(shù)據(jù)
CREATE TABLE #DataBaseServerData
(
ID INT IDENTITY(1, 1) ,
DBNAME NVARCHAR(MAX) ,
Log_Total_MB DECIMAL(18, 1) NOT NULL ,
Log_FREE_SPACE_MB DECIMAL(18, 1) NOT NULL
)
--游標(biāo)
DECLARE @itemCur CURSOR
SET
@itemCur = CURSOR FOR
SELECT name from SYS.[databases] WHERE [name] NOT IN ('MASTER','MODEL','TEMPDB','MSDB','ReportServer','ReportServerTempDB','distribution')
and state=0
OPEN @itemCur
FETCH NEXT FROM @itemCur INTO @DBNAME
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL=N'USE ['+@DBNAME+'];'+CHAR(10)
+'
DECLARE @TotalLogSpace DECIMAL(18, 1)
DECLARE @FreeLogSpace DECIMAL(18, 1)
DECLARE @filename NVARCHAR(MAX)
DECLARE @CanshrinkSize BIGINT
DECLARE @SQL1 nvarchar(MAX)
SELECT @TotalLogSpace=(SUM(CONVERT(dec(17, 2), sysfiles.size)) / 128)
FROM dbo.sysfiles AS sysfiles WHERE [groupid]=0
SELECT @FreeLogSpace = ( SUM(( size - FILEPROPERTY(name, ''SpaceUsed'') )) )/ 128.0
FROM sys.database_files
WHERE [type] = 1
SELECT @filename=name FROM sys.database_files WHERE [type]=1
SET @CanshrinkSize=CAST((@TotalLogSpace-@FreeLogSpace) AS BIGINT)
SET @SQL1 = ''USE ['+@DBNAME+']''
SET @SQL1 = @SQL1+
''DBCC SHRINKFILE (['' + @filename + ''],'' + CAST(@CanshrinkSize+1 AS NVARCHAR(MAX)) + '')''
EXEC (@SQL1)'
EXEC (@SQL)
FETCH NEXT FROM @itemCur INTO @DBNAME
END
CLOSE @itemCur
DEALLOCATE @itemCur
SELECT * FROM [#DataBaseServerData]
DROP TABLE [#DataBaseServerData]
END
幸虧報(bào)錯(cuò)信息還是很全面,根據(jù)報(bào)錯(cuò)信息找到相關(guān)的數(shù)據(jù)庫(kù),執(zhí)行一下DBCC LOGINFO
dbcc loginfo(N'cdb')

發(fā)現(xiàn)確實(shí)只有兩個(gè)VLF文件,不能再收縮了,因?yàn)槭桥磕_本,當(dāng)其中有一個(gè)庫(kù)失敗之后,后續(xù)的庫(kù)就不會(huì)再進(jìn)行收縮操作
這里只要加上數(shù)據(jù)庫(kù)的VLF數(shù)量的判斷就可以了

本文寫的不好,還請(qǐng)各位大俠提出寶貴意見(jiàn),如有好的解決方案歡迎分享,大家共同學(xué)習(xí)進(jìn)步。
相關(guān)文章
sql語(yǔ)句查詢數(shù)據(jù)庫(kù)中的表名/列名/主鍵/自動(dòng)增長(zhǎng)值實(shí)例
sql語(yǔ)句查詢數(shù)據(jù)庫(kù)中的表名/列名/主鍵/自動(dòng)增長(zhǎng)值實(shí)例,需要的朋友可以參考下2012-06-06
基于SQL Server中如何比較兩個(gè)表的各組數(shù)據(jù) 圖解說(shuō)明
本篇文章小編為大家介紹,基于SQL Server中如何比較兩個(gè)表的各組數(shù)據(jù) 圖解說(shuō)明。需要的朋友參考下2013-04-04
sqlserver中存儲(chǔ)過(guò)程的遞歸調(diào)用示例
這篇文章主要介紹了sqlserver中存儲(chǔ)過(guò)程的遞歸調(diào)用示例,本文直接給出示例代碼,需要的朋友可以參考下2015-07-07
SQL Server將一列的多行內(nèi)容拼接成一行的實(shí)現(xiàn)方法
這篇文章主要介紹了SQL Server將一列的多行內(nèi)容拼接成一行的實(shí)現(xiàn)方法,需要的朋友可以參考下2015-11-11
SQL窗口函數(shù)之聚合窗口函數(shù)的使用(count,max,min,sum)
許多常見(jiàn)的聚合函數(shù)也可以作為窗口函數(shù)使用,包括AVG()、SUM()、COUNT()、MAX()以及MIN()等函數(shù),本文就詳細(xì)的介紹了SQL窗口函數(shù)之聚合窗口函數(shù)的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
sql自動(dòng)化檢查和分析工具 之soar和soar-web 安裝和使用體驗(yàn)
這篇文章主要介紹了sql自動(dòng)化檢查和分析工具 之soar和soar-web 安裝和使用體驗(yàn),本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
記一次公司倉(cāng)庫(kù)數(shù)據(jù)庫(kù)服務(wù)器死鎖過(guò)程及解決辦法
根據(jù)操作系統(tǒng)中的定義:死鎖是指在一組進(jìn)程中的各個(gè)進(jìn)程均占有不會(huì)釋放的資源,但因互相申請(qǐng)被其他進(jìn)程所站用不會(huì)釋放的資源而處于的一種永久等待狀態(tài)。下面小編給大家分享一次公司倉(cāng)庫(kù)數(shù)據(jù)庫(kù)服務(wù)器死鎖過(guò)程及解決辦法,需要的朋友一起看看吧2015-09-09
SQL Server 通過(guò)with as方法查詢樹(shù)型結(jié)構(gòu)
with as 公用表表達(dá)式類似VIEW,但是不并沒(méi)有創(chuàng)建對(duì)象,WITH AS 公用表表達(dá)式不創(chuàng)建對(duì)象,只能被后隨的SELECT語(yǔ)句2019-11-11
SQL中LIKE和REGEXP簡(jiǎn)單對(duì)比分析
這篇文章主要介紹了SQL中LIKE和REGEXP簡(jiǎn)單對(duì)比,在MySQL中,LIKE和REGEXP都可以用于模式匹配,但是它們的語(yǔ)法、性能和應(yīng)用場(chǎng)景有所不同,通常來(lái)說(shuō),在簡(jiǎn)單的字符串模糊匹配場(chǎng)景下,使用LIKE更加高效;而在需要更復(fù)雜的模式匹配時(shí),使用REGEXP更加靈活2023-09-09

