一条数据库告警信息 (关于日志文件)

时间:2023-01-26 19:49:33
MS SQL7.0
查看告警信息发现在前日数据库发生以下的告警:
The log file for database 'DB_IP' is full. Back up the transaction log for the database to free up some log space..
错误消息:
Error: 9002, Severity: 17, State: 2
该告警信息持续了2分中,在这两分中里,数据插入失败。两分后没有产生告警,数据库也恢复正常 (目前为止也是正常的)而且日志文件空间(包括硬盘)都有空闲。

没有限制事务日志的尺寸大小


不知道这个错误是怎么产生的,请各位高手指点!!

6 个解决方案

#1


日志已滿,你可以壓縮或清空,可事先要保証數據的安全性

清空log文件


1: 删除LOG
1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K
再将此数据库设置自动收缩
或用代码: 
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs', 
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'


2:清空日志
DUMP TRANSACTION 库名 WITH NO_LOG 

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

3: 如果想以后不让它增长
企业管理器->服务器->数据库->属性->事务日志->将文件增长限制为2M



自动收缩日志,也可以用下面这条语句
ALTER DATABASE 数据库名
SET AUTO_SHRINK ON

故障还原模型改为简单,用语句是
USE MASTER
GO
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE
GO

#2


当初我也是怀疑日志满
可我查了一下,发现并没有限制事务日志的尺寸大小,而是让它自动增长的,硬盘上也有应该有30个G的空闲,我才判断不了到底是哪里的问题

#3


奇怪,怎麼報:The log file for database 'DB_IP' is full.
幫你頂上去,希望有高手幫忙。

#4


查看日志文件是否是只读的,如果不是,可以先将数据库分离,删除‘dp_ID_log.ldf',然后将dp_id_data.mdf文件附加上去。

#5


cqdj(cqdj) 
不是很明白哦,日志文件为什么要设成只读啊,能说的详细些吗

#6


呵呵 估计你执行了对对日志文件增长较快的操作,当时你的数据库日志的是不是比较小的说?

#1


日志已滿,你可以壓縮或清空,可事先要保証數據的安全性

清空log文件


1: 删除LOG
1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K
再将此数据库设置自动收缩
或用代码: 
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs', 
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'


2:清空日志
DUMP TRANSACTION 库名 WITH NO_LOG 

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

3: 如果想以后不让它增长
企业管理器->服务器->数据库->属性->事务日志->将文件增长限制为2M



自动收缩日志,也可以用下面这条语句
ALTER DATABASE 数据库名
SET AUTO_SHRINK ON

故障还原模型改为简单,用语句是
USE MASTER
GO
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE
GO

#2


当初我也是怀疑日志满
可我查了一下,发现并没有限制事务日志的尺寸大小,而是让它自动增长的,硬盘上也有应该有30个G的空闲,我才判断不了到底是哪里的问题

#3


奇怪,怎麼報:The log file for database 'DB_IP' is full.
幫你頂上去,希望有高手幫忙。

#4


查看日志文件是否是只读的,如果不是,可以先将数据库分离,删除‘dp_ID_log.ldf',然后将dp_id_data.mdf文件附加上去。

#5


cqdj(cqdj) 
不是很明白哦,日志文件为什么要设成只读啊,能说的详细些吗

#6


呵呵 估计你执行了对对日志文件增长较快的操作,当时你的数据库日志的是不是比较小的说?