当前位置:数据库 > SQLServer >>

分析SQL SERVER日志中出现好多数据库 'tempdb' 的日志已满。请备份该数据库的事务日

为大家分析下tempdb日志已满的种种情况,和一些常规的处理方法,遇到类似的问题朋友立刻试试吧,很实用哟

SQL SERVER日志中出现好多数据库 'tempdb' 的日志已满。请备份该数据库的事务日

发现机器有时运行特别慢,而且SQL SERVER日志中出现好多

数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。
spid57        错误: 9002,严重度: 17,状态: 2

清除日志后还是出现上面的错误提示,把SQL SERVER重装后还是有。


1、该盘的空间是否还很多!
2、做好数据库完全备份后,删除数据库日志看看


UPUP 我也碰到了....磁盘剩余空间很大.....我查看TEMP库 还有现在用的那个大点的库日志 数据文件都不大..
平常有计划任务 每天日志备份 差异备份 每周完全备份(覆盖)

那肯定是有低级错误的连接导致卡笛尔现象将TEMPDB耗尽
当然也或许是其他大量产生临时数据的情况
Profiler一下

----------------------------

事件类型: 错误 事件来源: MSSQLSERVER 事件种类: (2) 事件 ID: 17052 日期:  2003-8-1 事件:  9:50:23 用户:  N/A 计算机: SQL 描述: 错误: 9002,严重度: 17,状态: 6 数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。  数据: 0000: 2a 23 00 00 11 00 00 00   *#...... 0008: 04 00 00 00 53 00 51 00   ....S.Q. 0010: 4c 00 00 00 08 00 00 00   L....... 0018: 70 00 61 00 63 00 6b 00   p.a.c.k. 0020: 69 00 6e 00 67 00 00 00   i.n.g...

重启SQL SERVER服务就可以了.


use tempdb select * from tempdb.dbo.sysfiles dump transaction tempdb with no_log --清空日志 dbcc shrinkfile ('templog',1)   select * from tempdb.dbo.sysfiles


清空日志 DUMP  TRANSACTION  库名  WITH  NO_LOG     再: 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了


SQL Server在每次重启服务时会重建tempdb数据库 如果系统运行过程中 tempdb因需要自动增长了,SQL Serve不会记住增长后的大小,重启服务后仍然恢复到初始大小, 但如果用户使用了手工调整tempdb的大小,重启服务SQL Server会把tempdb重建为用户指定大小 测试示例 tempdb初始化大小为8MB 1)使tempdb自动增长 select b.* into #t from sysprocesses a,sysobjects b 重启后使用sp_helpdb 'tempdb' 可以看到tempdb又恢复到8MB 2) 用户使用Alter Database调整为100MB, USE master GO ALTER DATABASE tempdb MODIFY FILE    (NAME = tempdev,SIZE = 100MB) 重启服务后使用查看tempdb大小就为100MB 以下查询可以看到tempdb的变化 select a.filename,a.name,a.size*8.0/1024.0 as originalsize_MB, f.size*8.0/1024.0 as currentsize_MB from master..sysaltfiles a join tempdb..sysfiles f on a.fileid=f.fileid where dbid=db_id('tempdb') and a.size<>f.size 总结: 当系统自动调整tempdb大小时,对文件的读写将暂时的阻塞 所以如果我们预知tempdb将会增加到某个大小时,可以自行调整,从而避免性能下降

 

SQL 2000中tempdb数据库的收缩
问题描述:昨天发现数据库的自动备份出错,错误代号:9002,错误提示:数据库 '%1!' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。
问题原因:tempdb是SQL Server 2000中非常重要的一个系统数据库,这个数据库没有办法使用数据库维护计划来进行收缩。如果tempdb数据库日志满了后,会造成数据库备份失败、数据库无法写入数据等问题,因此,tempdb数据库和日志的收缩的日常维护就显得非常重要。
问题解决:我们不能使用维护计划来收缩tempdb数据库和日志文件,可以采用SQL脚本的方法,使用Agent作业来实现。
企业管理器—管理—SQL Server代理—作业,新建一个作业。
名称:tempdb 日志清除,收缩数据库
步骤:shrik 内容:
use tempdb
go
dbcc shrinkfile(tempdev,truncateonly)
dbcc shrinkfile(templog,truncateonly)
调度:每天早上6:00执行。
注意:我们公司的试验服务器安装的是SQL Server 2005,同样出现了tempdb日志已满的问题,使用上面的脚本却没有办法执行成功。后来发现这个数据库tempdb的故障还原模型被改成了“完全”。只要把tempdb的故障还原模型改回“简单”,再执行上面的SQL脚本就可以了。如果还不行,就需要使用SQL的单用户模式启动SQL,启动方法:开始—运行,输入“services.msc”,回车,找到服务MSSQLSERVER,先停止该服务,再在启动参数中写入“-c -m”,再点“启动”,启动SQL服务。然后再执行相应的操作即可。最后别忘了把启动参数去掉,再重启SQL及相关的服务,最重要的是Agent。

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,