SQL Server无法收缩日志文件 2 因为逻辑日志文件的总数不能少于 2问题
SQL Server无法收缩日志文件 2 因为逻辑日志文件的总数不能少于 2问题
最近服务器执行收缩日志文件大小的job老是报错

我所用的一个批量收缩日志脚本
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) --临时表保存数据
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
) --游标
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
幸亏报错信息还是很全面,根据报错信息找到相关的数据库,执行一下DBCC LOGINFO
dbcc loginfo(N'cdb')

发现确实只有两个VLF文件,不能再收缩了,因为是批量脚本,当其中有一个库失败之后,后续的库就不会再进行收缩操作
这里只要加上数据库的VLF数量的判断就可以了
附上TIPS
VLF的5种状态
0、从未使用过
1、active。表示VLF中存在活动的事务(即未完成的事务)。
2、recoverable。表示VLF中的事务全部已经完成,但是某些操作(例如数据库镜像、复制等)还需要用到这些数据,因此不可以被覆盖。
3、reusable。表示VLF中的数据已经不需要了,可以被覆盖。
4、unused。表示VLF从未被使用。
创建数据库的时候,指定LDF文件可以大一点,比如指定大于1G,LDF文件自动增长指定一次增长200MB
这样就有足够的VLF给你收缩了

如有不对的地方,欢迎大家拍砖o(∩_∩)o
本文版权归作者所有,未经作者同意不得转载。
SQL Server无法收缩日志文件 2 因为逻辑日志文件的总数不能少于 2问题的更多相关文章
- SQL Server 2008 收缩日志 清空删除大日志文件 转载
SQL Server 2008 收缩日志 清空删除大日志文件 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005)Ba ...
- SQL Server 2008收缩日志文件--dbcc shrinkfile参数说明
原文:SQL Server 2008收缩日志文件--dbcc shrinkfile参数说明 DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小. 语法 DBCC SHRINKF ...
- 一张图解释SQL Server集群、镜像、复制、日志传送
一张图解释SQL Server集群.镜像.复制.日志传送 本文版权归作者所有,未经作者同意不得转载.
- 在英文Windows操作系统上使用SQL Server Management Studio(SSMS)导入Excel 97-2003文件时报错:Failure creating file
今天在公司服务器上使用SQL Server Management Studio(SSMS)导入Excel 97-2003文件(.xls)时报错: Failure creating file. (Mic ...
- SQL Server中STATISTICS IO物理读和逻辑读的误区
SQL Server中STATISTICS IO物理读和逻辑读的误区 大家知道,SQL Server中可以利用下面命令查看某个语句读写IO的情况 SET STATISTICS IO ON 那么这个命令 ...
- SQL Server 2008 收缩日志
如果SQL SERVER 日志过大,比如,达到了几十个G,想一次性收缩的,直接执行下面命令即可: USE DATABASENAME; GO – Truncate the log by changing ...
- 《SQL Server企业级平台管理实践》读书笔记——SQL Server中收缩数据库不好用的原因
数据库管理员有时候需要控制文件的大小,可能选择收缩文件,或者把某些数据文件情况以便从数据库里删除. 这时候我们就要使用到DBCC SHRINKFILE命令,此命令的脚本为: DBCC SHRINKFI ...
- SQL SERVER 设置自动备份和删除旧的数据库文件
打开SQL SERVER MANAGEMENT STUDIO,启动SQL SERVER代理服务(注意在“控制面板-管理工具-服务”中设置SQL SERVER AGENT的启动类型为自动).启动后点击“ ...
- SQL Server 数据收缩
1. 数据库的相关属性 在MS中创建数据库时会为数据库分配初始的大小(如下图:数据库和日志两个文件),随着数据库的使用文件会逐渐增大.数据库文件大小的增加有两种方式: 自动增长:在自动增长中可以设置每 ...
随机推荐
- Android Studio上NDK/JNI开发环境问题
基础环境: 操作系统 —— Windows 7 Android Studio —— 1.5.1(android-studio-bundle-141.2456560-windows.exe) NDK — ...
- ASN.1 key structures in DER and PEM
转自:https://tls.mbed.org/kb/cryptography/asn1-key-structures-in-der-and-pem Introduction Everybody lo ...
- 【体系结构】动态调度算法:记分牌算法和tomasulo算法
记分牌和tomasulo算法 动态调度: 通过硬件在程序执行时重新安排代码的执行序列来减少竞争引起的流水线停顿时间 动态调度流水线具备以下功能: (1)允许按序取多条指令和发射多条指令----取指(I ...
- Aspx页面模拟WebService功能
在后台引入 using System.Web.Services 命名空间 然后在编写web服务方法: [WebMethod] public static string GetData(string t ...
- Bootstrap UI 编辑器
1. BootSwatchr BootSwatchr 是由 Drew Strickiand 独立开发和维护的,是唯一支持从右到左语言显示的 Bootstrap 自定义构建工具,这也是它的特色之一.Bo ...
- Linux下安装Tomcat服务器和部署Web应用
一.上传Tomcat服务器
- 安装hadoop+zookeeper ha
安装hadoop+zookeeper ha 前期工作配置好网络和主机名和关闭防火墙 chkconfig iptables off //关闭防火墙 1.安装好java并配置好相关变量 (/etc/pro ...
- 使用dom4j读取xml连接数据库与之单例模式
使用dom4j读取xml ,加入jar包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar public class XmlConfigReader { //懒汉式,延迟加载 ...
- ListAdapter列表适配器
ListAdapter列表适配器其实是继承了BaseAdapter 示例图: MainActivity package com.shaoxin.mylistadapter; import androi ...
- my links
如何解決MySQL 開動不到的問題 MySQL start fail 10 BEST JQUERY FILE UPLOAD PLUGINS WITH IMAGE PREVIEWS Spring MVC ...