精华内容
下载资源
问答
  • SQLServer 2008中事务日志已满问题处理

    千次阅读 2020-07-20 10:48:27
    排查日志已满问题 解决方法 方法一:界面方式收缩日志 第一步:调整恢复模式 第二步:收缩日志文件 选项说明 第三步:调整恢复模式 方法二:命令行方式收缩日志 另请参阅 错误描述 ...
    
    

     

    错误描述

    错误描述:数据库的事务日志已满。若要查明无法重用日志中的空间的原因 ,请参阅sys.databases 中的 log_reuse_wait_desc 列 。

    错误原因

    事务日志介绍

    官方文档中有如下说明:

    SQL Server 数据库引擎 事务日志的特征:
    事务日志是作为数据库中的单独的文件或一组文件实现的。 日志缓存与数据页的缓冲区高速缓存是分开管理的,因此可在 SQL Server 数据库引擎中生成简单、快速和功能强大的代码。 有关详细信息,请参阅事务日志物理体系结构。
    日志记录和页的格式不必遵守数据页的格式。
    事务日志可以在几个文件上实现。 通过设置日志的 FILEGROWTH 值可以将这些文件定义为自动扩展。 这样可减少事务日志内空间不足的可能性,同时减少管理开销。 有关详细信息,请参阅 ALTER DATABASE (Transact-SQL) 文件和文件组选项。
    重用日志文件中空间的机制速度快且对事务吞吐量影响最小。

    日志截断将释放日志文件的空间,以便由事务日志重新使用。 必须定期截断事务日志,防止占满分配的空间。 几个因素可能延迟日志截断,因此监视日志大小很重要。 某些操作可以最小日志量进行记录以减少其对事务日志大小的影响。
    日志截断从 SQL Server 数据库的逻辑事务日志中删除不活动的虚拟日志文件 (VLF),释放逻辑日志中的空间以便物理事务日志重用这些空间。 如果事务日志从不截断,它最终将填满分配给物理日志文件的所有磁盘空间。
    为了避免空间不足,除非由于某些原因延迟日志截断,否则将在以下事件后自动进行截断:
    简单恢复模式下,在检查点之后发生。
    在完整恢复模式或大容量日志恢复模式下,如果自上一次备份后生成检查点,则在日志备份后进行截断(除非是仅复制日志备份)。

    日志截断并不减小物理日志文件的大小。 若要减少物理日志文件的物理大小,则必须收缩日志文件。 有关收缩物理日志文件大小的信息,请参阅 管理事务日志文件的大小。但是,请记住可能延迟日志截断的因素。 如果在日志收缩后还需要存储空间,则会再次增加事务日志,导致在增加日志操作期间产生性能开销。

    在日志记录长时间处于活动状态时,事务日志截断将延迟,事务日志可能填满。
    实际上,日志截断会由于多种原因发生延迟。查询 sys.databases 目录视图的 log_reuse_wait 和 log_reuse_wait_desc 列,了解哪些因素(如果存在)阻止日志截断。 下表对这些列的值进行了说明。

    log_reuse_wait 值log_reuse_wait_desc 值描述
    0NOTHING当前有一个或多个可重复使用的虚拟日志文件 (VLF)。
    1CHECKPOINT自上次日志截断之后,尚未生成检查点,或者日志头尚未跨一个虚拟日志 (VLF) 文件移动。 (所有恢复模式)这是日志截断延迟的常见原因。 有关详细信息,请参阅数据库检查点 (SQL Server)。
    2LOG_BACKUP在截断事务日志前,需要进行日志备份。 (仅限完整恢复模式或大容量日志恢复模式)完成下一个日志备份后,一些日志空间可能变为可重复使用。
    3ACTIVE_BACKUP_OR_RESTORE数据备份或还原正在进行(所有恢复模式)。如果数据备份阻止了日志截断,则取消备份操作可能有助于解决备份直接导致的此问题。
    4ACTIVE_TRANSACTION事务处于活动状态(所有恢复模式):一个长时间运行的事务可能存在于日志备份的开头。 在这种情况下,可能需要进行另一个日志备份才能释放空间。 请注意,长时间运行的事务将阻止所有恢复模式下的日志截断,包括简单恢复模式,在该模式下事务日志一般在每个自动检查点截断。延迟事务。 “延迟的事务 ”是有效的活动事务,因为某些资源不可用,其回滚受阻。 有关导致事务延迟的原因以及如何使它们摆脱延迟状态的信息,请参阅延迟的事务 (SQL Server)。长时间运行的事务也可能会填满 tempdb 的事务日志。 Tempdb 由用户事务隐式用于内部对象,例如用于排序的工作表、用于哈希的工作文件、游标工作表,以及行版本控制。 即使用户事务只包括读取数据(SELECT 查询),也可能会以用户事务的名义创建和使用内部对象, 然后就会填充 tempdb 事务日志。
    5DATABASE_MIRRORING数据库镜像暂停,或者在高性能模式下,镜像数据库明显滞后于主体数据库。 (仅限完整恢复模式)有关详细信息,请参阅数据库镜像 (SQL Server)。
    6REPLICATION在事务复制过程中,与发布相关的事务仍未传递到分发数据库。 (仅限完整恢复模式)有关事务复制的信息,请参阅 SQL Server Replication。
    7DATABASE_SNAPSHOT_CREATION正在创建数据库快照。 (所有恢复模式)这是日志截断延迟的常见原因,通常也是主要原因。
    8LOG_SCAN发生日志扫描。 (所有恢复模式)这是日志截断延迟的常见原因,通常也是主要原因。
    9AVAILABILITY_REPLICA可用性组的辅助副本正将此数据库的事务日志记录应用到相应的辅助数据库。 (完整恢复模式)有关详细信息,请参阅: AlwaysOn 可用性组概述 (SQL Server)。
    10仅供内部使用
    11仅供内部使用
    12仅供内部使用
    13OLDEST_PAGE如果将数据库配置为使用间接检查点,数据库中最早的页可能比检查点日志序列号 (LSN) 早。 在这种情况下,最早的页可以延迟日志截断。 (所有恢复模式)有关间接检查点的信息,请参阅数据库检查点 (SQL Server)。
    14OTHER_TRANSIENT当前未使用此值。

    排查日志已满问题

    官方文档:解决事务日志已满的问题(SQL Server 错误 9002)

    解决方法

    在SQL 2008中清除日志必须在简单模式下进行,等清除动作完毕在调回到完整模式(否则数据库就不支持时间点备份)

    --查看日志文件状况
     use dbname
     dbcc shrinkfile('logname')  --like  XXXX_log
    
    •  

    方法一:界面方式收缩日志

    第一步:调整恢复模式

    选择数据库-属性-选项-恢复模式-选择简单
    在这里插入图片描述
    在这里插入图片描述

    在完整 恢复模式下,所有大容量操作都将被完整地记录下来。 但是,可以通过将数据库暂时切换到用于大容量操作的大容量日志恢复模式,最小化一组大容量操作的日志记录。 最小日志记录比完整日志记录更为有效,并在大容量事务期间,降低了大规模大容量操作填满可用的事务日志空间的可能性。 不过,如果在最小日志记录生效时数据库损坏或丢失,则无法将数据库恢复到故障点。

    第二步:收缩日志文件

    选择数据库-任务-收缩-文件
    在这里插入图片描述
    在这里插入图片描述

    选项说明

    “数据库”
    显示所选数据库的名称。

    文件类型
    选择文件的文件类型。 可用的选项包括 “数据” 和 “日志” 文件。 默认选项为 “数据”。 选择不同的文件组类型,其他字段中的选项会相应地发生更改。

    文件组
    在与以上所选的 “文件类型” 相关联的文件组列表中选择文件组。 选择不同的文件组,其他字段中的选项会相应地发生更改。

    文件名
    从所选文件组和文件类型的可用文件列表中选择文件。

    位置
    显示当前所选文件的完整路径。 此路径无法编辑,但是可以复制到剪贴板。

    当前分配的空间
    对于数据文件,会显示当前分配的空间。 对于日志文件,会显示根据 DBCC SQLPERF (LOGSPACE) 的输出计算出的当前分配的空间。

    可用空间
    对于数据文件,会显示根据 SHOWFILESTATS (fileid) 的输出计算出的当前可用空间。 对于日志文件,会显示根据 DBCC SQLPERF (LOGSPACE) 的输出计算出的当前可用空间。

    释放未使用的空间
    将任何文件中未使用的空间释放给操作系统,并将文件收缩到最后分配的区,因此无需移动任何数据即可减小文件尺寸。 不会将行重新定位到未分配的页。

    在释放未使用的空间前重新组织页
    等效于执行用于指定目标文件大小的 DBCC SHRINKFILE。 选中此选项时,用户必须在 “将文件收缩到” 框中指定目标文件的大小。

    “将文件收缩到”
    为收缩操作指定目标文件的大小。 此大小值不得小于当前分配的空间或大于为文件分配的全部区的大小。 如果输入的值超出最小值或最大值,那么一旦焦点改变或单击工具栏上的按钮时,数值将恢复到最小值或最大值。

    通过将数据迁移到同一文件组中的其他文件来清空文件
    从指定文件迁移所有数据。 此选项允许使用 ALTER DATABASE 语句删除文件。 此选项等效于执行带有 EMPTYFILE 选项的 DBCC SHRINKFILE。

    第三步:调整恢复模式

    选择数据库-属性-选项-恢复模式-选择简单
    在这里插入图片描述

    方法二:命令行方式收缩日志

    本方法未实际操作

    USE [master]
    	GO 
    	ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
    	GO
    	ALTER DATABASE DNName SET RECOVERY SIMPLE--简单模式
    	GO
    	USE DNName
    	GO
    	DBCC SHRINKFILE(N'DNName_Log',11,TRUNCATEONLY)
    	GO
    	USE [master]
    	GO
    	ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
    	GO
    	ALTER DATABASE DNName SET RECOVERY FULL--还原为完全模式
    	GO
    
    •  

    另请参阅

    SQL Server 事务日志体系结构和管理指南
    管理事务日志文件的大小
    事务日志
    收缩文件
    探查 SQL Server 虚拟日志文件
    SQL2008R2 收缩数据库问题 - 日志文件不变小

    展开全文
  • 数据库 'tempdb' 的日志已满 执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。 网上找了下...
    数据库 'tempdb' 的日志已满
    
    执行sql 语句,中间没有用到临时表


    提示服务器: 消息 9002,级别 17,状态 2,行 1
    数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。


    网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的


    解决过程:
    查看了下数据库的属性,是自动增长,不指定文件大小上限。
    在网上百度了很久,试了些方法都不行;数据库所在磁盘还有很大的可用空间,试着下重药了。
    直接把tempdb的数据文件和日志文件的大小改为3000M,
    问题解决。


    记录一下清空日志的命令:
    DUMP TRANSACTION dbname WITH NO_LOG
    截断事务日志命令:
    BACKUP LOG dbname WITH NO_LOG
    收缩日志操作:
    右键点数据库-属性-所有任务-收缩数据库-文件-选择文件-确定。


      


    虽然用清空日志命令清空了tempdb的日志,但是不能解决问题。于是扩大tempdb的数据文件和日志文件的大小,


       ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'templog                                                                                                                         ', MAXSIZE = UNLIMITED)
    ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'templog                                                                                                                         ', FILEGROWTH = 10%)
    ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'templog                                                                                                                         ', SIZE = 1000)


    ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'tempdev                                                                                                                         ', SIZE = 1000)
    展开全文
  • 数据库 'tempdb' 的日志已满 执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。   解决过程 ...
    数据库 'tempdb' 的日志已满

    执行sql 语句,中间没有用到临时表

    提示服务器: 消息 9002,级别 17,状态 2,行 1
    数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。

     

    解决过程

     

    记录一下清空日志的命令:
    DUMP TRANSACTION dbname WITH NO_LOG
    截断事务日志命令:
    BACKUP LOG dbname WITH NO_LOG
    收缩日志操作:
    右键点数据库-属性-所有任务-收缩数据库-文件-选择文件-确定。

      

    虽然用清空日志命令清空了tempdb的日志,但是不能解决问题。于是扩大tempdb的数据文件和日志文件的大小,

       ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'templog ', MAXSIZE = UNLIMITED)
    ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'templog', FILEGROWTH = 10%)
    ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'templog ', SIZE = 1000)

    ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'tempdev  ', SIZE = 1000)

     

    展开全文
  • sqlserver事务日志已满解决方法 一.删除日志文件: 二.手动收缩: 1.数据库右键属性-选项-恢复模式-下拉选择简单-最后点击确定 2.右键数据库-任务-收缩-文件类型-下拉选择日志-收缩操作-在释放未使用…(默认收缩到1...

    sqlserver事务日志已满解决方法


    一.删除日志文件:

    二.手动收缩:

    1.数据库右键属性-选项-恢复模式-下拉选择简单-最后点击确定
    2.右键数据库-任务-收缩-文件类型-下拉选择日志-收缩操作-在释放未使用…(默认收缩到1MB)-最后点击确定
    3.回到第一步骤把恢复模式改为完整!

    三.自动收缩:

    1.为了以后能自动收缩,做如下设置:
    企业管理器–服务器–右键数据库–属性–选项–选择”自动收缩”
    QL语句设置方式:

    EXEC   sp_dboption   ‘数据库名’, 
    	  ‘autoshrink’,   ‘TRUE’
    

    2…如果想以后不让它日志增长得太大:

    企业管理器–服务器–右键数据库–属性–事务日志
    –将文件增长限制为xM(x是你允许的最大数据文件大小)
    –SQL语句的设置方式:

    alter   database   数据库名   modify   file(name=逻辑文件名,maxsize=20)
    

    四.分离附加:
    分离主数据库-删除.ldf文件-附件数据库;

    五.使用sql语句:(可设置为计划)
    –将数据库设为简单模式。日志文件自动断开。

    alter database dbname set recovery simple
    

    –查看日志文件状况

    use dbname
     dbcc shrinkfile('logname')  --like  XXXX_log
    

    –恢复数据库模式

     alter database dbname set recovery full
    

    六.备份日志:

    SQL Server 2008 先备份日志将日志截断.
    再用dbcc shrinkfile(日志文件,1024)收缩日志文件。

    七.设置简单模式:

    设置为简单模式不记录日志;

    八.sql自动缩减日志:

    针对日志这个问题,建议手动写个小工具(SQL提供自动缩减日志的脚本写法),添加到任务计划中,定时执行!可以节省很多磁盘空间!

    展开全文
  • sybase事务日志已满解决方法

    千次阅读 2013-06-25 21:37:29
    重复了N多次都是这样,后来发现,每次打开应用程序的时候,任务管理器中都会相应的多一个进程,但程序界面死活不出现。我检查了我能想到的可能出问题的每一个环节,包括Sybase数据库、配置的IP、网络等等,但终究都...
  • 数据库日志已满的解决办法

    万次阅读 2018-09-21 14:13:15
    右键数据库 - 任务 - 收缩 - 文件   选择文件类型为日志   定义收缩后文件的大小 搞定,空间这就释放出来了,但是为了避免再次出现这种情况。可将数据库日志记录设置从完全记录变更到简单记录。 USE ...
  • 昨天突然有客户反应系统无法正常的操作了!感到很震惊啊,系统一直运行正常啊,怎么会突然出... 问题一:数据库 'XXXX' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log
  • 数据库日志已满,如何释放日志空间

    万次阅读 热门讨论 2012-07-22 11:06:08
    昨天维护YH的时候,遇到了上面的问题。YH到了现在这个阶段,数据量比较大了,上面的问题应该是一种比较常见的... 首先,清空日志   DUMP TRANSACTION 库名 WITH NO_LOG  接着,截断事务日志 BACKUP LOG
  • 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了  --选择数据文件--在收缩方
  • sqlserver 数据库 事务日志已满

    千次阅读 2011-01-26 14:51:00
    http://blog.csdn.net/jwdream2008/archive/2010/06/30/5703780.aspx 数据库 'XXXX' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列 1.清空日志DUMP ...
  • 关于SQL Server数据库日志已满的解决方法
  • Microsoft OLE DB Provider for SQL Server 错误 80040e14 数据库 mis1 的日志已满。请备份该数据库的事务日志以释放一些日志空间。 使用了一个简单的方法收缩了日志:1、BACKUP LOG .... WITH NO_LOG 2、收缩数据库...
  • 数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间问题: 一个使用SQLServer2000做后台的数据库在执行百万条纪录级数据导出的时候总报:“数据库 'tempdb' 的日志已满。请备份该数据库的...
  • SQL Server数据库日志已满的解决方法

    千次阅读 2011-09-20 16:30:33
    日志文件而造成SQL数据库无法写入文件时,可用两种方法: 一种方法:清空日志。 1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名 WITH NO_LOG 2.再打开企业管理器--右键你要压缩的数据库--所有任务--...
  • 数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间问题: 一个使用SQLServer2000做后台的数据库在执行百万条纪录级数据导出的时候总报:“数据库 'tempdb' 的日志已满。请备份该数据库的事务...
  • sqlserver2008 R2 数据库事务日志已满

    千次阅读 2014-09-20 09:20:17
    的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列   处理办法: --将数据库设为简单模式。日志文件自动断开。  alter database dbname set...
  • 数据库'XXXX'的事务日志已满。若要查明无法复用日志中的空间的原因,请参阅 sys.databases 中的log_reuse_wait_desc 列。 故障分析:日志文件太多造成的数据库空间不足; 解决办法: 收缩数据库文件,找到该...
  • --日志文件而造成SQL数据库无法写入文件时,可用两种方法: --清空日志。 --1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名 WITH NO_LOG --2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩...
  • 数据库 '***' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细...
  • SQLServer_数据库删除日志已满方法

    千次阅读 2014-10-28 13:52:51
    2、右键数据库→所有任务→收缩数据库→确定; 3、右键数据库→属性→选项→故障还原模型→设为大容量日志记录→确定。 二、复杂方法 1、清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2、截断事务日志 ...
  • 一个使用SQLServer2000的后台页面总报“数据库 tempdb 的日志已满。请备份该数据库的事务日志以释放一些日志空间”事件查看里面的应用程序日志里也记录了同样的错误。查看了下数据库的属性,是自动增长,不指定文件...
  • 日志已满应如何处理?

    千次阅读 2007-07-04 13:10:00
    --压缩日志及数据库文件大小 /*--特别注意 请按步骤进行,未进行前面的步骤,请不要做后面的步骤 否则可能损坏你的数据库. --*/ 1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志: BACKUP LOG
  • 网上查找的资料,按照步骤做到第三步就可以实现日志的压缩 --压缩日志及数据库文件大小 /*--特别注意 请按步骤进行,未进行前面的步骤,请不要做后面的步骤 否则可能损坏你的数据库. --*/ 1.清空日志 DUMP ...
  • 数据库“tempdb”日志已满解决办法

    千次阅读 2009-01-06 19:54:00
    1:截断事务日志:BACKUP LOG 数据库名 WITH NO_LOG2:清空日志DUMP TRANSACTION 库名 WITH NO_LOG再:企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,...
  • 数据库 ****** 的日志已满。请备份该数据库的事务日志以释放一些日志空间。 可能引起的原因是:统计,排序这类操作太多了,太频繁了。 解决办法:还是要优化语句。 在tempdb库属性中,在[企业管理器]中把[事务...
  • 数据库使用时,莫名其妙出现关于事务日志已满的报错。具体报错如下: 数据库中的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅sys.databases中的log_reuse_wait_desc列。怎么解决呢? 1.运行以下命令...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,115
精华内容 19,646
关键字:

任务日志已满